我正在尝试在客户确认CBUI中的付款后验证Amazon FPS CBUI的返回URL。我正在使用亚马逊的代码示例
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 :(得分:0)
我知道这有点晚了但我解决了这个问题,发布解决方案可能会帮助其他人解决同样的问题。
显然我错过了亚马逊通过查询字符串发送的一些参数。为了正确验证签名,您需要传递它们发送给您的每个参数。所以,我使用了类似的结构:
foreach ($_GET as $key => $value) { }
将每个$ _GET参数/值添加到$ params,最后将其发送回Amazon以验证它。
希望有所帮助..它对我有用。