如何在订阅Paypal API中添加自定义用户ID

时间:2019-06-23 15:11:53

标签: paypal paypal-subscriptions

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

这是我的想法:

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

但是看起来贝宝无法提供它。

这是我的智能结帐按钮代码        

    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. 用户将所有数据插入注册表单,然后单击贝宝按钮
  2. 在成功付款后

        onApprove: function(data, actions) {
            $('#myform').append('<input name="subscriptions_id" value="data.subscriptionID"')
            $('#myform').submit()
            alert('You have successfully created subscription ' + data.subscriptionID);
    
        }
    

为mysql数据库用户添加订阅ID的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

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

可以使用fetch API代替表单发布将此订阅ID传递给服务器,以及将其与之关联的用户ID进行通信-类似于https://developer.paypal.com/demo/checkout/#/pattern/server

中的示例

答案 1 :(得分:0)

问题中的解决方案是一种可能的方法。它的问题是,如果客户端在将数据发送到服务器之前发生故障,则 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 调用(表单发布)。如果任一方式失败,您都有后备。