公司要開發(fā)微信支付, 于是我就開始看微信開放平臺的API文檔, 發(fā)現(xiàn)微信, 歷盡兩周開發(fā), 把網(wǎng)頁前后端都開發(fā)完畢了, 遇到過大大小小的坑, 記錄一下
開發(fā)準備
- 注冊微信公眾號(服務(wù)號)
- 開通微信支付功能
- 注冊開發(fā)者賬號(微信開放平臺)
- 在開發(fā)者賬號內(nèi)綁定自己的微信公眾號
- 申請測試公眾號
在微信公眾號平臺獲取基本參數(shù)
- token
- test_token
- appid
- appsecret
- mch_id
- test_appid
- test_appsecret
- server_notify
- key
服務(wù)器在獲取基本參數(shù)
- 驗證服務(wù)器 (
80
443
端口, 接受GET請求, 驗證 簽名) - 獲取
ACESS_TOKEN
(用獨立服務(wù)刷新) - 配置
JSSDK
- 獲取
openid
(oauth2.0
)
微信開發(fā)
- 微信支付
-
注入其實不用注入也可以成功JSSDK config
- 注入成功之后要驗證
Agent
是否支持微信支付 - 客戶端輸入信息完畢之后, 點擊支付后
- 服務(wù)器進行輸入校驗后, 保存訂單和用戶信息, 然后通過 統(tǒng)一下單接口 生成訂單, 并發(fā)送給客戶端
- 不要使用JSSDK網(wǎng)頁上的微信支付接口, 使用 微信支付詳情頁面示例的微信支付接口進行支付
- 支付成功后, 用
wx.closeWindow()
接口關(guān)閉頁面 - 微信會給服務(wù)器一個回調(diào), 然后服務(wù)器更改訂單狀態(tài), 并通過客服消息接口給客戶發(fā)個信息反饋(注意重復(fù)驗證)
-
- 微信客服消息
- 接受回調(diào), 驗證簽名和隨機字符串是否正確
- 正確之后發(fā)布客服消息
- 微信事件通知及被動消息回復(fù)
- 在開發(fā)者配置里, 把服務(wù)器回調(diào)網(wǎng)址配置好
- 當微信接到用戶特定動作時時, 會給服務(wù)器發(fā)送事件通知(POST), 然后開發(fā)者直接回復(fù)
xml
或者''
即可
吐槽注意要點
- 微信的
SessionID
會一直變化, 所以不能用Session
去存openid
, 我采用的是cookies
存儲 - 微信支付的支付頁面, 強匹配網(wǎng)址(http://www.abc.com 和 http://www.abc.com/)都不一樣, 有一點網(wǎng)址不一樣都不行
- 微信支付的支付 sdk 舊的和新的在微信支付頁面沒有標明,(JSSDK說明文檔上的支付API是舊的), 千萬不要用舊的了, 用新的即可
- 微信API上充斥著各種風(fēng)格的變量名(
noncestr
nonce_str
nonceStr
以及timestamp
timeStamp
)千萬要小心
開發(fā)時間
- 采用
nodejs
開發(fā), 微信支付的各種坑踩完 7個工作日 - 后端
CRUD
1個工作日 - 客服消息 不到1個小時
- 微信事件通知及被動消息回復(fù) 不到1個小時
PS: 歡迎大家繼續(xù)吐槽微信開發(fā)