paypal - PayPal链式支付成功后执行任务

标签 paypal paypal-ipn paypal-adaptive-payments

当前状态

我是 PayPal 的新手,目前我正在我们的网站上集成链式自适应支付。已经成功调用PAY通过 .NET SDK 调用 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 次重试,但真实世界的数字是多少?

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

最佳答案

这是我的做法。

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

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

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

"PAYMENTREQUEST_0_INVNUM"=>$transaction->id

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

现在回到故事

用户被重定向到 PayPal,当用户填写 PayPal 用户名和密码,当用户确认付款细节时,用户将被重定向回您的网站,您必须调用 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”。

关于paypal - PayPal链式支付成功后执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20001510/

相关文章:

php - 嵌入式支付 IPN

php - 无法将信息传递给 Paypal 说无法处理

json - 为什么要在 JSON 中使用字符串来表示十进制数

paypal - 自动领取转账款项 PayPal

PayPal 订阅/定期付款,在开始时支付一次费用

asp.net - 如何配置 IIS 以便我在同一台机器上运行的 ASP.NET Web 应用程序可以相互 POST,但公众不能 POST?

php - Paypal IPN 验证拒绝访问

php - 无法从 paypalplatform.php 获取 CallPay 和 CallPaymentDetails 一起工作

asp.net - Paypal 沙盒不返回网站

paypal - 新的 PayPal API - 如何设置实时应用程序?不是沙盒