2012-02-29 30 views
3

我试图在客户端在CBUI中确认付款后验证Amazon FPS CBUI的返回URL。我使用的代码示例从亚马逊亚马逊FPS返回URL Validation with verifySignature PHP api返回“InvalidSignature”

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"; 
} 

所有我从超全局变量$ _GET使用正确的值(我认为),但我总是得到这样的响应参数:

<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> 

我还比较了Amazon返回的签名参数与我发送给VerifySignature API的签名参数的值,它们看起来相同。

在此先感谢您的帮助。

回答

0

我知道这有点晚,但我解决了这个问题,发布解决方案可能可以帮助其他人解决同样的问题。

显然我错过了一些亚马逊通过querystring发送的参数。为了正确验证签名,您需要传递它们发送给您的EVERY参数。所以,我用了一个类似的结构:

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

为每$ _GET参数/值添加到到$ params,最后发送该回亚马逊把它验证。

希望有助于..它对我有用。

相关问题