按照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
。
要执行付款,必须向https://api.sandbox.paypal.com/v1/payments/payment/{payment_id}/execute/
发出POST请求。
问题
网址中Paypal提供的唯一两条信息是token
和PayerID
。如何找到相应的payment_id
?
可能的解决方案
token
是approval_url
的一部分,解析网址并存储token -> payment
关系可以解决问题。但我正在寻找一种不需要解析的更好的解决方案。
答案 0 :(得分:10)
我认为paypal文档对此并不清楚。但是你可以做一些简单的事情来解决你的问题,通过你的返回网址中的参数传递de PaymentID。
像这样: return_url ='http://www.yourdomain.com/paypal/success/? paymentID = PAY-1234567 '
当Paypal重定向到您的网站时,它会将paymentID与其他参数一起返回。
Emportuguês:
Nãoachoque isso esteja claronadocumentaçãodoPaypal。一个简单的解决方案,eu passo o PaymentIDcomoparâmetronaminha URL de retorno que informo para o Paypal。 Assim,quando o Paypal redirecionar para meu site de volta ele matemoparâmetrocomo PaymentID que eu tinha passado。
答案 1 :(得分:5)
在将用户重定向到PayPal批准网址之前,您必须记住您身边的付款ID(通常附有您的用户会话 - 购物车或订单或会话Cookie)。一旦将其重新定向回您的返回网址以及PayerID,您需要从用户会话中提取PaymentID并执行付款。
答案 2 :(得分:1)
在第一个API请求返回成功响应后,可以使用以下方法在PHP中获取Payment ID:
$payment->getId();
在线代码示例(http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/CreatePaymentUsingPayPal.html)显示了如何发送请求,但它不包含getId()方法。
要找到这个,我必须在文件sample \ payments \ CreatePayment.php中查看下载的SDK文件,其中包含以下示例代码,显示了此方法的用法:
ResultPrinter::printResult('Create Payment Using Credit Card', 'Payment', $payment->getId(), $request, $payment);
答案 3 :(得分:0)
我发现此链接非常有用,以防有人想要查看它:https://github.com/paypal/PayPal-NET-SDK/issues/79
答案 4 :(得分:-1)
paymentid
:创建付款后,作为回报json,您可以获得paymentid。 像这样:&#34; id&#34;:&#34; PAY-01K00482KX842131HKORKVKY&#34;
payerid
:您可以使用API:GET / v1 / payments / payment / {paymentId}在用户批准付款后获取付款人ID,您会在json中找到payerid,如下所示:
{
"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":"buyer@samsung.com",
"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"}]}