參考官方文檔
微信的支付文檔寫的是真的反人類极祸,關(guān)鍵點(diǎn)都不帶提的卧晓,強(qiáng)迫別人跟著前人一個(gè)坑接著一個(gè)坑踩贞远;微信接口請(qǐng)求及返回的數(shù)據(jù)格式都是xml形式蹬刷;
大體流程
- 服務(wù)器請(qǐng)求
https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey
瓢捉,獲取沙箱密鑰,作為沙箱環(huán)境下的商戶支付密鑰(KEY)办成,這步操作只在沙箱環(huán)境測(cè)試時(shí)才有 - 服務(wù)器請(qǐng)求
https://api.mch.weixin.qq.com/pay/unifiedorder
,統(tǒng)一下單泡态,微信支付服務(wù)后臺(tái)生成預(yù)支付交易單,根據(jù)返回的參數(shù)重新計(jì)算簽名 - app根據(jù)上一步的參數(shù)迂卢,進(jìn)行支付操作(這部分參考官方給的sdk跟demo)
- app支付成功后某弦,微信會(huì)根據(jù)第二步中設(shè)置的回調(diào)地址進(jìn)行回調(diào),需要在回調(diào)中做響應(yīng)的數(shù)據(jù)校驗(yàn)及業(yè)務(wù)處理
- 上面提到APP支付模式統(tǒng)一下單時(shí)而克,服務(wù)器會(huì)根據(jù)微信返回的預(yù)支付交易單重新計(jì)算簽名并發(fā)送給客戶端APP靶壮,但是使用NATIVE下模式一統(tǒng)一下單時(shí),如果重新計(jì)算簽名并處理成xml返回給微信员萍,微信會(huì)報(bào)系統(tǒng)繁忙的錯(cuò)誤提醒
1.step1沙箱環(huán)境
如果是正式支付環(huán)境腾降,只需要用將商戶支付密鑰(KEY)設(shè)置為商戶平臺(tái)上(賬戶中心→API安全→設(shè)置密鑰)上的API密鑰即可;如果是使用沙箱環(huán)境進(jìn)行測(cè)試碎绎,根據(jù)官方文檔-最佳實(shí)踐-支付驗(yàn)收指引:你需要請(qǐng)求微信借口 https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey
獲取沙箱密鑰并替換商戶支付密鑰蜂莉;
如果使用微信sdk的話,這里還需要注意的是混卵,每次計(jì)算簽名時(shí)映穗,使用的KEY要用沙箱密鑰
2.302 found
沙箱環(huán)境調(diào)用微信接口會(huì)經(jīng)常返302 found的一段html代碼,而微信支付常規(guī)的輸入輸出都是xml格式的幕随,校驗(yàn)接口返回的xml數(shù)據(jù)時(shí)就會(huì)解析出錯(cuò)蚁滋,ErrorException: simplexml_load_string(): Entity: line 6: parser error : Opening and ending tag mismatch: hr line 5 and body
,官方也沒給出具體原因赘淮,應(yīng)該是沙箱環(huán)境不穩(wěn)定吧辕录,只能多試幾次了
3. step2 統(tǒng)一下單
接口鏈接: https://api.mch.weixin.qq.com/pay/unifiedorder
這部分請(qǐng)求參數(shù)需要注意total_fee在沙箱環(huán)境下不能隨意設(shè)置金額,否則會(huì)報(bào)沙箱被掃支付金額(x)無(wú)效梢卸,請(qǐng)檢查需要驗(yàn)證的case走诞,官方也沒有看到在哪里有說(shuō)明,目前只知道app支付是101(分)蛤高,由于最近沙箱用不了蚣旱,其他的暫時(shí)還沒法測(cè)碑幅;
4.step3 回調(diào)
這里需要注意的是,app支付成功后塞绿,會(huì)一直往服務(wù)器回調(diào)地址發(fā)通知沟涨,這里需要根據(jù)數(shù)據(jù)庫(kù)中的訂單信息對(duì)接收到的參數(shù)進(jìn)行簽名對(duì)比,金額對(duì)比异吻,并做相應(yīng)業(yè)務(wù)處理裹赴,最終給微信返回固定格式的成功信息,否則微信會(huì)一直發(fā)通知诀浪,通知頻率為15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 總計(jì) 24h4m)