其實任何接口開發只要按照給出來的接口文檔和例子開發基本上不會有太大問題的,一些問題都是出在雜七雜八的小細節上,如今分享一下微信支付開發中本身遇到的小細節。
按照文檔作完開發前配置,好比JS安全域名配置、網頁受權域名、公衆號受權目錄等等...php
看完微信支付的文檔,瞭解接口的規則,微信支付的流程基本是:獲取openid -> 生成統一下單參數 -> 用戶支付 -> 回調 ,其實沒有太複雜
在配置上面說的東西的時候也會有一些小問題前端
支付受權目錄須要配置到接口的上一級目錄, 斜槓(/)結尾,必須是斜槓結尾,並且是你寫的後端接口的請求路徑,無論是否作了路由跳轉之類的
文檔中也有給出了例子,在example文件夾,當時在第一步獲取openid就卡住了。
先講一下我這邊代碼框架是前端vue + 後端thinkphp給出api接口實現數據交互這樣的。
在第一步獲取openid中,須要作header("Location:....")
重定向獲取到code
而後跳轉回來Curl訪問access_token
接口獲取到用戶openid。
若是前端下單自己就是一個頁面跳轉那能夠按照demo的寫法直接用,可是若是是前端post請求是無法作重定向操做,因此獲取openid和生成統一訂單參數不能放在同一個方法內實現。
在前端異步的請求中會報Access-Control-Allow-Origin
的跨域問題,並且是報api.weixin.qq.com
不能跨域到api.weixin.qq.com
。
因此若是遇到以上跨域問題~那就是你的前端異步請求和獲取openid寫到一塊兒了,可是異步請求沒法響應header重定向的緣由。
若是你的項目中在其餘地方已經獲取到openid那這部分就不存在問題了vue
第一個坑的結果: 若是前端是異步請求數據的話,openid不能和統一下單寫在一塊兒~openid須要作一次重定向來獲取。
生成統一訂單參數要嚴格對照 參數文檔的參數寫,example
文件夾的例子中有寫好的組裝參數方法,能夠直接調用沒有太大問題,可是要注意的有如下幾點thinkphp
attach
值的最大長度是127
WeixinJSBridge.invoke
的getBrandWCPayRequest
請求中,注意是對象!!!對象!!!對象!!! 我跟前端開發溝通的過程當中前端就把參數轉成字符串寫到getBrandWCPayRequest
裏面了,我加班很久查資料最後才發現是這裏的問題在這一步會遇到如下報錯:後端
支付缺乏參數:appId
(由於整個參數組不是一個對象因此報錯)chooseWXPay:fail
(不能在開發者工具上調試微信支付,在工具上會報這個錯誤。其實去網上查的一大堆資料都說的解決都是在說這個緣由)這個坑的問題就在於: 各類參數要對照文檔寫好並且格式正確。
支付回調的例子裏面有重寫NotifyProcess
的方法,若是你要另外寫業務能夠吧notify.php寫成一個文件而後再寫另外的回調接口來請求這個類。
我這邊的話就重寫了一下方法返回回調數據。
回調的坑在於你回調業務處理完了以後要在最後加上如下:api
return '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
不然的話微信沒有收到你的回調成功返回,會不斷重複回調5次而後中止,若是回調中寫了業務那就會重複操做了。跨域
這個坑就是: 要注意回調結束要返回成功的xml響應
這幾天作微信支付暫時遇到的問題就這麼多,只能說注意細節吧,爬過的坑記錄下來之後遇到就懂處理了。 哦,還有微信支付的相關問題網上能搜到不少...可是不必定跟本身遇到的能匹配上,並且大部分都是好久的了.... 這個略坑