上次有講到最近開發(fā)支付功能献酗,開發(fā)中碰到的一些問題蠢莺,因為之前很少接觸支付功能的開發(fā),所以項目要求在H5中要迅速打通微信支付功能以及支付寶支付功能蝇闭,我在前一篇文章中選擇了支付寶當面付支付以及微信Native掃碼付支付呻率。
? ? ? ? 但是在H5中使用支付寶當面付支付以及微信Native掃碼付支付真的合適么,如果我們拋開用戶體驗來講呻引,確實支付寶當面付支付可以滿足我們的需求了礼仗,用戶在H5中保存二維碼,然后進入支付寶進行掃碼付款操作逻悠,整個流程是沒問題的元践。但是微信Native掃碼付支付呢,這里面其實就有個坑童谒,微信Native掃碼付只能進行掃碼支付卢厂,而且不能支持從相冊中選擇二維碼,也就是說微信Native掃碼付支付只支持當面掃碼支付惠啄,而用戶使用不可能總是攜帶兩個手機慎恒,一只顯示二維碼,一個用戶掃碼支付撵渡,這有點不切實際融柬。而我寫上篇文章的時候測試因為用電腦顯示二維碼,手機直接掃碼支付所以當時沒發(fā)現(xiàn)這個問題趋距。所以說在不考慮用戶體驗的角度來說粒氧,支付寶當面付支付可以滿足我的需求了,但是微信Native需求滿足不了我的基本需求了节腐,所以微信Native掃碼付支付方式被我pass掉了外盯,然后我去查閱文檔發(fā)現(xiàn)摘盆,其實微信是有提供H5端直接跳轉(zhuǎn)微信進行支付操作的,而這剛好是我需要的饱苟,而且直接跳轉(zhuǎn)微信進行支付大大提高了用戶的體驗性孩擂,所以我最后改寫支付功能的時候我選擇了微信H5支付。接下來說說微信H5支付遇到的一些坑箱熬。
微信支付踩過的坑
1.網(wǎng)絡(luò)環(huán)境未能通過安全驗證类垦,請稍后再試
微信H5支付需要傳遞用戶支付的真實ip給微信進行校驗。這個bug其實是因為用戶實際調(diào)起支付時微信側(cè)檢測到的終端IP和商戶端我們傳給微信的用戶的終端ip不一致導(dǎo)致的城须。其實在公司內(nèi)網(wǎng)進行測試的時候是沒問題的蚤认,可以獲取到用戶當前操作的真實ip,測試支付功能完全沒問題糕伐。但是我上傳外網(wǎng)的時候就出問題了砰琢,外網(wǎng)測試獲取到的ip不是用戶的真實ip,導(dǎo)致微信端獲取到的ip與我們獲取到的ip不一致良瞧,導(dǎo)致網(wǎng)絡(luò)環(huán)境無法通過校驗氯析。
上圖就是我在外網(wǎng)測試得到的用戶ip,因為外網(wǎng)有nginx反向代理莺褒。所以我們獲取到的ip其實是nginx的代理地址,而真實ip我們是無法得到的雪情。后來經(jīng)過查閱文檔發(fā)現(xiàn)配置nginx可以將用戶真實ip進行傳遞遵岩。
我在外網(wǎng)nginx添加以上配置,果然就可以獲取到當前用戶進行支付時的真實ip巡通。
2.商家參數(shù)格式有誤尘执,請聯(lián)系商家解決
這是微信官方文檔對這個問題的解釋,這是什么意思呢宴凉?其實進行微信支付時微信會返回一個mweb_url給你進行支付誊锭,我們在申請H5支付時會設(shè)置授權(quán)域名,網(wǎng)頁調(diào)取支付H5支付返回的mweb_url 弥锄,必須要獲取H5支付頁面自帶的referer才行(問題是當前調(diào)起H5支付的referer為空導(dǎo)致)丧靡,導(dǎo)致referer為空的原因其實是因為微信返回的mweb_url我們直接進行訪問導(dǎo)致的,而直接訪問mweb_url就會導(dǎo)致無法獲取到H5支付頁面自帶的referer籽暇,所以我們在H5中進行點擊跳轉(zhuǎn)到mweb_url中就解決了這個問題了温治。
3.商家存在未配置的參數(shù),請聯(lián)系商家解決
這個問題比較簡單戒悠,當前調(diào)起H5支付的域名(微信側(cè)從referer中獲取)與申請H5支付時提交的授權(quán)域名不一致熬荆,我們登錄商戶平臺--"產(chǎn)品中心"--"開發(fā)配置"配置當前調(diào)起支付的授權(quán)域名即可。
微信H5支付因為是從Native支付方式進行改寫的绸狐,所以難度相比重新開發(fā)小了很多卤恳。在開發(fā)過程中主要時碰到了上述三個問題累盗,在這里記錄一下。
歡迎關(guān)注我的個人公眾號:周先生自留地
把微信H5支付完善了之后突琳,你看到兩個支付功能一個截圖再去掃碼若债,一個直接跳轉(zhuǎn)微信支付,其實你會不知不覺的開始考慮用戶體驗本今,所以我就去看了支付寶官方文檔拆座,支付寶可不可以實現(xiàn)我們直接從H5端直接跳轉(zhuǎn)支付寶進行支付呢,答案是可以的冠息,支付寶有手機網(wǎng)站支付方式挪凑,用戶手機安裝支付寶會直接跳轉(zhuǎn)支付寶進行支付,用戶沒有安裝支付寶可以在H5端登錄支付寶進行支付逛艰。于是我又開始了把支付寶當面付功能改寫成支付寶H5支付方式躏碳。下面講講支付寶H5支付碰到的一些問題。
1.簽名問題
這個問題其實是由于公司賬號申請支付寶H5支付的時候使用了RSA2加密算法散怖,但是之前用的當面付還是使用的RSA算法菇绵,因為工作交接不徹底的緣故我不清楚,所以導(dǎo)致簽名驗證一直失敗镇眷。后面我將app_id更換成H5支付的app_id,加密算法改成了RSA2算法咬最,就解決簽名問題了。
2.無效的app_id參數(shù)
這個問題真的是不應(yīng)該犯的錯誤,因為我用了正式環(huán)境的app_id秃嗜,但是我地址卻使用了沙箱環(huán)境的地址橙弱,兩者不匹配導(dǎo)致的無效的app_id,我改成正式地址之后就解決這個問題了翅雏。
可能是因為支付寶集成的比較好,我從當面付支付改寫成H5支付沒有遇到什么比較困難的問題人芽,而且文檔寫的也比較清楚望几,支付寶H5支付相比于當面付其實就是支付方式從alipay.trade.precreate改成了apipay.trade.wap.pay,以及biz_content添加一個product_code的固定參數(shù),所以思路比較清晰萤厅,改寫起來沒有花費特別多的時間就完成了橄抹。
到這里,支付寶H5端支付與微信H5端支付都完成了內(nèi)外網(wǎng)測試惕味,解決了需求了害碾。這篇文章就寫到這里了,謝謝觀看赦拘。