PayPal自适应付款与单项

时间:2016-06-22 23:50:31

标签: paypal

我开发了一个小型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结账,该怎么办?

1 个答案:

答案 0 :(得分:1)

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

以下是如何将控件置于前端

  1. 为前端的每个动态购买按钮生成唯一的invoiceId
  2. 使用您的购买按钮收集付款详细信息(收件人,金额,发票ID等),并将有效负载发布到您的API操作页面(当用户提交购买按钮时)。
  3. 在您的API操作页面中,验证&保存(到数据库中)invoiceId字段以避免重复的puschase尝试(置于状态ordered),然后调用PayPal pay API调用以生成PAY-KEYinvoiceId放入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
  6. 关于步骤#3的注释,

    • 在此流程中,您的购买按钮实际上有3个状态:1个可用,2个订购,3个购买,这样您只需一次购买就可以控制它
    • 在第4步中,买家退出(取消或AFK或关闭浏览器),您可以在3小时后清除ordered状态(PayPal PAY-KEY生命周期)
相关问题