1

在 PayPal 的沙箱中进行了全面测试并让流程完美运行之后。我已经把它活了,它不工作。

我通过 notify_url 从 PayPal 接收 POST 数据。然后我在数据前面使用 cmd=_notify-validate 将其发送回 PayPal。

使用 PayPals 记录的代码,我使用它来将消息发送到 PayPal。

$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

(使用此代码获取响应)

$res = stream_get_contents($fp, 1024);

我得到的回应是:

HTTP/1.1 200 正常
日期:格林威治标准时间 2012 年 5 月 11 日星期五 20:51:28
X 框架选项:SAMEORIGIN
Set-Cookie: cwrClyrK4LoCV1fydGbAxiNL6iG=SdeBuKBN39mjr3w791CHr_MlSkoBdDmbxpQOjT_WOicyD_Sg6BYZm8koiEv2-5XBUkCjpXQwFqIxIQgIyo3e7arO8015CVw96dpne2CNjbgc1CvpDlqXn72IBWq%7cW7uYn6Za7ljG4iLtLVcyFoPk8gZD7sr_S8WjwZrZWD8UXzE7KAH3bll9TVik3wbdCFlrZG%7csxrZZHSH5SWBGfrKsIU6Dz-K43j4h37efIkWFcVJVER0ncRxNJ0wANN1Dp3pZpV2PLxC1m%7c1336769488; 域=.paypal.com;路径=/; 安全的; HttpOnly
设置 Cookie:cookie_check=yes;expires=周一,2022 年 5 月 9 日 20:51:28 GMT;域=.paypal.com;路径=/; 安全的; HttpOnly
设置 Cookie:navcmd=_notify-validate;域=.paypal.com;路径=/; 安全的; HttpOnly
设置 Cookie:navlns=0.0;到期=格林威治标准时间 2032 年 5 月 6 日星期四 20:51:28;域=.paypal.com;路径=/; 安全的; HttpOnly
设置 Cookie:Apache=10.73.8.50.1336769488653443;路径=/; expires=Sun, 04-May-42 20:51:28 GMT
变化:接受编码
严格的传输安全性:max-age=14400
连接:关闭
内容类型:文本/html;字符集=UTF-8
设置 Cookie:TSe9a623=bb3c8ce40a7f3f6d1c018255c9

我没有得到的是 INVALID 或 VERIFIED 响应。这是 PayPal 的全部输出。在沙箱中,我在最后一行得到了 VERIFIED,并且没有 Set-Cookie。

我没有收到 INVALID 或 VERIFIED 响应似乎很奇怪。

任何建议,将不胜感激。

4

1 回答 1

1

您是否使用 fwrite/fputs 将请求写入套接字?此外,从响应的长度来看,您可能需要从流中读取超过 1024 个字节。这已经非常接近了。

您可能希望循环读取响应:

$resp = '';
while (!feof($fp)) {
    $resp .= stream_get_contents($fp, 1024);
}

然后,您可以使用以下方法将标题与正文分开:

list($headers, $response) = explode("\r\n\r\n", 2);
于 2012-05-11T21:26:19.070 回答