Я пытаюсь настроить простую последовательность платежей с помощью PayPal Express Checkout. Мой вызов SetExpressCheckout работает нормально, я получаю ACK=Success
и токен. Однако, когда я перенаправляю пользователя на PayPal с помощью этого токена, он всегда отображает на экране экран:
Эта транзакция истёк. Пожалуйста, вернитесь на сайт получателя чтобы завершить транзакцию, используя их регулярный поток проверки.
Ваш сеанс закончился
Извините, но ваша сессия закончилась. Ваша учетная запись не была заряжена. Вернитесь на сайт продавца и проверьте его снова. с PayPal.
Чтобы уточнить, я не получаю никаких кодов ошибок из вызова SetExpressCheckout API, но токен всегда, кажется, истек. Я попытался перенаправить на нонсенсы, но это создает другую страницу. Кажется, что я получаю действительный токен и перенаправляю его правильно, но он всегда истек в течение 1-2 секунд, который требуется.
Подробности примерного запроса:
Что я посылаю в исходном запросе SetExpressCheckout:
Array
(
[PAYMENTACTION] => Sale
[useraction] => commit
[RETURNURL] => xxxx
[CANCELURL] => xxxxx
[PAYMENTREQUEST_0_AMT] => 49.00
[PAYMENTREQUEST_0_SHIPPINGAMT] => 0
[PAYMENTREQUEST_0_CURRENCYCODE] => USD
[PAYMENTREQUEST_0_ITEMAMT] => 49.00
[L_PAYMENTREQUEST_0_NAME0] => xxxxx
[L_PAYMENTREQUEST_0_DESC0] => xxxxx
[L_PAYMENTREQUEST_0_NUMBER0] => xxxxx
[L_PAYMENTREQUEST_0_AMT0] => 49
[L_PAYMENTREQUEST_0_QTY0] => 1
[METHOD] => SetExpressCheckout
[VERSION] => 74.0
[USER] => xxxxx
[PWD] => xxxxx
[SIGNATURE] => xxxxx
)
Curl_getinfo о запросе:
Array
(
[url] => https://api-3t.sandbox.paypal.com/nvp
[content_type] => text/plain; charset=utf-8
[http_code] => 200
[header_size] => 255
[request_size] => 798
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 1.139
[namelookup_time] => 0
[connect_time] => 0.187
[pretransfer_time] => 0.64
[size_upload] => 660
[size_download] => 136
[speed_download] => 119
[speed_upload] => 579
[download_content_length] => 136
[upload_content_length] => 660
[starttransfer_time] => 1.139
[redirect_time] => 0
[certinfo] => Array
(
)
[primary_ip] => 23.4.59.42
[primary_port] => 443
[local_ip] => 192.168.0.102
[local_port] => 63049
[redirect_url] =>
)
Что я получаю от PayPal через curl:
Array
(
[TOKEN] => EC-59031295261754641
[TIMESTAMP] => 2014-01-20T10:12:27Z
[CORRELATIONID] => 84d3d68cbd574
[ACK] => Success
[VERSION] => 74.0
[BUILD] => 9285531
)
Затем я перенаправляю пользователя на соответствующий URL для этого токена (с токеном urlencode
d), в этом случае:
https://www.paypal.com/webscr?cmd=_express-checkout&useraction=commit&token=EC-59031295261754641
Мне все это кажется прекрасным, но когда я перенаправляюсь на этот URL, он всегда показывает, что "транзакция истекло".
Может ли кто-нибудь указать, что я делаю неправильно?