我创建了一个Java应用程序,它使用Braintree SDK进行PayPal结账过程。
我在PayPal创建了一个沙盒帐户和一个商家沙盒帐户。接下来,我使用刚刚创建的商家创建了一个Braintree AccessToken。在PayPal中创建Braintree访问令牌后,我注意到商家帐户的REST APP是自动创建的。在自动创建的REST APP
中,我已经激活了所有可能的选项。此外,我还存储了 ClientID 和 ClientSecret,以使用 PayPal REST API 生成 AccessToken。
在第一次付款期间,将为用户创建一个 Braintree 客户和一个 将为用户创建计费协议。现在,无需再次输入用户的PayPal凭据即可收取所有进一步的付款。到目前为止,该结帐流程没有任何问题。
现在,我想实现一个函数来检查计费协议是否仍然有效,因为用户可能同时撤销了它。检查相应Customer
实例的PayPalAccount
类型的PaymentMethod
实例时,我看到一个名为billingAgreementId
的属性,该属性与用户PayPal事务的计费协议 id st 匹配,并进一步匹配存放在用户PayPal帐户中的计费协议。ID以"B-
"开头,而不是一些数字。
问题是我无法在PayPal中找到 REST API 方法,该方法允许我使用PaymentMethod
实例的billingAgreementId
来检查计费协议是否仍然有效。
我已经尝试了这里列出的 REST API 方法: https://developer.paypal.com/docs/api/payments.billing-agreements/v1/已弃用的协议和新的,但两者都不返回有关计费协议的信息。相反,我收到返回的错误"配置文件ID无效"或类似内容。
此外,billingAgreementId
的"B-
"模式似乎与PayPal API示例中使用的ID模式不匹配。
我还注意到:我无法使用PayPal REST API获取有关Braintree生成的PayPal交易/付款/订单的任何信息。Braintree是否在这里做了一些不同的事情,以便使用PayPal REST API看不到这些交易/付款/订单?似乎不可能从PayPal REST API中获取有关使用Braintree创建的交易/付款/订单的任何信息。
有没有办法检查BraintreeCustomer
PaymentMethod
中的billingAgreementId
是否仍然有效?或者,我是否必须检查失败CheckOut
的响应代码并删除已Customer
的存储PaymentMethod
,我的响应代码已映射到已吊销的计费协议状态?
我已经读过关于使用 webhook 来实现这一点的信息,但另一方面,我也读到PayPal webhook 并不是很可靠。
它没有被记录很多地方,我认为目前为数不多的引用它的页面之一是 https://developer.paypal.com/docs/checkout/reference/upgrade-integration/
但是如果你把它拼凑在一起,有一个URL,你可以尝试一个GET请求,一个标准的REST http头:"授权:持有者{token}">
https://api.sandbox.paypal.com/v1/billing-agreements/agreements/B-XXXXXXXXXXXXX
扬子晚报
另一种解决方案是尝试旧的BAUpdate API:如何检查计费协议是否有效或取消?
(我并不是认真地建议这样做,但它是一个旧的经典 NVP/SOAP PayPal API,如果出于某种奇怪的原因您想尝试一下,它在技术上可能仍然存在(