当我在 paypal 沙盒上使用信用卡付款时,我在地址 1/地址 2 文本字段中填写了一些特殊字符(例如:!@#@%^&)。 付款后,我收到一条 IPN 消息,回传到 PP 并收到一条 INVALID 消息(HTTP 错误 200)。
我在 PP 的配置文件/语言上设置了 UTF-8。但问题依然存在。
备注:如果我使用PP账户付款(即登录并点击付款按钮),付款过程是可以正常进行的。
最佳答案
您必须小心地将您在 IPN 调用中收到的确切数据发送到 Paypal,cmd
参数明显异常(exception),该参数必须设置为 _notify-validate
。
下面是一些 PHP 代码,它获取原始 POST 数据,将其解析为数组,更改 cmd
参数,将其转换回 POST 数据,并将其发送到 Paypal。获取原始 POST 数据允许绕过 PHP 的内置解析,这可能会应用一些困惑的东西,例如魔术引号,具体取决于您的配置。
$post = file_get_contents('php://input');
parse_str($post, $data);
$data['cmd'] = '_notify-validate';
$post = http_build_query($data);
$ch = curl_init('https://www.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch);
curl_close($ch);
if ($result == 'VERIFIED') {
// process the payment
}
关于php - Paypal IPN INVALID 消息 当有特殊字符时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6212592/