支付宝链式支付成功后执行任务

Posted

技术标签:

【中文标题】支付宝链式支付成功后执行任务【英文标题】:Execute tasks after PayPal chained payment is successful 【发布时间】:2013-11-28 20:55:09 【问题描述】:

当前状态

我是 PayPal 的新手,我目前正在我们的网站上集成链式自适应支付。已经通过.NET SDK 成功调用了PAY API 调用。资金(沙盒环境)将正确地转移到此付款的每个参与者(发件人、主要和次要收款人)。

要求

我的目标是在付款成功(更新数据库、发送邮件等)或被取消后执行重要任务>(清理东西,...)。

可能的解决方案

1) 第一种方法是创建actionType 设置为CREATE 的付款,将用户重定向到paypal.com(等待批准),将用户重定向回网站和execute the payment,然后执行重要的任务。但是好像不行,第二次重定向前付款是COMPLETED

2) 另一种可能的解决方案是从用户那里获取preapproval,重定向回网站并执行付款。尚未尝试此解决方案,不要认为这是最佳做法。

3) 调用PAY 并将actionType 设置为"PAY" 并等待IPN。也没有尝试过,因为在本地测试它非常困难(尽管我已经找到了这个问题:Paypal Sandbox Test Tool IPN Simulator in Localhost)。

问题

哪种解决方案是最佳实践?我想推荐的解决方案是等待 IPN?

如果我使用 IPN,付款完成后的平均响应时间是多少?秒、分、小时?我知道这取决于 PayPal 网络服务器的负载,并且在 4 天内有 15 次重试,但现实世界的数字是多少?

我可以在付款中存储有关发件人的其他信息(例如用户 ID)(除了备注字段),然后我可以在 IPN 中返回这些信息吗?

【问题讨论】:

【参考方案1】:

这是我的做法。

当我要启动 PayPal 付款时(在我发送获取 TOKEN 的请求之前),我在我的数据库中创建新交易并将其状态设置为 PENDING。在transaction 表中,我还有userID 列,它是用户表的外键。这样我就可以将交易与用户联系起来。

在我的表中创建事务时,我使用transactionId 值,并将其保存到php $_SESSION 变量中。

请注意,如果您想支持定期付款,您可以向 PayPal 提供transactionId。您可以通过设置来做到这一点:

"PAYMENTREQUEST_0_INVNUM"=>$transaction->id

在定期付款发生后,当 PayPal 向您发送 IPN 请求时,将发送此值。

现在回到故事里

用户被重定向到贝宝,当用户填写贝宝用户名和密码,当用户确认支付细节时,用户将被重定向回您的网站,您必须拨打DoExpressCheckoutPayment自行付款。

如果DoExpressCheckoutPayment API 调用结果为成功,则表示交易成功,您有钱。此时,您可以发送电子邮件、通知或任何其他重要操作。

$transactionResponse=$paypal->request("DoExpressCheckoutPayment",$requestParams);//Execute transaction
    if(is_array($transactionResponse) && $transactionResponse["ACK"]=="Success")//Payment was successfull
    
        //Send email
        //Notify user 
        //Do other important changes in database, for example mark this transaction as successful
        Transactions()::model()->updateByPk($_SESSION['transactionId'],array('status'=>'SUCCESS');
    

重复付款的重要说明:PayPal 可以/将向您发送多个 IPN 请求以进行相同的重复交易,这意味着您必须添加逻辑来检查天气特定的 IPN 请求是否已处理.通常我会通过transactionId 是“PENDING”或“SUCCESSFUL”来检查我的交易的天气状态。

【讨论】:

以上是关于支付宝链式支付成功后执行任务的主要内容,如果未能解决你的问题,请参考以下文章

支付宝支付接口开发的回调地址怎么写

iOS 支付宝支付成功不走回调方法

支付宝支付流程

支付宝支付后返回app无法回调

移动网络的贝宝链式支付

uniapp支付宝支付的前端开发经验分享