微信H5支付出現(xiàn)網(wǎng)絡(luò)環(huán)境未能通過安全驗證,請稍后再試.

在其他瀏覽器中使用微信支付時會調(diào)用微信的H5支付,但有時會出現(xiàn)如上圖的錯誤,查看了一下微信官方文檔了解到是獲取客戶端IP出現(xiàn)了問題.如下圖.


也就是說我們要修改下微信支付獲取IP的方式得到真是的客戶端IP:原有的的獲取方式是: 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],可以定義個函數(shù)獲取Ip:

/**

?* 獲取用戶真實iP

?*? */

public?function?getIp()

{

????if(!empty($_SERVER["HTTP_CLIENT_IP"]))

????{

????????$cip?=?$_SERVER["HTTP_CLIENT_IP"];

????}

????else?if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))

????{

????????$cip?=?$_SERVER["HTTP_X_FORWARDED_FOR"];

????}

????else?if(!empty($_SERVER["REMOTE_ADDR"]))

????{

????????$cip?=?$_SERVER["REMOTE_ADDR"];

????}

????else

????{

????????$cip?=?'';

????}

????preg_match("/[\d\.]{7,15}/",?$cip,?$cips);

????$cip?= isset($cips[0]) ??$cips[0] :?'unknown';

????unset($cips);

????return?$cip;

}

之后使用這個函數(shù):

'spbill_create_ip'?=>?$this->getIp(),

問題就解決啦~~~~~

總結(jié):?

getenv("REMOTE_ADDR")用來取得客戶端的 IP 地址,但如果客戶端是使用代理服務(wù)器來訪問,那取到的就是代理服務(wù)器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理服務(wù)器取得客戶端的真實 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 來讀取。

但是如果客戶端沒有通過代理服務(wù)器來訪問,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值將是空的。

else if(getenv("HTTP_X_FORWARDED_FOR"))

$ip = getenv("HTTP_X_FORWARDED_FOR");

表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不為空(即客戶端使用代理服務(wù)器的情況下),則變量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真實IP值。

如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值為空(即沒有使用代理服務(wù)器),則不會執(zhí)行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");這一行語句。

這種情況下已經(jīng)確認客戶端沒有使用代理服務(wù)器,從而通過

else if(getenv("REMOTE_ADDR"))

$ip = getenv("REMOTE_ADDR");

這兩行語句獲得客戶端的IP地址也是真實的IP地址。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容