php - PayPal 集成问题 : PDT hangs on return to site

标签 php paypal payment-gateway eclipse-pdt fsockopen

我正在实现 PayPal IPN 和 PDT。在沙箱中经历了一些头痛和时间之后,IPN 运行良好并且 PDT 返回正确的 $_GET 数据。实现如下:

  • 将表单中的用户 ID 传递给 PayPal
  • 用户购买产品并触发 IPN 更新给定用户 ID 的数据库
  • 当用户返回网站时,PDT 返回交易 ID
  • 返回页面显示“请稍候”并重复 Ajax 检查交易状态
  • 用户被重定向到成功/失败页面

一切正常,除了在使用 PDT 的 PayPal 就绪 PHP 代码执行返回 POST 时,页面挂起。用户永远不会回到我的网站。我没有得到失败状态,只是什么都没有。有趣的是,一旦发生未知错误,我的测试域就会在短时间内无响应。

代码(PHP):https://www.paypal.com/us/cgi-bin/webscr?cmd=p/xcl/rec/pdt-code-outside

如果我注释掉 POST,一切正常。一旦代码进入 while{} 循环,我就能够确定问题所在。不幸的是,我没有足够的经验从头开始编写 PayPal 代码的替代品,因此非常感谢任何关于可能出错的想法。

POST 返回到 ssl://www.sandbox.paypal.com,我使用的是按钮代码和授权 token ,它们都是通过沙盒测试帐户创建的。

提前致谢。

更新:

我已将问题缩小到这一行:$line = fgets($fp, 1024);

它只是挂起,我不确定为什么。

最佳答案

已解决:

切换到 cURL 可以解决所有问题。这是代码,以防有人像我一样绝望:

// Prepare data
$req = 'cmd=_notify-synch';
$tx_token = $_GET['tx'];
$auth_token = '<-- your token (sandbox or live) -->';
$req .= '&tx='.$tx_token.'&at='.$auth_token;
// Post back to PayPal to validate
$c = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr'); // SANDBOX
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $req);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($c);
$response_code = curl_getinfo($c, CURLINFO_HTTP_CODE);
curl_close($c);
if(!$contents || $response_code != 200) {
   // HTTP error or bad response, do something
} else {
   // Check PayPal verification (FAIL or SUCCESS)
   $status = substr($contents, 0, 4);
   if($status == 'FAIL') {
      // Do fail stuff
   } elseif($status == 'SUCC') {
      // Do success stuff
   }
}

从技术上讲,substr() 不是检查“SUCCESS”而是“SUCC”。但是,鉴于只有“SUCCESS”或“FAIL”是可能的值,这并不重要。

同样的代码也适用于 IPN,只是进行了明显的小修改。

关于php - PayPal 集成问题 : PDT hangs on return to site,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2846540/

相关文章:

php - 即使在成功执行后,Express Checkout Payment 也会返回空的相关资源

php - 无法模拟 HTTP 302 响应

使用 Direct Payments Pro .NET SDK 的 PayPal 费用值

php - 引用 - 这个错误在 PHP 中意味着什么?

php - Laravel5.0 : while passing variable in query function, 它显示 undefined variable

php - 如何查看 ID 是否已预订特定日期?

php - 从 Paypal IPN 获取结果的问题

php - 安全 header 无效 - Paypal 错误 - WHMCS

php - 删除 mysql 和 android 关系数据库中的一行

ios - iOS 中的 Paypal 定期付款