Paypal 创建订阅 onApproval GET 超时
Posted
技术标签:
【中文标题】Paypal 创建订阅 onApproval GET 超时【英文标题】:Paypal create subscription onApproval GET times out 【发布时间】:2021-11-20 00:15:24 【问题描述】:我正在尝试在 Paypal 中创建订阅后访问响应 json。
这是代码 - 它使用 Paypal javascript SDK(它源自 SDK 文档和this answer):
createSubscription: function (data, actions)
return actions.subscription.create(
'plan_id': 'xxx'
);
,
onApprove: function (data, actions)
return actions.subscription.get().then(function (details)
console.log(details)
);
,
订阅创建正常,但 onApprove actions.subscription.get() 行超时并显示控制台消息:
b.sbox.stats.paypal.com/v2/counter.cgi?p=uid_xxx&s=SMART_PAYMENT_BUTTONS:1 GET https://b.sbox.stats.paypal.com/v2/counter.cgi?p=uid_xxx&s=SMART_PAYMENT_BUTTONS net::ERR_CONNECTION_TIMED_OUT
我是否使用正确的代码来获取 json?如果是,为什么会超时?
编辑:再次搜索 Paypal 社区后,我将代码更改如下:
return actions.subscription.get(data.subscriptionID).then(function (details)
console.log(details)
);
这会导致错误消息略有不同:
b.sbox.stats.paypal.com/v2/counter.cgi?p=uid_bf756f1ba7_mdg6ntk6mjm&s=SMART_PAYMENT_BUTTONS:1 无法加载资源:net::ERR_CONNECTION_TIMED_OUT
【问题讨论】:
【参考方案1】:对于订阅,没有理由在 onApprove 中执行“获取”。使用您在data
中已有的信息。
由于 onApprove 是客户端并且在订阅激活后发生,因此任何业务关键逻辑都不应依赖于正在执行的此代码路径,因为它可能不会。
如果您有任何事情必须执行,请为 BILLING.PLAN.ACTIVATED(创建计划)和/或 PAYMENT.SALE.COMPLETED(发生付款)设置 webhook listener
【讨论】:
感谢您的回复,普雷斯顿。我在数据对象中看不到订阅者姓名或电子邮件 - 这是我需要保存他们在成功付款后在下一页上重新输入此信息的内容。在直接订单而不是订阅上,这种方法可以正常工作 - 新订阅的 SDK 文档在响应 json 中显示了所需的信息。 使用 webhook 确保信息直接发送到您的服务器。 通过“直接订单”集成,在捕获之前不会发生任何事务(可以在服务器端同步完成)——但这不适用于订阅,因此 webhook 是唯一可以保证的通知。 嗨 Preston - Paypal 订阅 API/SDK 文档不清楚您描述的事件顺序,因此非常感谢您抽出时间提供帮助。如果我理解您的意思,订阅批准事件与付款事件是分开的,并且在付款事件之前。后者是异步的,所以我需要一个 lsener (我将添加它,以及相关的后续)。 但是,我在这里试图捕捉的业务逻辑是订阅的批准,而不是付款。设置帐户(用户名、密码和 c)必须由用户完成,我的偏好是立即完成,而他们就在此刻。我对 API 文档的解释是,这个成功的订阅信息应该在一个 json 中。我想我可以有一个单独的 GET 去检索订阅者信息 - 但这是我认为上面的代码应该做的。以上是关于Paypal 创建订阅 onApproval GET 超时的主要内容,如果未能解决你的问题,请参考以下文章
Paypal 集成,如何使用 createOrder onApprove?