Paypal REST API:如何在用户批准付款后检索付款ID.

Gre*_*ang 14 paypal

按照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"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

用户批准付款后,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中提供的唯一两条信息是tokenPayerID.我怎样才能找到相应的payment_id

可能解决方案

token是部分approval_url,解析URL并存储token -> payment的关系就可以解决问题.但我正在寻找一种不需要解析的更好的解决方案.

Fer*_*lva 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.

  • 这不行.原因是在返回URL已经发送到PayPal之后,付款ID未知.目前推荐的最佳做法是将付款ID存储在用户的会话中(只需确保在用户返回或PayPal的付款记录被清除之前会话未到期).如果PayPal除了付款人ID和交易令牌之外还包括付款ID,那将是最好的.我不确定他们为什么决定省略它.同样令人沮丧的是他们没有在他们的文档中提到它. (7认同)
  • 是安东尼奥,你是对的!事实是,在发送请求之前,您没有paymentID.然后,发送随机令牌,您可以识别用户的会话. (3认同)
  • 我认为这是最好的方法,不是使用paymentID而是使用随机令牌来连接paypal异步调用.这样您就可以毫无问题地分离会话用户.使用python金字塔,我正在创建付款,将成功网址发送为http:// localhost:6543/payment_ok/t-b37b41f1-5146-463a-b248-bad523a2fa79. (2认同)

Pra*_*een 5

在将用户重定向到PayPal批准网址之前,您必须记住您身边的付款ID(通常附有您的用户会话 - 购物车或订单或会话Cookie).将重新定向到返回的Url以及PayerID后,您需要从用户会话中提取PaymentID并执行付款.