2012-02-29 18 views
3

クライアントがCBUIで支払いを確認した後、Amazon FPS CBUIの返品URLを検証しようとしています。Amazon FPS返信URL検証with verifySignature "InvalidSignature"を返すPHP api

<Response><Errors><Error><Code>InvalidSignature</Code><Message>The request signature we calculated does not match the signature you provided.</Message></Error></Errors><RequestID>bb922e49-af5e-43ba-a3d0-464ce2851222</RequestID></Response> 

:私は、私はスーパーグローバル変数$ _GETから使用正しい値を持っている(と思う)が、私はいつもこの応答を取得するすべてのパラメータ

public static function test() { 
    $utils = new Amazon_FPS_SignatureUtilsForOutbound(); 

    $params["signature"] = $_GET['signature']; 
    $params["expiry"] = "10/2016"; 
    $params["signatureVersion"] = $_GET['signatureVersion']; 
    $params["signatureMethod"] = $_GET['signatureMethod']; 
    $params["certificateUrl"] = $_GET['certificateUrl']; 
    $params["tokenID"] = $_GET['tokenID']; 
    $params["status"] = $_GET['status']; 
    $params["callerReference"] = $_GET['callerReference']; 

    $urlEndPoint = "http://mydomain.com/Amazon/IpnReturnUrlValidation/Samples/ReturnUrlVerificationSampleCode.php"; //Your return url end point. 
    print "Verifying return url signed using signature v2 ....\n"; 
    //return url is sent as a http GET request and hence we specify GET as the http method. 
    //Signature verification does not require your secret key 
    print "Is signature correct: " . $utils->validateRequest($params, $urlEndPoint, "GET") . "\n"; 
} 

アマゾン

からのコード例を使用して、mはまた、Amazonが返すシグネチャパラメータの値と、VerifySignature APIに送信する値とを比較して、同じように見えます。

ご協力いただきありがとうございます。

答えて

0

私はこれが少し遅れていることを知っていますが、私はこの問題を解決し、解決策を掲示すると、同じ問題を抱えている他の人に役立つかもしれません。

明らかに、私はAmazonが照会によって送信したパラメータのいくつかを見逃していました。署名を正しく検証するには、送信するすべてのパラメータを渡す必要があります。 $ paramsは、すべてに$ _GETパラメータ/値を追加し、最終的にそれが検証を取得するためにアマゾンにその背中を送信するには

foreach ($_GET as $key => $value) { } 

:だから、私はこれに類似の構造を使用していました。

希望は..それは私のために働いた。

関連する問題