【问题标题】:PayPal Adaptive Payments with single item单项 PayPal 自适应付款
【发布时间】:2016-10-25 02:29:36
【问题描述】:

我开发了一个小 API,它使用 PayPal 自适应支付来创建链式支付。

这是我当前发送到 PayPal 的 JSON 正文:

{
    actionType: "PAY",
    currencyCode: currency_code,
    feesPayer: "SECONDARYONLY",
    memo: product_name,
    receiverList: {
        receiver: [{
            amount: payment_amount,
            email: primary_email,
            primary: true
        }, {
            amount: payment_amount-(0.03*payment_amount),
            email: secondary_email,
            primary: false
        }]
    },
    returnUrl: "http://example.com/payment-success",
    cancelUrl: "http://example.com/payment-cancel",
    requestEnvelope: {
        errorLanguage: "en_US"
    },
    trackingId: product_id
}

完美运行。全额发给主用户,然后全额的97%发给二级用户。

不过,我希望我的每件商品的数量始终为1。我的网站是动态的,允许用户始终使用自己的价格、名称等创建商品。我想在有人使用 PayPal 结账后在我的网站上将商品标记为purchased,这样就没有人可以再次购买了,因此删除了purchase 按钮。

我了解如何使用 Webhooks(由 PayPal 提供)来实现这一点,但如果两个或更多用户按下我网站上的 purchase 按钮并同时使用 PayPal 结账怎么办?

【问题讨论】:

    标签: paypal


    【解决方案1】:

    在这种情况下,您需要自行控制并发性,因为 PayPal 不会在自适应支付尝试支付时提供这种唯一性验证。

    下面是你如何将控件放在前端

    1. 为前端的每个动态购买按钮生成唯一的invoiceId
    2. 使用您的购买按钮收集付款详细信息(收款人、金额、发票 ID 等),并将有效负载发布到您的 API 操作页面(当用户提交购买按钮时)。
    3. 在您的 API 操作页面中,验证并保存(到数据库中)invoiceId 字段以避免重复的推送尝试(将状态设置为 ordered),然后调用 PayPal pay API 调用以生成 @ 987654325@。 invoiceId 放入payload:receiver 对象中,以便在PayPal 回调和交易报告中进行跟踪

      receiverList: {
          receiver: [{
              amount: payment_amount,
              email: primary_email,
              invoiceId: uniqueId,
              primary: true
          }, {
              amount: payment_amount-(0.03*payment_amount),
              email: secondary_email,
              primary: false
          }]
      },
      
    4. 买家被重定向到PAY-KEY并完成交易

    5. Webhook/IPN 已触发,您将数据库条目标记为 purchased

    注意步骤#3,

    • 在此流程中,您的购买按钮实际上有 3 种状态:1-有货、2-已订购、3-已购买,这样您就可以始终将其作为单次购买来控制
    • 如果买家在第 4 步中下线(取消或 AFK 或关闭浏览器),您可以在 3 小时后清除ordered 状态(PayPal PAY-KEY 生命周期)

    【讨论】:

    • 这似乎是一种非常合乎逻辑的方法,尽管不幸的是它根本行不通。如果我的应用程序的用户不喜欢另一个用户并决定点击purchase 获取他们的所有项目怎么办?因此,不允许其他用户购买这些商品,因为它们在我的数据库中将被标记为purchased。然后在另外 3 小时内,他们只需再次点击购买按钮即可重新启动 3 小时。
    • 这只是一个示例,意味着您可以根据您的用例自定义第 3 步中的任何规则,例如打造独一无二的invoiceId-userId配对,让每一位买家都有一次购买机会。 PayPal(或一般来说,支付)产品在这方面没有任何帮助,您需要建立一个投标系统才能使其发挥作用。
    猜你喜欢
    • 2012-03-11
    • 2013-03-09
    • 2015-07-17
    • 2013-04-17
    • 2016-04-06
    • 2012-08-10
    • 2016-07-28
    • 2014-11-01
    • 2013-07-01
    相关资源
    最近更新 更多