隨著微信小程序的發展微信下單系統,越來越多的聯通端應用選擇了微信產品作為媒介。無論是公眾號開發還是小程序開發,微信支付永遠都是繞不開的話題。因為微信支付涉及了好多場景,本文我們只學習怎樣在公眾號、小程序中接入微信支付。
一、微信支付的前提條件
1.1公眾號
微信公眾號大體上可以分為服務號和訂閱號,訂閱號和服務號的具體區別在曾經寫過的一篇文章Boot開發微信公眾號中具體介紹了,這兒就不再贅言,總的來說就是服務號提供了更中級的功能。
微信支付接入須要早已完成微信認證的服務號。若果是小程序的話,也須要完成微信認證。
公眾號可以關聯同一主體的10個小程序,不同主體的3個小程序,若果是和公眾號同一主體的小程序但是公眾號早已完成認證,則直接可以在公眾號后臺的小程序管理中,進行快速注冊并認證,這樣就無需重復支付微信認證所需的了。
1.2微信商戶平臺
微信認證完成后,在公眾號后臺的微信支付中開通微信支付功能。遞交微信支付申請后,3-5個工作日內,會進行初審,初審通過后會往你填寫的郵箱里發送一份包含商戶號信息的電郵,同時會往你填寫的對公帳戶中打幾分錢的轉賬,須要你查看具體金額后在商戶平臺中驗證。
商戶分為普通商戶和服務商商戶,千萬不要申請錯了。
普通商戶是可以進行交易,而且不能拓展商戶。
服務商可以拓展商戶,而且不能交易。
服務商就是提供統一的支付入口,它須要綁定具體的普通商戶,微信支付時會在支付插口中攜帶普通商戶參數,支付成功后金額會直接到具體的普通商戶帳戶上。
申請時直接申請普通商戶就可以了。
1.3綁定商戶
微信支付發起依賴于公眾號、小程序等應用與商戶號的綁定關系。因而在進行開發前,須要將商戶與具體應用進行綁定。
若果商戶和須要綁定的AppID是同一主體,只須要以下步驟即可完成綁定。
在商戶平臺-產品中心-AppID帳戶管理中關聯AppID,輸入AppId申請綁定
在公眾號或小程序后臺微信支付-商戶號管理中進行確認。
若果商戶和須要綁定的AppID是不同主體,步驟和上述一樣,不僅輸入AppId之外,還須要填入AppId的認證信息。
二、微信支付相關配置
2.1支付產品類型
付款碼支付
用戶打開微信皮夾-付款碼的界面,商戶掃碼后遞交完成支付。JSAPI支付
用戶通過微信掃碼,關注公眾號等方法步入店家H5頁面,并在微信內調用JSSDK完成支付。支付
用戶打開微信掃一掃,掃描商戶的二維碼后完成支付。APP支付
商戶APP中集成微信SDK,用戶點擊后跳轉到微信內完成支付。H5支付
用戶在微信以外的手機瀏覽器懇求微信支付的場景激起微信支付。小程序支付
用戶在微信小程序中使用微信支付的場景。刷臉支付
無需拿出手機,刷臉完成支付,適宜線下各類場景。
在商戶平臺-產品中心-我的產品中申請開通支付產品。
2.2支付授權目錄配置
在商戶平臺-產品中心-開發配置中進行支付授權目錄的配置(即你開發的下單插口地址),須要注意的是授權目錄最多可以配置五個,在開發過程中請合理定義支付插口。
2.3配置商戶秘鑰
在商戶平臺-帳戶中心-API安全中設置API秘鑰。
第一次設置時,須要安裝操作證書,傻蛋式安裝,根據提示一步一步操作就可以。
API秘鑰須要一個32位的隨機字符串,記得不要隨便修改API秘鑰。
在微信APIv3版本中,不僅要配置API秘鑰外,還須要配置APIv3秘鑰和申請CA頒授的API證書。
APIv3秘鑰主要用于平臺證書揭秘、回調信息揭秘。
API證書用于調用更高級別的api插口,包含退貨、紅包等插口。
假如使用開源的微信開發包,請了解是否支持v3版本。
2.4配置服務器
在公眾號后臺-開發-基本配置-服務器配置中啟用并填寫服務器信息。
2.5白名單配置
在公眾號后臺-開發-基本配置-公眾號開發信息中配置開發者秘鑰,同時填寫IP白名單。
2.6JS插口安全域名
在公眾號后臺-公眾號設置-功能設置中設置JS插口安全域名。
里面的配置是基于公眾號支付配置的,小程序支付沒有那么麻煩,小程序支付不用配置支付授權目錄和授權域名。
三、微信支付流程
因為微信升級了API插口,在APIv3插口中,須要加載申請的API證書,微信早已封裝了相關jar包,但是提供了加載示例,具體可參考“”,這兒就不再贅言。我們以APIv2為例詳盡學習一下微信接入的主要流程(由于APIv3的一些插口還在持續升級,v2插口相對完整)。
里面的這張圖片來自微信開發文檔,我們詳盡剖析一下支付流程。
3.1微信下單插口
用戶通過微信顧客端發起支付,在商戶后臺生成訂單,之后調用微信下單插口,生成預支付訂單,返回訂單號!
下單插口涉及到的主要參數,只列出重要的幾個參數:
sign的簽名也比較通用,涉及了一個保證簽名不可預測的
將所有發送的非空參數使用字典排序生成通配符對(key1=&key2=);
將商戶平臺秘鑰拼接在上述字符串的最后(“”+&key=秘鑰);
將上述字符串采用MD5加密
3.2支付
拉起微信支付,輸入密碼,完成支付。這一步須要在H5網頁中執行JS調起支付。
須要以下參數微信下單系統,因而在預收訂單返回時,須要將下述參數封裝后響應給頁面,由頁面完成支付。
簽名和下單插口的簽名形式一樣。
JS偽代碼如下:
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
// 公眾號ID,由商戶傳入
"appId":"wx2421b1c4370ec43b",
// 時間戳,自1970年以來的秒數
"timeStamp":"1395712654",
// 隨機串
"nonceStr":"e61463f8efa94090b1f366cccfbbb444",
"package":"prepay_id=u802345jgfjsdfgsdg888",
// 微信簽名方式
"signType":"MD5",
// 微信簽名
"paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89"
},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ){
// 使用以上方式判斷前端返回,微信團隊鄭重提示:
// res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對可靠。
}
});
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
}else{
onBridgeReady();
}
注意偽代碼中的這句話//res.將在用戶支付成功后返回ok,但并不保證它絕對可靠。為何如此說呢,我舉個反例應當就明白了。如果你去商場買東西,是不是你說支付成功了你就可以把東西帶走呢?肯定不是,是當店家收到錢后才算你支付成功,你才可以把東西帶走。也就是說,這兒提示的成功并不能說一定支付成功了,具體是否成功,微信平臺會以異步的形式給你進行通知。
3.3異步通知
異步通知是比較重要的一步,在這兒你可以按照通知結果處理你的業務邏輯。而且,可能會因為網路波動等誘因通知不到,或則說微信接收到的響應不符合API的規定,微信會持續發起多次通知(請在反彈通知插口中合理處理,防止重復通知導致業務重復處理),直至成功為止,通知頻度為15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h-總計24h4m)。并且微信不保證通知最終一定會成功。
異步通知響應參數如下:
假如微信仍然通知不成功如何?還是剛剛那種事例,你明明支付成功了,并且店家卻始終說她沒收到錢,這時侯你怎樣辦?肯定是去看一下她的手機是否真的沒有收到錢!這兒也一樣。
3.4支付狀態查詢
商戶APP或則后端頁面收到支付返回時,商戶須要調用商戶查單插口確認訂單狀態,并把查詢結果展示給用戶。
商戶后臺須要確切、高效地處理微信支付發送的異步支付結果通知,并按插口規范把處理結果返回給微信支付。
商戶后臺未收到異步支付結果通知時,商戶應當主動調用微信支付查單插口,同步訂單狀態。
商戶在T+1日從微信支付側獲取T日的交易帳單,并與商戶系統中的訂單核實。如出現訂單在微信支付側成功,并且在商戶側未成功的情況,商戶須要給用戶補發貨或則退貨處理。
四、總結
本文主要以公眾號支付為例,總結了接入微信支付須要的相關配置和支付流程。其他支付像APP支付也是開發中比較常見的應用場景,APP支付須要在微信開放平臺去創建應拿來接入微信支付。除此之外,微信支付API在向v3平滑升級,有些插口也還沒有升級完成,升級完的插口相較于v2發生了一些數據格式方面的變化。假如引用第三方開發包進行開發,須要注意插口對應的版本。
免責聲明:部分文章信息來源于網絡以及網友投稿,本站只負責對文章進行整理、排版、編輯,出于傳遞更多信息之目的,并不意味著贊同其觀點或證實其內容的真實性,如本站文章和轉稿涉及版權等問題,請作者在及時聯系本站,我們會盡快為您處理。