【问题标题】:How to add custom user id in subscriptions paypal api如何在订阅 paypal api 中添加自定义用户 ID
【发布时间】:2019-11-05 14:06:25
【问题描述】:

我需要将贝宝订阅集成到我的项目中。 我使用新的 paypal 订阅 api https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions 并且需要知道如何识别付款人和我自己的数据库用户。

这是我脑海中的场景:

  1. 我使用注册表单创建了自己的数据库用户。
  2. 我将自己的用户 ID 设置为 paypal api 调用
  3. 用户确认订阅 paypal 后返回我的订阅 id,然后我调用 paypal api 以获取返回订阅的详细信息并查看我自己的 db 用户 id

但是好像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>

我发现只有一种方法可以做到这一点

  1. 用户将所有数据插入注册表单,然后点击 paypal 按钮
  2. paypal支付成功后

        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 的最佳方法是什么?

【问题讨论】:

标签: paypal paypal-subscriptions


【解决方案1】:

问题中的解决方案是一种可能的方法。它的问题是,如果客户端在将数据发送到服务器之前出现故障,则 user_id 和 subscription_id 之间的关联会丢失。

解决方法是将 user_id 作为custom_id 发送到贝宝。然后,该 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。对于用户直接在贝宝上取消订阅的所有其他情况或此类其他事件,都需要它。

【讨论】:

  • 这绝对是一个更好的解决方案!
  • 我可以确认 webhook 资源数据中有 custom_id 可用
【解决方案2】:

问题中的解决方案是正确的,订阅 ID 应在创建时存储并与内部用户 ID 相关联,订阅在批准后立即发生(在 onApprove 函数中)

可以使用 fetch API 代替表单发布来将此订阅 ID 以及与之关联的用户 ID 传递给服务器——类似于 https://developer.paypal.com/demo/checkout/#/pattern/server 中的示例

【讨论】:

    猜你喜欢
    • 2014-11-23
    • 2021-02-01
    • 2020-12-19
    • 2021-07-01
    • 2016-03-26
    • 2021-06-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多