微信H5支付:网络环境未能通过安全验证,请稍后再试

最近在开发微信H5支付,并且已应用到某个网站进行支付。但奇怪的是,一模一样的支付代码,换了一个网站,竟不能支付了。出现如图错误提示:

微信H5支付:网络环境未能通过安全验证,请稍后再试_第1张图片

百度一圈,均是说IP传得不对。

微信sdk文件中\lib\WxPay.Api.php中的函数unifiedOrder获取IP的方式是这样的:

$inputObj->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']);//终端ip    

但是这样获取的IP并不准确,可以用以下函数获取真正的IP

function get_client_ip() {
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
        $ip = getenv('HTTP_CLIENT_IP');
    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
        $ip = getenv('REMOTE_ADDR');
    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
}

之后清除一下浏览器缓存,再试一次,发现可以了~

你可能感兴趣的:(php)