【问题标题】:PayPal integration woes: PDT hangs on return to sitePayPal 集成问题:PDT 在返回站点时挂起
【发布时间】:2011-02-20 06:02:42
【问题描述】:

我正在实施 PayPal IPN 和 PDT。在沙盒中经过一段时间的头痛和时间后,IPN 运行良好,PDT 返回正确的 $_GET 数据。实现如下:

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

一切正常,除了使用 PayPal 就绪的 PHP 代码为 PDT 执行返回 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,我使用的按钮代码和授权令牌都是通过沙盒测试帐户创建的。

提前致谢。

更新:

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

它只是挂起,我不知道为什么。

【问题讨论】:

    标签: php paypal payment-gateway eclipse-pdt fsockopen


    【解决方案1】:

    已解决:

    切换到 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,只是稍作修改。

    【讨论】:

      猜你喜欢
      • 2019-03-30
      • 2011-03-29
      • 2019-02-18
      • 2014-03-08
      • 1970-01-01
      • 2016-04-17
      • 2012-04-08
      • 2014-07-18
      • 2011-03-02
      相关资源
      最近更新 更多