2016-02-05 58 views
5

所以我注意到,在付款的狀態檢查,當貝寶REST API - 國家購買後不改變

GET /v1/payments/payment/<Payment-Id> 

PayPal的響應「狀態」沒有從變「即使PayPal用戶購買了該商品後也創建了「」。直到我執行付款時,狀態變爲「批准」

這使得難以區分實際上已被客戶批准的付款和仍在處理的付款之間的差異,因爲它們都在「已創建」狀態。 JSON響應的唯一區別在於,一旦付款實際獲得批准,似乎包括shipping_address。我不確定這是一種表示差異的標準方式。

當上述呼叫用於REST API時,客戶是否實際上批准了PayPal交易的標準方式是什麼?

注:我已經有PHP回調腳本設置和工作。我正在研究一種不間斷檢查數據庫條目的故障安全系統,以確保已執行批准的付款(在發生某些系統故障的情況下)。

我想我可以使用IPN回調腳本我有安裝從CLASSIC API但似乎REST APICLASSIC API是不兼容的,因爲IPN回調將不包含事務ID或任何必要的信息是有用的。

似乎在使用REST API時,如果您錯過了重定向呼叫到您的網絡服務器,那麼該事務將永遠丟失。

回答

3

在查找API響應中,您不會告知state字段的批准付款是正確的,相反,您會在JSON正文中查找payer對象,並且該信息會指示已批准的付款資源給你。

我這裏還有一樣PAY-ID的JSON響應前/客戶重定向後(用戶認證)

  1. 查找付款/v1/payments/payment/PAY-9J02491382988403BK3BMC6I(前用戶批准):

    { 
        "id": "PAY-9J02491382988403BK3BMC6I", 
        "intent": "sale", 
        "state": "created", 
        "cart": "07U14103P0008801U", 
        "transactions": [ { 
         "amount":  { 
         "total": "80.00", 
         "currency": "USD" 
         }, 
         "payee": {"email": "[email protected]"}, 
         "invoice_number": "55a460ff696br", 
         "item_list":  { 
         "items":   [ 
             { 
           "name": "Test Ticket 1", 
           "sku": "55a460ff65f13", 
           "price": "10.00", 
           "currency": "USD", 
           "quantity": 1 
          }, 
             { 
           "name": "Test Ticket 2", 
           "sku": "55a460ff66c7a", 
           "price": "20.00", 
           "currency": "USD", 
           "quantity": 2 
          }, 
             { 
           "name": "Test Ticket 3", 
           "sku": "55a460ff66ce2", 
           "price": "10.00", 
           "currency": "USD", 
           "quantity": 3 
          } 
         ], 
         "shipping_address":   { 
          "recipient_name": "Test Name", 
          "line1": "Main St 1", 
          "city": "San Jose", 
          "state": "CA", 
          "postal_code": "95131", 
          "country_code": "US" 
         } 
         }, 
         "related_resources": [], 
         "notify_url": "https://bt-pduan-1.c9.io/ipn.php" 
        }], 
        "redirect_urls": { 
         "return_url": "http://localhost:80/getpaypal?paymentId=PAY-9J02491382988403BK3BMC6I", 
         "cancel_url": "http://localhost:80/cancel" 
        }, 
        "create_time": "2016-02-16T06:28:08Z", 
        "update_time": "2016-02-16T06:28:08Z", 
        "links": [ 
          { 
         "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-9J02491382988403BK3BMC6I", 
         "rel": "self", 
         "method": "GET" 
         }, 
          { 
         "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-9J02491382988403BK3BMC6I/execute", 
         "rel": "execute", 
         "method": "POST" 
         }, 
          { 
         "href": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-07U14103P0008801U", 
         "rel": "approval_url", 
         "method": "REDIRECT" 
         } 
        ] 
    } 
    
  2. 在用戶批准後查找付款(我正在刪除一些JSON內容,例如可讀性的交易/網址數組):

    { 
        "id": "PAY-9J02491382988403BK3BMC6I", 
        "intent": "sale", 
        "state": "created", 
        "cart": "07U14103P0008801U", 
        "payer": { 
         "payment_method": "paypal", 
         "status": "VERIFIED", 
         "payer_info":  { 
         "email": "[email protected]", 
         "first_name": "Payer", 
         "last_name": "US", 
         "payer_id": "8FMFQ2KVYYHTY", 
         "shipping_address":   { 
          "recipient_name": "Test Name", 
          "line1": "Main St 1", 
          "city": "San Jose", 
          "state": "CA", 
          "postal_code": "95131", 
          "country_code": "US" 
         }, 
         "phone": "408-743-9795", 
         "country_code": "US", 
         "billing_address":   { 
          "line1": "1 Main St", 
          "line2": "", 
          "city": "San Jose", 
          "state": "CA", 
          "postal_code": "95131", 
          "country_code": "US" 
         } 
         } 
        }, 
        "transactions": [], 
        "redirect_urls": {}, 
        "create_time": "2016-02-16T06:28:08Z", 
        "update_time": "2016-02-16T06:28:08Z", 
        "links": [] 
    } 
    

通過在API響應中檢查記錄的PAY-ID查找payer對象,您將能夠保存訂單並執行執行呼叫,以防在客戶退貨重定向中錯過。

另外,在這種情況下,IPN或webhooks都不會有幫助,因爲它們是事務級別事件觸發的異步事件,這意味着直到執行付款時纔會發出通知。

+0

感謝您的迴應,最後得到一點幫助真是太棒了。在使用這些方法進行測試時,我注意到如果用戶登錄到PayPal但尚未付款,則存在「付款人」對象。在這種情況下,它不會有shipping_address。一旦用戶完成結帳並付款,它將包含shipping_address。這是你的情況嗎? –

+0

如果用戶在登錄時坐在商店的「查看信息」頁面上,我可以驗證「付款人」對象是否存在。此時,他們還沒有完全結賬並可以選擇取消。因此,「付款人」對象的存在是不夠的。如果這有幫助,我可以告訴你我找回的JSON。 –

+0

這是付款人對象而登錄 「大戶」:{ 「payer_info」:{ 「COUNTRY_CODE」: 「US」, 「FIRST_NAME」: 「約書亞」, 「姓氏」: 「布里泰恩」, 「 payer_id「: 」KZNRYBNVQD2FL「, 」電話「: 」4084500470「 }, 」PAYMENT_METHOD「: 」貝寶「, 」狀態「: 」驗證「 }, –