今天用手机测试H5页面的支付场景,支付宝没有问题,但是使用微信支付时,给出以下提示,赶紧百度,发现是获取客户端IP的问题,修改获取方式,解决。这个issue也让我想起了网站使用方向代理,导致获取IP错误的问题,有兴趣的朋友可以点击此处访问。
原有的的获取方式
配置文件路径:extensions\wxpay\lib\WxPay.Api.php
$inputObj->SetSpbill_create_ip(self::getClientIP());//终端ip
定义函数获取IP
private static function getClientIP(){
$ip = "unknown";
/*
* 访问时用localhost访问的,读出来的是“::1”是正常情况。
* ::1说明开启了ipv6支持,这是ipv6下的本地回环地址的表示。
* 使用ip地址访问或者关闭ipv6支持都可以不显示这个。
* */
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif (isset($_SERVER["HTTP_CLIENT_ip"])) {
$ip = $_SERVER["HTTP_CLIENT_ip"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv('HTTP_X_FORWARDED_FOR')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif (getenv('HTTP_CLIENT_ip')) {
$ip = getenv('HTTP_CLIENT_ip');
} else {
$ip = getenv('REMOTE_ADDR');
}
}
if(trim($ip)=="::1"){
$ip="127.0.0.1";
}
return $ip;
}
问题解决~