我需要将 Paypal 订阅集成到我的项目中。
我使用新的 Paypal 订阅 API https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions并且需要知道如何识别付款人和我自己的数据库用户。
这是我脑海中的场景:
但看起来paypal不能提供它。
这是我的智能结账按钮代码
paypal.Buttons({
style: {
layout: 'horizontal',
size: 'small',
color: 'blue',
label: 'pay',
height: 55,
tagline: 'false'
},
createSubscription: function(data, actions) {
return actions.subscription.create({
'plan_id': 'P-5GS67390M7258253CLUHXAHQ',
'metadata' : {
'user_id' : 'myuserid'
}
});
},
onApprove: function(data, actions) {
console.log(data);
alert('You have successfully created subscription ' + data.subscriptionID);
}
}).render('#paypal-button-container');
</script>
我只找到了一种方法
onApprove: function(data, actions) {
$('#myform').append('<input name="subscriptions_id" value="data.subscriptionID"')
$('#myform').submit()
alert('You have successfully created subscription ' + data.subscriptionID);
}
为 mysql db 用户添加订阅 ID 的最佳方法是什么?
最佳答案
问题中的解决方案是一种可能的方法。 问题如果客户端在将数据发送到服务器之前发生故障,则 user_id 和 subscription_id 之间的关联将丢失。
解决方法是将 user_id 作为 custom_id
发送到 paypal。 .该 custom_id 然后是订阅数据的一部分,保留在 payapl 服务器上,显示在 paypal 计费 UI 中以获取订阅详细信息。我还不确定,但强烈怀疑它也被发送到了 webhook。
见 PayPal API documentation for creating a subscription
所以理想情况下将两者结合起来。使用 webhook 将 custom_id(您的 user_id)与订阅相关联。像您一样进行 API 调用(表单发布)。如果任一方式失败,您都有后备。
更新 2021-09-02:我自己在我们的网络计费解决方案中使用这种方法。我注意到的一件事是,从统计上讲,Web 客户端在得到响应之前出现故障是非常罕见的事件。我知道这是因为 webhook 调用会在事件发生后的几个小时到几天内发出。在我分析了数百个订阅之后,我没有看到一个 webhook 来修补丢失的事务的情况。
我不知道为什么会这样。它当然超出了我的预期。
我的猜测是 1. PayPal 服务器回复速度快 2. 我的 PWA 编写得足够好,可以警告用户等待一段时间不要关闭浏览器窗口,直到出现确认屏幕。
我仍然建议实现 webhook。对于用户直接在 Paypal 上取消订阅的所有其他情况或其他此类事件,都需要它。
关于paypal - 如何在订阅 paypal api 中添加自定义用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56725172/