這段時間在作微信支付開發,在公司的公衆號審批下來後,我這邊的測試用例也已經開發完畢,因而拿着具體的數據來調試了,大段大段的代碼就不貼了,demo裏有,這裏就說說調試過程當中遇到的坑。php
第一坑:redirect_url參數錯誤。由於我選擇的的「JS API」支付,這種支付須要網頁受權,先獲取code,再拿code去獲取openid和prepay_id。這個網頁受權須要登陸微信公衆平臺,點擊左側菜單「開發者中心」,在右側「權限列表」中找到「網頁帳號」,點擊最右側的修改,把測試的網址寫進去,注意不要加http。填好後,這個坑就趟過去了。html
第二坑:invalide code。趟過第一坑後,會返回code,再拿此code去獲取openid,可是每次到這步時微信那邊都返回這個{"errcode":40029,"errmsg":"invalid code"},此坑卡了我整整半個下午。在周天的時候,我又仔細看了開發文檔,沒得要領,最後又仔細檢查了下程序中每次回調的參數。這一檢查,就發現要領了,先把回調地址寫的最簡單,啥參數都不帶,成功;接着,一個一個參數帶上去,直到帶上token這個參數時,返回了invalid code。哈,我猜應該是此參數和微信那邊有衝突吧,因而把此參數改爲了其餘的,此坑立馬就過了,接下來支付就一會兒調試成功。服務器
第三坑:系統繁忙,正在升級,請稍後再試。週末調試成功後,便把測試代碼整合到項目中,開始支付。可是到了支付界面時,便出現了此問題,怎麼找到都發現不了問題,點擊週末的測試連接又是好的。下午時又仔細看了下上下游的的傳遞的參數,發現了問題所在。每次上游傳遞過來的支付金額total_fee都是「1.00」這種類型,由於微信支付的基本單位是分,因而把手動把1.00該爲1,成功了。看來是微信支付那邊total_fee不能接收小數點,因而我和上游的同事協調了下,傳遞過來的金額沒有小數點,此坑也就過了。微信
在iphone4上,支付不成功,因而進入測試機調試,發現問題出在第一坑中,把body參數去掉,就ok了,看來在微信支付時,最好少帶參數。 微信開發
下午,QA說微信支付又不成功了,提示「統一支付接口中,缺乏必填參數openid!trade_type爲JSAPI時,openid爲必填參數!」。我進入測試機中調試,發現服務器中curl請求微信平臺返回的都是NULL,提示無論用,接着又打印curl的報錯信息,輸出爲77,去curl錯誤碼查詢了下,提示是SSL證書的問題,因而我在服務器從新安裝了證書,並重啓了php-fpm,以後便能支付了。app
今天支付接入了商城相關邏輯,寫完後,我又測試了之前的會員卡支付的,發如今支付階段提示失敗,因而加上測試語句,提示「getBrandWCPayRequest:fail_no permission to execute」(注:iphone5s手機),後來找到了部小米的,進入支付提示「system:access_denied」,進入文檔一查,原來是受權目錄錯誤,改回來後就行了,應該是QA在年前改的,折騰。微信公衆平臺
關於微信支付的bug,說是報「package中的參數partner或者prepay_id爲空」的錯誤。因而我輕車熟路的進入到調試模式,通過幾回測試,發現微信支付一旦超過十萬便會出現上述提示,如果打上斷點調試語句的話,會發現微信返回{"errcode":"FAIL","errmsg":"invalid total_fee"}。知道微信支付額度上限,那麼只需在後臺設置最大不超過十萬便可。curl