分享一下這兩週爬微信支付的坑~但願有借鑑做用(PHP)

前言

其實任何接口開發只要按照給出來的接口文檔和例子開發基本上不會有太大問題的,一些問題都是出在雜七雜八的小細節上,如今分享一下微信支付開發中本身遇到的小細節。
按照文檔作完開發前配置,好比JS安全域名配置、網頁受權域名、公衆號受權目錄等等...php

坑一: 配置

看完微信支付的文檔,瞭解接口的規則,微信支付的流程基本是:獲取openid -> 生成統一下單參數 -> 用戶支付 -> 回調 ,其實沒有太複雜
在配置上面說的東西的時候也會有一些小問題前端

支付受權目錄須要配置到接口的上一級目錄, 斜槓(/)結尾,必須是斜槓結尾,並且是你寫的後端接口的請求路徑,無論是否作了路由跳轉之類的

坑二: openid的獲取

  • 下載微信支付DEMO 連接

文檔中也有給出了例子,在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.invokegetBrandWCPayRequest請求中,注意是對象!!!對象!!!對象!!! 我跟前端開發溝通的過程當中前端就把參數轉成字符串寫到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響應

END

這幾天作微信支付暫時遇到的問題就這麼多,只能說注意細節吧,爬過的坑記錄下來之後遇到就懂處理了。 哦,還有微信支付的相關問題網上能搜到不少...可是不必定跟本身遇到的能匹配上,並且大部分都是好久的了.... 這個略坑
相關文章
相關標籤/搜索