PayPal单项目自适应支付
我开发了一个小API,它使用PayPal自适应支付创建一个支付链 以下是我当前发送给PayPal的JSON正文:PayPal单项目自适应支付,paypal,Paypal,我开发了一个小API,它使用PayPal自适应支付创建一个支付链 以下是我当前发送给PayPal的JSON正文: { actionType: "PAY", currencyCode: currency_code, feesPayer: "SECONDARYONLY", memo: product_name, receiverList: { receiver: [{ amount: payment_amount,
{
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签出后,在我的网站上将项目标记为已购买
,这样就没有人可以再次购买,从而删除购买
按钮
我知道如何使用Webhooks(由PayPal提供)实现这一点,但如果两个或多个用户同时按下我网站上的“购买”按钮并在PayPal上签出,该怎么办?在这种情况下,您需要自己控制并发性,因为PayPal在adaptive payments中的付款尝试时不提供此唯一性验证 以下是如何将控件置于前端
invoiceId
invoiceId
字段以避免重复的puschase尝试(将状态设置为ordered
),然后调用PayPalpay
API调用以生成pay-KEY
。将invoiceId
放入PayPal回调和交易报告中的有效负载:接收者
对象中,以便跟踪:
支付密钥重定向并完成交易
- 在这个流程中,您的购买按钮实际上有3种状态:1-可用、2-订购、3-购买,这样您就可以始终作为一次购买来控制它
- 如果买家在步骤4中放弃(取消或AFK或关闭浏览器),您可以在3小时后清除
状态(PayPalordered
lifecycle)PAY-KEY
purchase
购买他们的所有物品,该怎么办?因此,不允许其他用户购买这些项目,因为它们将在my DB中标记为已购买
。然后在接下来的3个小时内,他们只需再次单击购买按钮即可重新启动3个小时。这只是一个示例,意味着您可以根据您的用例自定义步骤#3中的任何规则,例如,制作唯一的invoiceId userId
对,以便每个买家都有一次购买机会。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
}]
},