隨著微信小程序的發(fā)展,越來(lái)越多的移動(dòng)端應(yīng)用選擇了微信產(chǎn)品作為媒介。無(wú)論是公眾號(hào)開(kāi)發(fā)還是小程序開(kāi)發(fā),微信支付永遠(yuǎn)都是繞不開(kāi)的話題。由于微信支付涉及了很多場(chǎng)景,本文我們只學(xué)習(xí)如何在公眾號(hào)、小程序中接入微信支付。一、微信支付的前提條件
1.1 公眾號(hào)
微信公眾號(hào)大體上可以分為服務(wù)號(hào)和訂閱號(hào),訂閱號(hào)和服務(wù)號(hào)的具體區(qū)別在以前寫(xiě)過(guò)的一篇文章Spring Boot開(kāi)發(fā)微信公眾號(hào)中具體介紹了,這里就不再贅述,總的來(lái)說(shuō)就是服務(wù)號(hào)提供了更高級(jí)的功能。微信支付接入需要
已經(jīng)完成微信認(rèn)證的服務(wù)號(hào)。如果是小程序的話,也需要完成
微信認(rèn)證。公眾號(hào)可以關(guān)聯(lián)同一主體的10個(gè)小程序,不同主體的3個(gè)小程序,如果是和公眾號(hào)同一主體的小程序并且公眾號(hào)已經(jīng)完成認(rèn)證,則直接可以在公眾號(hào)后臺(tái)的
小程序管理
中,進(jìn)行快速注冊(cè)并認(rèn)證,這樣就無(wú)需重復(fù)支付微信認(rèn)證所需的
300
RMB了。
1.2 微信商戶平臺(tái)
微信認(rèn)證完成后,在公眾號(hào)后臺(tái)的?
微信支付
?中開(kāi)通微信支付功能。提交微信支付申請(qǐng)后,3-5個(gè)工作日內(nèi),會(huì)進(jìn)行審核,審核通過(guò)后會(huì)往你填寫(xiě)的郵箱里發(fā)送一份包含商戶號(hào)信息的郵件,同時(shí)會(huì)往你填寫(xiě)的對(duì)公賬戶中打幾毛錢(qián)的匯款,需要你查看具體金額后在商戶平臺(tái)中驗(yàn)證。商戶分為普通商戶和服務(wù)商商戶,千萬(wàn)不要申請(qǐng)錯(cuò)了。普通商戶是可以進(jìn)行交易,但是不能拓展商戶。服務(wù)商可以拓展商戶,但是不能交易。服務(wù)商就是提供統(tǒng)一的支付入口,它需要綁定具體的普通商戶,微信支付時(shí)會(huì)在支付接口中攜帶普通商戶參數(shù),支付成功后金額會(huì)直接到具體的普通商戶賬戶上。
申請(qǐng)時(shí)直接申請(qǐng)
普通商戶就可以了。
1.3 綁定商戶
微信支付發(fā)起依賴(lài)于公眾號(hào)、小程序等應(yīng)用與商戶號(hào)的綁定關(guān)系。因此在進(jìn)行開(kāi)發(fā)前,需要將商戶與具體應(yīng)用進(jìn)行綁定。如果商戶和需要綁定的AppID是同一主體,只需要以下步驟即可完成綁定。
- 在商戶平臺(tái)-產(chǎn)品中心-AppID賬戶管理中關(guān)聯(lián)AppID,輸入AppId申請(qǐng)綁定
- 在公眾號(hào)或小程序后臺(tái)微信支付-商戶號(hào)管理中進(jìn)行確認(rèn)。
如果商戶和需要綁定的AppID是不同主體,步驟和上述一樣,除了輸入AppId之外,還需要填入AppId的認(rèn)證信息。
二、微信支付相關(guān)配置
2.1 支付產(chǎn)品類(lèi)型
1. 付款碼支付用戶打開(kāi)微信錢(qián)包-付款碼的界面,商戶掃碼后提交完成支付。
2. JSAPI支付用戶通過(guò)微信掃碼,關(guān)注公眾號(hào)等方式進(jìn)入商家H5頁(yè)面,并在微信內(nèi)調(diào)用JSSDK完成支付。
3. Native支付用戶打開(kāi)微信掃一掃,掃描商戶的二維碼后完成支付。
4. APP支付商戶APP中集成微信SDK,用戶點(diǎn)擊后跳轉(zhuǎn)到微信內(nèi)完成支付。
5. H5支付用戶在微信以外的手機(jī)瀏覽器請(qǐng)求微信支付的場(chǎng)景喚起微信支付。
6. 小程序支付用戶在微信小程序中使用微信支付的場(chǎng)景。
7. 刷臉支付無(wú)需掏出手機(jī),刷臉完成支付,適合線下各種場(chǎng)景。在商戶平臺(tái)-產(chǎn)品中心-我的產(chǎn)品中申請(qǐng)開(kāi)通支付產(chǎn)品。
2.2 支付授權(quán)目錄配置
在商戶平臺(tái)-產(chǎn)品中心-開(kāi)發(fā)配置中進(jìn)行支付授權(quán)目錄的配置(即你開(kāi)發(fā)的下單接口地址),需要注意的是授權(quán)目錄最多可以配置
五個(gè),在開(kāi)發(fā)過(guò)程中請(qǐng)合理定義支付接口。
2.3 配置商戶密鑰
在商戶平臺(tái)-賬戶中心-API安全中設(shè)置API密鑰。
第一次設(shè)置時(shí),需要安裝操作證書(shū),傻瓜式安裝,按照提示一步一步操作就可以。API密鑰需要一個(gè)
32位的隨機(jī)字符串,記得
不要隨意更改API密鑰。
在微信API v3版本中,除了要配置API密鑰外,還需要配置APIv3密鑰和申請(qǐng)CA頒發(fā)的API證書(shū)。
- API v3密鑰主要用于平臺(tái)證書(shū)解密、回調(diào)信息解密。
- API證書(shū)用于調(diào)用更高級(jí)別的api接口,包含退款、紅包等接口。
如果使用開(kāi)源的微信開(kāi)發(fā)包,請(qǐng)了解是否支持v3版本。
2.4 配置服務(wù)器
在公眾號(hào)后臺(tái)-開(kāi)發(fā)-基本配置-服務(wù)器配置中啟用并填寫(xiě)服務(wù)器信息。
2.5 白名單配置
在公眾號(hào)后臺(tái)-開(kāi)發(fā)-基本配置-公眾號(hào)開(kāi)發(fā)信息中配置開(kāi)發(fā)者密鑰,同時(shí)填寫(xiě)IP白名單。
2.6 JS接口安全域名
在公眾號(hào)后臺(tái)-公眾號(hào)設(shè)置-功能設(shè)置中設(shè)置JS接口安全域名。
上面的配置是基于公眾號(hào)支付配置的,小程序支付沒(méi)有這么麻煩,小程序支付不用配置支付授權(quán)目錄和授權(quán)域名。
| JSAPI | 小程序 |
---|
支付協(xié)議 | HTTP/HTTPS | HTTPS |
支付目錄 | 有 | 無(wú) |
授權(quán)域名 | 有 | 無(wú) |
三、微信支付流程
由于微信升級(jí)了API接口,在API v3接口中,需要加載申請(qǐng)的API證書(shū),微信已經(jīng)封裝了相關(guān)jar包,并且提供了加載示例,具體可參考“https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_3.shtml”,這里就不再贅述。我們以API v2為例詳細(xì)學(xué)習(xí)一下微信接入的主要流程(因?yàn)锳PI v3的一些接口還在持續(xù)升級(jí),v2接口相對(duì)完整)。
上面的這張圖片來(lái)自微信開(kāi)發(fā)文檔,我們?cè)敿?xì)分析一下支付流程。
3.1 微信下單接口
用戶通過(guò)微信客戶端發(fā)起支付,在商戶后臺(tái)生成訂單,然后調(diào)用
微信下單接口,生成預(yù)支付訂單,返回訂單號(hào)!下單接口涉及到的主要參數(shù),只列舉重要的幾個(gè)參數(shù):
請(qǐng)求參數(shù) | 是否必傳 | 類(lèi)型 | 描述 |
---|
appid | 是 | String | 公眾號(hào)appid |
mch_id | 是 | String | 商戶號(hào) |
nonce_str | 是 | String | 隨機(jī)字符串,32位以內(nèi) |
sign | 是 | String | 簽名,默認(rèn)使用MD5進(jìn)行加密 |
out_trade_no | 是 | String | 系統(tǒng)內(nèi)部訂單號(hào) |
total_fee | 是 | Int | 訂單總金額,單位是分 |
notify_url | 是 | String | 支付結(jié)果通知接口 |
sign
的簽名也比較通用,涉及了一個(gè)保證簽名不可預(yù)測(cè)的
nonce_str
- 將所有發(fā)送的非空參數(shù)使用字典排序生成鍵值對(duì)(key1=value1