Проверка возвращаемого URL-адреса Amazon FPS с помощью API-интерфейса verifySignature, возвращающего «InvalidSignature» - PullRequest
3 голосов
/ 29 февраля 2012

Я пытаюсь проверить обратный URL-адрес Amazon FPS CBUI после того, как клиент подтвердит платеж в CBUI.Я использую примеры кода из Amazon

    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 возвращает, с значением, которое я отправляю в API VerifySignature, и они выглядят одинаково.

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 25 января 2013

Я знаю, что это немного поздно, но я решил эту проблему, и публикация решения, возможно, могла бы помочь кому-то еще с той же проблемой.

Очевидно, мне не хватало некоторых параметров, которые Amazon отправляет через строку запроса,Для правильной проверки подписи вам нужно передать КАЖДЫЙ параметр, который они вам отправляют.Итак, я использовал конструкцию, подобную этой:

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

Чтобы добавить каждый параметр / значение $ _GET к $ params и, наконец, отправить его обратно в Amazon для проверки.

Надеюсьэто помогает .. Это сработало для меня.

...