API-интерфейс Paypal REST: как получить идентификатор платежа после того, как пользователь одобрил платеж.
Следуя руководству по https://developer.paypal.com/webapps/developer/docs/integration/web/accept-paypal-payment/, я успешно создал платеж и перенаправил пользователя на его утверждение.
Созданный платеж - это что-то похожее ниже, и я сохраняю его в сеансе пользователя для дальнейшей справки.
{
"id": "PAY-6RV70583SB702805EKEYSZ6Y",
"create_time": "2013-03-01T22:34:35Z",
"update_time": "2013-03-01T22:34:36Z",
"state": "created",
"intent": "sale",
"payer": {
"payment_method": "paypal"
},
"transactions": [
{
"amount": {
"total": "7.47",
"currency": "USD",
"details": {
"subtotal": "7.47"
}
},
"description": "This is the payment transaction description."
}
],
"links": [
{
"href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-6RV70583SB702805EKEYSZ6Y",
"rel": "self",
"method": "GET"
},
{
"href": "https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=EC-60U79048BN7719609",
"rel": "approval_url",
"method": "REDIRECT"
},
{
"href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-6RV70583SB702805EKEYSZ6Y/execute",
"rel": "execute",
"method": "POST"
}
]
}
После того как пользователь одобрит платеж, Paypal перенаправит пользователя на return_url
. Например, http://<return_url>?token=EC-60U79048BN7719609&PayerID=7E7MGXCWTTKK2
.
Чтобы выполнить платеж, необходимо отправить запрос POST в https://api.sandbox.paypal.com/v1/payments/payment/{payment_id}/execute/
.
Вопрос
Только две части информации, предоставленные в Paypal в URL, token
и PayerID
. Как найти соответствующий payment_id
?
Возможное решение
token
является частью approval_url
, проанализируйте URL-адрес и сохраните связь token -> payment
, чтобы решить проблему. Но я ищу лучшее решение, которое не требует синтаксического анализа.
Ответы
Ответ 1
Я думаю, что документация PayPal не совсем понятна. Но вы можете сделать что-то простое, чтобы решить вашу проблему, передав PaymentID через параметр в вашем обратном URL.
Вот так:
return_url = 'http://www.yourdomain.com/paypal/success/? paymentID = PAY-1234567'
Когда Paypal перенаправляется на ваш сайт, он возвращает платежный идентификатор вместе с другими параметрами.
Em português:
Não acho que isso esteja claro na documentação do Paypal. Сопровождение для использования в Интернете, eu passo o PaymentID como parâmetro na minha URL de retorno que informo para o Paypal. Assim, quando o Paypal redirecionar para meu site de volta ele matem o parâmetro com o PaymentID que eu tinha passado.
Ответ 2
Вам нужно будет помнить идентификатор платежа на вашей стороне (обычно прилагаемый к вашей сессии пользователя - корзину покупок или заказ или в виде файла cookie сеанса), прежде чем перенаправить пользователя на URL-адрес утверждения PayPal. После перенаправления обратно на ваш URL-адрес возврата вместе с PayerID - вам нужно будет извлечь PaymentID из сеанса пользователя и выполнить платеж.
Ответ 3
Идентификатор платежа можно получить в PHP, используя следующий метод после того, как первый запрос API вернул успешный ответ:
$payment->getId();
Пример онлайн-кода (http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/CreatePaymentUsingPayPal.html) показывает, как отправить запрос, однако он не включает метод getId().
Чтобы узнать это, мне пришлось посмотреть загруженные файлы SDK в образце файла \payments\CreatePayment.php, который имеет следующий пример кода, показывающий использование этого метода:
ResultPrinter::printResult('Create Payment Using Credit Card', 'Payment', $payment->getId(), $request, $payment);
Ответ 4
Я нашел эту ссылку чрезвычайно полезной, если кто-то захочет ее проверить: https://github.com/paypal/PayPal-NET-SDK/issues/79
Ответ 5
После того, как вы создали платеж, в ответ json вы можете получить paymentid.
например: "id": "PAY-01K00482KX842131HKORKVKY"
вы можете использовать API: GET/v1/payments/payment/{paymentId}, чтобы получить идентификатор плательщика после того, как пользователь одобрил платеж, и вы найдете payerid в ответ json, например:
{
"id":"PAY-01K00482KX842131HKORKVKY",
"create_time":"2014-06-19T09:17:31Z",
"update_time":"2014-06-19T09:17:31Z",
"state":"created",
"intent":"sale",
"payer":{
"payment_method":"paypal",
"payer_info":{
"email":"[email protected]",
"first_name":"buyer",
"last_name":"samsung",
"payer_id":"H2DKRTTYWW8HS",
"shipping_address":{ "line1":"Lushan Road Num.188", "line2":"JianYe",
"city":"Tucson",
"state":"AZ",
"postal_code":"85715",
"country_code":"US",
"recipientName":"buyer samsung"}}},
"transactions":[{
"amount":{
"total":"12.00",
"currency":"USD",
"details"{"subtotal":"12.00"}},
"description":"creating a payment"}],
"links":[
{"href":"xxxxxxx","rel":"self","method":"GET"},
{"href":"xxxxxxx","rel":"approval_url","method":"REDIRECT"},
{"href":"xxxxxxx","rel":"execute","method":"POST"}]}