項(xiàng)目涉及到微信H5支付鳞青,記錄一下捅儒,省的再用的時候跑去翻別人的
H5支付 : 手機(jī)web頁面喚醒微信客戶端進(jìn)行支付
申請 : 以前需要聯(lián)系微信客服申請忠怖,現(xiàn)在可以在微信商戶平臺里開通
H5支付開發(fā)步驟:
https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4
常見問題:
1? ? 回調(diào)頁面判定問題
? ? 正常情況下虾宇,正常流程用戶支付完成后會返回至發(fā)起支付的頁面 昭娩,如下圖暴凑,我們在微信客戶端支付成功后峦甩,系統(tǒng)會自動切換到瀏覽器的該頁面(不會刷新頁面)
官方文檔里建議引導(dǎo)用戶手動確認(rèn)支付結(jié)果,即下圖中的彈窗现喳,那么在??什么時刻去彈出這個引導(dǎo)框?呢凯傲,
我做了一下測試,從微信支付完成 到 切換回 瀏覽器支付前頁面這一過程嗦篱,并沒有一個明確的事件可以讓我們用來界定 切換 回來冰单,使用 js 里的 beforeunload、unload灸促、或者監(jiān)聽 窗口的 hidden 屬性 都或多或少的存在兼容性問題诫欠,我測試了幾種效果,最終選擇 點(diǎn)擊確認(rèn)支付 按鈕后使用setTimeout(浴栽,2000) 來彈出該引導(dǎo)框?
2 商家參數(shù)格式有誤問題
開發(fā)文檔里標(biāo)注是由于 當(dāng)前調(diào)起H5支付的referer為空導(dǎo)致荒叼,什么時候會造成referer為空呢?
$_SERVER['HTTP_REFERER'] 完全來源于瀏覽器吃度。并不是所有的用戶代理(瀏覽器)都會設(shè)置這個變量甩挫,而且有的還可以手工修改 HTTP_REFERER。因此椿每,$_SERVER['HTTP_REFERER'] 不總是真實(shí)正確的伊者。
$_SERVER['HTTP_REFERER'] 會無效:
1、直接輸入網(wǎng)址訪問該網(wǎng)頁间护。
2亦渗、Javascript 打開的網(wǎng)址。
3汁尺、Javascript 重定向(window.location)網(wǎng)址法精。
4、使用?meta refresh?重定向的網(wǎng)址。
5搂蜓、使用 PHP header 重定向的網(wǎng)址狼荞。
6、flash 中的鏈接帮碰。
7相味、瀏覽器未加設(shè)置或被用戶修改。
所以一般來說殉挽,只有通過 超鏈接 <a href="">href</a>以及?POST?或?GET?表單訪問的頁面丰涉,$_SERVER['HTTP_REFERER'] 才有效。
另外還有一個問題需要注意 斯碌,要在支付頁面打開 喚醒微信客戶端鏈接一死,盡量避免中間穿插跳轉(zhuǎn),一些手機(jī)廠商自帶的瀏覽器會對 referer 的判定不一樣傻唾,由于背景原因投慈,我在這里入坑一次
3 網(wǎng)絡(luò)環(huán)境未能通過安全驗(yàn)證,請稍后再試
?商戶側(cè)統(tǒng)一下單傳的終端IP(spbill_create_ip)與用戶實(shí)際調(diào)起支付時微信側(cè)檢測到的終端IP不一致導(dǎo)致
例如:(無代理情況下)
我在局域網(wǎng)中開發(fā)策吠,手機(jī)使用charles代理訪問微信統(tǒng)一下單接口逛裤,此時 后臺php獲取到的 clientIP為?
192.168.32.100 ,為局域網(wǎng)IP猴抹,但是微信服務(wù)器驗(yàn)證我的IP時带族,卻使用的是我的外網(wǎng)IP 與 局域網(wǎng)IP做對比,所以開發(fā)時需要先 固定spbill_create_ip為公網(wǎng) ipv4 地址蟀给,然后訪問統(tǒng)一下單接口蝙砌。