是啥导致我的 PayPal IPN 脚本失败?

Posted

技术标签:

【中文标题】是啥导致我的 PayPal IPN 脚本失败?【英文标题】:What is causing my PayPal IPN script to fail?是什么导致我的 PayPal IPN 脚本失败? 【发布时间】:2011-01-09 05:39:06 【问题描述】:

我从 PayPal IPN 脚本收到以下内容。从以下是否可以看出导致 IPN 交易失败的原因?如果没有,我该如何进一步调查问题?

[01/25/2010 7:49 PM] - FAIL: IPN Validation Failed.
IPN $_POST variables from PayPal:
mc_gross=25.00
protection_eligibility=Ineligible
address_status=unconfirmed
payer_id=AEVB83JZKDRCL
tax=0.00
address_street=1 Main Terrace
payment_date=10:49:52 Jan 25, 2010 PST
payment_status=Pending
charset=windows-1252
address_zip=W12 4LQ
first_name=Test
address_country_code=GB
address_name=Test User
notify_version=2.9
custom=
payer_status=unverified
address_country=United Kingdom
address_city=Wolverhampton
quantity=1
verify_sign=A0I1KzEZadt6mIDXxQkkIQCQKPTMAGvCuZ8RKXsOCujIi.RoMxAnbZXi
payer_email=test1_1263505944_per@example.com
txn_id=38A45069EV5838100
payment_type=instant
last_name=User
address_state=West Midlands
receiver_email=martin@example.com
pending_reason=unilateral
txn_type=web_accept
item_name=Ultimate Challenge UK Ressurection  Standard Seating (25.00 GBP)
mc_currency=GBP
item_number=
residence_country=GB
test_ipn=1
handling_amount=0.00
transaction_subject=Ultimate Challenge UK Ressurection  Standard Seating (25.00 GBP)
payment_gross=
shipping=0.00


IPN response from PayPal server:
 HTTP/1.1 200 OK
Date: Mon, 25 Jan 2010 18:49:56 GMT
Server: Apache
Set-Cookie: cwrClyrK4LoCV1fydGbAxiNL6iG=_hMqg4cipUMV6RnPhXQ-05S5HEZk2hx2Yc87bjkBg5dZZLYqHTsxqiYwvU9Hjas5YeKTg9jnkbQYomER3_bjuAIW9f15003nc2FYPzIYqFuCc-Jfz1B8byXHhtrJ6OHyiPlmo0%7cGRbawzJR-iAiebJ1pZJZ3DzypAO4untXvofHa07UaqPHkeOZNQTSoCfMobgODGnxgP6jHW%7cf29zaCIP63s4TuzaT12cEiU-aih_kOHju4cqZ4KPV18bl-LTNlFzFLLGmr_DOhyXznq--m%7c1264445397; domain=.paypal.com; path=/
Set-Cookie: cookie_check=yes; expires=Thu, 23-Jan-2020 18:49:57 GMT; domain=.paypal.com; path=/
Set-Cookie: navcmd=_notify-validate; domain=.paypal.com; path=/
Set-Cookie: navlns=0; expires=Sun, 20-Jan-2030 18:49:57 GMT; domain=.paypal.com; path=/
Vary: Accept-Encoding
Keep-Alive: timeout=5, max=92
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

7
INVALID
0

【问题讨论】:

今天刚遇到同样的问题。解决为这个帖子:***.com/questions/11746644/… 【参考方案1】:

任何使用 Micah Carrick 的 php Paypal IPN 集成类并遇到相同问题的人: IPN 变量和值必须以 cmd=_notify-validate 开头。在 paypal.class.php 文件中正好相反。

所以,只需将第 179 行中的 $post_string = ''; 替换为$post_string="cmd=_notify-validate"; 替换$post_string .= $field.'='.urlencode(stripslashes($value)).'&';

$post_string .= '&' . $field.'='.urlencode(stripslashes($value)); 第 181 行

然后删除第184行的$post_string.="cmd=_notify-validate";,你的问题应该就解决了。

【讨论】:

【参考方案2】:

您是否尝试过IPN test tool 来调查问题?

您可以使用它来重现您提交的表单,看看您是否获得一致的结果。

如果您准确指定失败的上下文,您可能会得到更好的答案。

【讨论】:

我知道它失败了,因为我上面的调试脚本的第一行。我正在尝试追踪 为什么 它失败了。我将查看 IPN 测试工具以尝试进一步调查。感谢您的链接。 我过去也确实遇到过问题,这通常与我弄乱了表单上的操作 url 的事实有关 - 你在开发开发人员沙箱上工作吗? 嗨,约翰。感谢您抽出时间回复。我已经替换了我正在使用的 PHP 库(它生成 PayPal 表单,但也验证了响应数据),现在一切似乎都工作正常。我想我一定是某个东西的剧本中的错字。再次感谢您为我指明 IPN 测试工具的方向。【参考方案3】:

要连接到沙盒 Paypal,请使用此行:

$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); 

而不是:$fp = fsockopen($url_parsed['host'],"80",$err_num,$err_str,30);

并且响应 IPN 发送单词“VERIFIED

如果您正在通过 SSL 测试 Paypal IPN,则必须在 port 443 上使用 ssl://www.sandbox.paypal.com

【讨论】:

【参考方案4】:

@Dominik,这似乎也解决了我的问题! 我碰巧用的是Md Emran Hasan's PHP class。 并用这个问题把我的头发扯掉了大约一个星期!

所以我的编辑看起来像这样...... $postString .="cmd=_notify-validate"; // 曾经在 while 循环之后!此代码包含在 validateIPN 函数中。

    $postString .= "cmd=_notify-validate"; // append ipn command

    foreach ($_POST as $field=>$value)
    
        $this->ipnData["$field"] = $value;
        $postString .= '&' . $field .'=' . urlencode(stripslashes($value));
    

【讨论】:

以上是关于是啥导致我的 PayPal IPN 脚本失败?的主要内容,如果未能解决你的问题,请参考以下文章

Perl PayPal IPN 侦听器返回“500 SSL 握手失败”消息

paypal沙箱支付成功,但是我的脚本没有收到ipn post call

cURL Paypal IPN 脚本不工作

PayPal IPN 脚本未重定向到 ipn.php

保护接收paypal IPN通知的php脚本

Paypal IPN 脚本,feof 和 fgets 的问题