我开发了一个小型API,使用PayPal自适应付款来创建链式付款。
这是我发送给PayPal的当前JSON正文:
- (void)setExtViewHeight:(CGFloat)newHeight withAnimation:(CGFloat)duration
{
self.extViewHeight.constant = newHeight;
[UIView animateWithDuration:duration animations:^{
[self layoutIfNeeded];
} completion:nil];
}
完美无缺。全部金额将发送给主要用户,然后将全部金额的97%发送给次要用户。
虽然,我希望我的每件商品的数量始终为{
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
}
。我的网站是动态的,允许用户使用自己的价格,名称等一直创建项目。我想在有人用PayPal结账后在我的网站上将项目标记为1
,这样任何人都无法购买再次,因此删除purchased
按钮。
我了解如何使用Webhooks(由PayPal提供),但如果两个或更多用户按下我网站上的purchase
按钮并同时使用PayPal结账,该怎么办?
答案 0 :(得分:1)
在这种情况下,您需要对并发性进行控制,因为PayPal在自适应付款的付款尝试时不提供此唯一性验证。
以下是如何将控件置于前端
invoiceId
在您的API操作页面中,验证&保存(到数据库中)invoiceId
字段以避免重复的puschase尝试(置于状态ordered
),然后调用PayPal pay
API调用以生成PAY-KEY
。 将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
}]
},
买方通过PAY-KEY
重定向并完成交易
purchased
关于步骤#3的注释,
ordered
状态(PayPal PAY-KEY
生命周期)