Laravel支付寶/微信支付

建議閱讀之前多看幾遍文檔,本文不適合不看文檔的程序狗。


流程部分

因為支付流程都很復(fù)雜,設(shè)計業(yè)務(wù)邏輯也很多。所以在開發(fā)之前應(yīng)該先熟悉兩個支付的流程。熟悉流程之后在進行開發(fā)會節(jié)省很多debug的時間。
本次使用的laravel包為yansongda/pay

微信

H5支付

在手機瀏覽器中使用微信支付,通過瀏覽器喚起微信支付。

(1)請求統(tǒng)一下單接口

用戶點擊支付之后后臺進行統(tǒng)一下單接口請求。其實操作僅僅是在微信支付服務(wù)端,產(chǎn)生了一個訂單而已。

(2)調(diào)起微信客戶端付款

這里用的就是上面接口返回數(shù)據(jù)中的 mweb_url (這個參數(shù)只有在 return_code(請求標識) 和 result_code(業(yè)務(wù)標識) 都為SUCCESS時返回),這個參數(shù)就是瀏覽器調(diào)起支付的地址。直接訪問即可。
但是在 yansongda/pay 中 return $pay->wap($order); 就會直接重定向到該地址。

(3)支付結(jié)束回到瀏覽器

這里流程應(yīng)該是這樣子:瀏覽器調(diào)起微信->微信支付過程->調(diào)起瀏覽器并打開剛才的網(wǎng)址。
注意這里是:調(diào)起瀏覽器 重新打開剛才的地址
所以在回到瀏覽器的時候,應(yīng)該做查詢訂單狀態(tài)的操作。比如給用戶一個選擇,已付款還是付款出現(xiàn)問題。

(4)支付回調(diào)

上面的流程前端永遠不知道用戶到底付款還是沒付款。
用戶支付成功,微信會通過后臺的接口進行更新狀態(tài)。
所以要在后臺進行對訂單的改變。記得按照要求return,不然微信會一直發(fā)送通知請求。并且在在更新訂單前也要確認是否更新過。這都是必要的操作。

常見問題:
1、商家存在未配置的參數(shù),請聯(lián)系商家解決

1.當前調(diào)起H5支付的域名(微信側(cè)從referer中獲?。┡c申請H5支付時提交的授權(quán)域名不一致,如需添加或修改授權(quán)域名,請登陸商戶號對應(yīng)的商戶平臺--"產(chǎn)品中心"--"開發(fā)配置"自行配置
2.如果設(shè)置了回跳地址redirect_url,請確認設(shè)置的回跳地址的域名與申請H5支付時提交的授權(quán)域名是否一致

2、商家參數(shù)格式有誤,請聯(lián)系商家解決

1.當前調(diào)起H5支付的referer為空導(dǎo)致,一般是因為直接訪問頁面調(diào)起H5支付,請按正常流程進行頁面跳轉(zhuǎn)后發(fā)起支付,或自行抓包確認referer值是否為空

3、網(wǎng)絡(luò)環(huán)境未能通過安全驗證,請稍后再試

此處有坑! 如果后端是使用docker容器,則會報 「網(wǎng)絡(luò)環(huán)境未能通過安全驗證,請稍后再試」的錯誤。原因就是傳遞的參數(shù)中IP又問題。因為 「yansongda/pay」中自動獲取IP是 Request::createFromGlobals()->getClientIp() 在docker中這個獲取的是docker局域網(wǎng)IP。所以要在參數(shù)重重寫 Request::createFromGlobals()->server('HTTP_X_REAL_IP') **

但是這個IP是干嘛的?
下圖完美解釋。

H5傳遞的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)容