2015-02-11 84 views
0

我想学习和玩PHP定义为here的OAuth实现。我没有使用某种类型的库,只是纯粹的OAuth实现,因为我正在试图学习它。然而,就像我试图做到的那样,我似乎无法得到匹配的签名。PHP OAuth签名不匹配

在消费者方面,我有:

<?php 
$consumer_key = '1234'; 
$consumer_secret = '1234'; 
$url = 'http://localhost/oauth/provider/request'; 

try { 
    $oauth = new OAuth($consumer_key, $consumer_secret); 
    $signature = $oauth->generateSignature('POST', $url); 
    $request_token = $oauth->getRequestToken($url); 
    var_dump($signature); 
    print_r($request_token); 
} catch (OAuthException $E) { 
    var_dump($E); 
} 

在供应商方面,我有:

<?php 

function call(){ 
    return OAUTH_OK; 
} 

$OAuthProvider = NULL; 

try{ 
    $OAuthProvider = new OAuthProvider(); 
    $OAuthProvider->consumerHandler('call'); 
    $OAuthProvider->timestampNonceHandler('call'); 
    $OAuthProvider->tokenHandler('call'); 
    $OAuthProvider->isRequestTokenEndpoint(true); 
    $OAuthProvider->checkOAuthRequest(); 
} 
catch(Exception $ex){ 
    echo $OAuthProvider->signature; 
} 

很简单吧?然后,我收到的捕获异常的错误消息是“Signatures_do_not_match”。我检查过了,确实签名不符。这里是输出的一个例子:

Consumer: 8cePFQFqJbL3hY6OjZe6kw63irc= 
Provider: 2SPGA0GcC7GLLR1Jte53xz_bWOY 

任何想法?

回答

0

傻了,我没有正确阅读关于回调函数的规范。该工程的实施是:

消费者:

<?php 

$consumer_key = '1234'; 
$consumer_secret = '1234'; 
$url = 'http://localhost/oauth/provider/request'; 

try { 
    $oauth = new OAuth($consumer_key, $consumer_secret); 
    $signature = $oauth->generateSignature('POST', $url); 
    $request_token = $oauth->getRequestToken($url); 
} catch (Exception $ex) { 
    var_dump($ex); 
} 

和提供者:

<?php 
$OAuthProvider = NULL; 

function consumerHandler(){ 
    return OAUTH_OK; 
} 

function timestampNonceHandler(){ 
    global $OAuthProvider; 
    /** 
    * Here is supposed to be a function to check if 
    * the consumer secret is legit, and is then used to check if the signatures match. 
    */ 
    $OAuthProvider->consumer_secret = '1234'; 
    return OAUTH_OK; 
} 

try{ 
    $OAuthProvider = new OAuthProvider(); 
    $OAuthProvider->consumerHandler('consumerHandler'); 
    $OAuthProvider->timestampNonceHandler('timestampNonceHandler'); 
    $OAuthProvider->isRequestTokenEndpoint(true); 
    $OAuthProvider->checkOAuthRequest(); 
} 
catch(Exception $ex){ 
    var_dump($ex); 
} 

希望这有助于有人想了解OAuth的像我一样。