2013-08-31 91 views
13

按照https://developer.paypal.com/webapps/developer/docs/integration/web/accept-paypal-payment/的指南,我已成功創建付款並重定向用戶以批准付款。Paypal REST API:如何在用戶批准付款後檢索付款ID。

創建的付款看起來像波紋管,並將其保存在用戶會話中以供進一步參考。用戶批准支付

{ 
    "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" 
    } 
    ] 
} 

後,支付寶將用戶重定向到return_url。例如,http://<return_url>?token=EC-60U79048BN7719609&PayerID=7E7MGXCWTTKK2

爲了執行付款,POST請求必須作出https://api.sandbox.paypal.com/v1/payments/payment/{payment_id}/execute/

問題

的貝寶在URL中提供的信息只有兩件是tokenPayerID。我怎樣才能找到相應的payment_id

可能的解決方案

tokenapproval_url的一部分,解析URL並存儲token -> payment關係就可以解決問題。但我正在尋找一個不需要解析的更好的解決方案。

回答

11

我認爲貝寶文檔不清楚這一點。但是你可以做一些簡單的事情來解決你的問題,通過返回url中的參數傳遞de PaymentID。

想要這樣: return_url ='http://www.yourdomain.com/paypal/success/paymentID = PAY-1234567'

當PayPal重定向到您的網站時,它將返回paymentID和其他參數一起。


葡萄牙文:

NAO ACHO闕ISSO esteja克拉羅吶documentação做貝寶。用於解決簡單問題的解決方案,支付卡付款通知單,付款通知單和付款方式。 Assim,quando o Paypal redirecionar para meu site de volta ele matem oparâmetrocom o PaymentID que eu tinha passado。

+2

一個更好的解決方案,我認爲這是最好的方法,不使用paymentID但隨機令牌來連接貝寶異步調用。通過這種方式,您可以毫無問題地分離會話用戶。與Python金字塔我創建付款發送成功的網址爲http://本地主機:6543/payment_ok/T-b37b41f1-5146-463a-b248-bad523a2fa79。 –

+3

是的安東尼奧,你是對的!事實是,您在發送請求之前沒有付款ID。然後,發送隨機令牌可以識別用戶的會話。 –

+6

這不起作用。原因是付款ID是未知的,直到返回URL已被髮送到PayPal。目前推薦的最佳做法是將付款ID存儲在用戶的會話中(只要確保會話不會在用戶退回或PayPal的付款記錄被清除之前過期)。如果PayPal除支付者ID和交易令牌之外還包括支付ID,那將是最好的。我不確定他們爲什麼決定省略它。同樣令人沮喪的是,他們沒有在文件中提到它。 – Aquarelle

5

在將用戶重定向到PayPal批准網址之前,您必須記住您身邊的付款ID(通常附帶您的用戶會話 - 購物車或訂單或會話cookie)。一旦將PayerID和PayerID一起重定向到您的返回URL,您需要從用戶會話中提取PaymentID並執行付款。

+1

還沒找到比分析,做出來的像一個arraystore鏈接EC-TOKEN與PAY-TOKEN – colthreepv

-1
  1. paymentid

創建的支付,在返回JSON之後,就可以得到paymentid。 這樣的: 「ID」: 「PAY-01K00482KX842131HKORKVKY」

  1. payerid

您可以使用API​​:獲取V1 /支付/支付/ {paymentId}獲得付款人ID用戶批准後/付款時,你會發現在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"}]} 
+0

我需要checkout.php中的相同數字(付款前執行),如pay.php(付款後執行)..你在這裏顯示的只是後面的部分... –

0

我發現這個鏈接是非常有幫助的,如果有人想一探究竟:https://github.com/paypal/PayPal-NET-SDK/issues/79

+0

這篇文章不是一個實際的嘗試來回答這個問題。請注意[StackOverflow不像討論區](http://stackoverflow.com/tour),它是一個問答網站,每個帖子都是問題或問題的答案。帖子也可以有[評論](http://stackoverflow.com/help/privileges/comment) - 這樣的小句子 - 可以用來批評或請求作者澄清。這應該是一個評論或[新問題](http://stackoverflow.com/questions/ask) –

1

的付款ID可以用PHP通過使用以下方法中的第一API請求返回一個成功的響應後獲得:

$payment->getId(); 

在線代碼示例(http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/CreatePaymentUsingPayPal.html)示出了如何發送請求,但它不包含getId()方法。

要了解這一點,我在下載SDK文件,以查看文件樣本\金\ CreatePayment.php一個具有顯示使用這種方法的以下示例代碼:

ResultPrinter::printResult('Create Payment Using Credit Card', 'Payment', $payment->getId(), $request, $payment);