一、開(kāi)發(fā)準(zhǔn)備
1、注冊(cè)微信公眾號(hào)
2、注冊(cè)開(kāi)發(fā)者賬號(hào)(微信開(kāi)放平臺(tái))
3、在開(kāi)發(fā)者賬號(hào)內(nèi)綁定自己的微信公眾號(hào)
4、申請(qǐng)測(cè)試公眾號(hào)
二、在微信公眾號(hào)平臺(tái)獲取基本參數(shù)(保存在配置文件里)
token
test_token
appid
appsecret
mch_id //支付
test_appid
test_appsecret
server_notify
key
三、服務(wù)器在獲取基本參數(shù)
1、驗(yàn)證服務(wù)器(80 443端口,接受GET請(qǐng)求,驗(yàn)證簽名)
2、獲取ACESS_TOKEN(用獨(dú)立服務(wù)刷新),可以保存在文件里,也可以保存在redis里,建議獨(dú)立進(jìn)程去刷新,有失敗重試和報(bào)警
3、配置JSSDK,調(diào)用微信JSSDK接口時(shí)需要用到
4、獲取 openid(oauth2.0),獲取微信用戶信息綁定自己的數(shù)據(jù)庫(kù)用戶時(shí)需要用到
四、微信開(kāi)發(fā)
1、微信菜單 把JSON對(duì)象傳給微信服務(wù)器,建議做成單獨(dú)的功能,不要和其他功能
2、微信支付
1)注入JSSDK config(其實(shí)不用注入也可以成功)
2)注入成功之后要驗(yàn)證 Agent是否支持微信支付
3)客戶端輸入信息完畢之后,點(diǎn)擊支付后
4)服務(wù)器進(jìn)行輸入校驗(yàn)后,保存訂單和用戶信息,然后通過(guò)統(tǒng)一下單接口生成訂單, 并發(fā)送給客戶端
5)不要使用JSSDK網(wǎng)頁(yè)上的微信支付接口,使用微信支付詳情頁(yè)面示例的微信支付接口進(jìn)行支付
6)支付成功后,用wx.closeWindow()接口關(guān)閉頁(yè)面
7)微信會(huì)給服務(wù)器一個(gè)回調(diào),然后服務(wù)器更改訂單狀態(tài),并通過(guò)客服消息接口給客戶發(fā)個(gè)信息反饋(注意重復(fù)驗(yàn)證)
2、微信客服消息
1)接受回調(diào), 驗(yàn)證簽名和隨機(jī)字符串是否正確
2)正確之后發(fā)布客服消息
3、微信事件通知及被動(dòng)消息回復(fù)
1)在開(kāi)發(fā)者配置里,把服務(wù)器回調(diào)網(wǎng)址配置好
2)當(dāng)微信接到用戶特定動(dòng)作時(shí)時(shí),會(huì)給服務(wù)器發(fā)送事件通知(POST),然后開(kāi)發(fā)者直接回復(fù) xml 或者 '' 即可
五、注意要點(diǎn)
1、微信的SessionID會(huì)一直變化, 所以不能用Session去存openid,可以采用的是cookies localStorage存儲(chǔ)
2、微信支付的支付頁(yè)面,強(qiáng)匹配網(wǎng)址(http://www.seoimc.net 和http://www.seoimc.net/)都不一樣,有一點(diǎn)網(wǎng)址不一樣都不行
3、微信支付的支付 sdk 舊的和新的在微信支付頁(yè)面沒(méi)有標(biāo)明,(JSSDK說(shuō)明文檔上的支付API是舊的),千萬(wàn)不要用舊的了, 用新的即可
4、微信API上充斥著各種風(fēng)格的變量名(noncestr nonce_str nonceStr 以及 timestamp timeStamp)千萬(wàn)要小心
5、微信開(kāi)發(fā), 本質(zhì)是web移動(dòng)端開(kāi)發(fā),只是有時(shí)候需要調(diào)用JSSDK接口,有時(shí)候需要與微信服務(wù)器通信讓微信服務(wù)器發(fā)送指令給用戶,開(kāi)發(fā)過(guò)微信支付之后,基本上就沒(méi)什么難點(diǎn)了...
6、微信有php示例代碼,開(kāi)發(fā)的時(shí)候可以參考一下,語(yǔ)言都是通用的