Php Paypal IPN具有特殊字符时消息无效

Php Paypal IPN具有特殊字符时消息无效,php,paypal,special-characters,paypal-ipn,Php,Paypal,Special Characters,Paypal Ipn,当我在paypal sandbox上使用信用卡付款时,我会在地址1/地址2文本字段中填充一些特殊字符(例如:!@#@%^&)。 付款后,我收到一条IPN消息,发回PP并收到一条无效消息(HTTP错误200) 我在PP的配置文件/语言中设置了UTF-8,但问题仍然存在 备注:如果我使用PP帐户付款(意味着登录并单击付款按钮),付款过程可以正常进行。您必须小心地将在IPN呼叫中收到的准确数据发送给Paypal,但cmd参数除外,该参数必须设置为\u notify-validate 下面是一些PHP代

当我在paypal sandbox上使用信用卡付款时,我会在地址1/地址2文本字段中填充一些特殊字符(例如:!@#@%^&)。 付款后,我收到一条IPN消息,发回PP并收到一条无效消息(HTTP错误200)

我在PP的配置文件/语言中设置了UTF-8,但问题仍然存在


备注:如果我使用PP帐户付款(意味着登录并单击付款按钮),付款过程可以正常进行。

您必须小心地将在IPN呼叫中收到的准确数据发送给Paypal,但
cmd
参数除外,该参数必须设置为
\u 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
}

虽然这个问题很老,但它确实帮助了我。它甚至让我避免了处理字符编码问题!所以谢谢!:)