首页 > 解决方案 > fsockopen 为贝宝回调返回 null

问题描述

stackoverflow中有很多类似于这个主题的问题,我已经尝试了每个人,但无济于事。这可能是我的服务器配置或其他东西,所以如果有人有任何线索,请发布。

这是我的代码:-

$this->gateway['submit_url'] = 'https://www.paypal.com/cgi-bin/webscr';
$this->gateway['callback_url'] = 'ssl://ipnpb.paypal.com:443';

//headers
$header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Host www.ipnpb.paypal.com\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".strlen($req)."\r\n\r\n";

$fp= fsockopen($this->gateway['callback_url'], 443, $error_no, $error_msg, 60);

$req 在上面代码中的某处定义。

这里 fp 返回 null。我的 OpenSSL 版本是:OpenSSL 1.0.1i 2014 年 8 月 6 日

我有 Windows IIS 服务器

标签: phpiispaypal-ipn

解决方案


:443您可以尝试从中删除端口号$this->gateway['callback_url']吗?

$this->gateway['callback_url'] = 'ssl://ipnpb.paypal.com';

端口443已在fsockopen函数调用中传递。

$fp= fsockopen($this->gateway['callback_url'], 443, $error_no, $error_msg, 60);

编辑:(现在允许在评论中编辑答案,因为新行)

这段代码的这一部分还有其他内容吗?

  • 第二行末尾缺少分号 (;)
  • 没有定义 $req。

包含在一个类中的相同代码具有上面建议的 3 个更改对我有用。(返回流类型的资源)

<?php
class abc {
    public $gateway;

    public function __construct() {
        $req = 'ABCD';

        $this->gateway['submit_url'] = 'https://www.paypal.com/cgi-bin/webscr';
        $this->gateway['callback_url'] = 'ssl://ipnpb.paypal.com';
        //headers
        $header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
        $header .= "Host www.ipnpb.paypal.com\r\n";
        $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $header .= "Content-Length: ".strlen($req)."\r\n\r\n";

        $fp= fsockopen($this->gateway['callback_url'], 443, $error_no, $error_msg, 60);

        var_dump($fp);

    }
}
$a = new abc();

推荐阅读