WordPress支付宝异步通知验签失败


如果支付宝异步验签一直返回false,很有可能是你的接收数据,被WordPress系统代码转义了。

可以在异步通知代码处打印收到的数据

var_dump($_POST);
exit();

上面接收的数据就是被WordPress系统方法转义了,正常的数据结构如下:

那么WordPress系统是在哪里转义了数据了?

wp_magic_quotes方法,在文件:wp-includes/load.php中调用

接收到的数据被修改了,当然验签就失败了,WordPress系统解决办法如下:

$_POST = stripslashes_data($_POST);

function stripslashes_data($input_array)
{
    if (empty($input_array) || !is_array($input_array)) {
        return $input_array;
    }
    foreach ($input_array as $k => $v) {
        if (is_array($v)) {
            $input_array[$k] = stripslashes_data($v);
        } elseif (is_string($v)) {
            $input_array[$k] = stripslashes($v);
        }
    }

    return $input_array;
}