2016-02-05 59 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“: ”贝宝“, ”状态“: ”验证“ }, –