開通微信支付的步驟
注冊商戶號(hào):首先,需要在微信支付商戶平臺(tái)注冊并獲取商戶號(hào)。
申請開通微信支付功能:商戶需要提供相關(guān)資質(zhì)文件,申請開通支付功能。
配置 API 密鑰與證書:在商戶平臺(tái)生成并配置 API 密鑰,以及商戶號(hào)的證書。
開發(fā)集成支付接口:商戶可以選擇使用微信提供的 SDK 或自行調(diào)用 API,集成微信支付功能。
測試支付流程:在開發(fā)完成后,商戶可以在測試環(huán)境中進(jìn)行支付流程測試,確保支付功能正常。
上線支付功能:經(jīng)過測試并確認(rèn)無誤后,可以將微信支付功能上線,正式進(jìn)行商戶交易。
微信支付商戶平臺(tái)上配置 API 密鑰和證書,可以按照以下步驟操作
-
登錄微信支付商戶平臺(tái):
- 訪問 微信支付商戶平臺(tái),使用您的商戶號(hào)和密碼登錄。
-
設(shè)置 API 密鑰:
- 在左側(cè)導(dǎo)航欄中,依次點(diǎn)擊“賬戶中心” > “API安全”。
- 在“API密鑰”部分,點(diǎn)擊“設(shè)置密鑰”。
- 輸入一個(gè)包含數(shù)字和大小寫字母的32位字符作為您的 API 密鑰。
- 點(diǎn)擊“確認(rèn)”保存設(shè)置。
-
申請 API 證書:
- 在“API證書”部分,點(diǎn)擊“申請證書”。
- 根據(jù)提示,下載并安裝微信支付商戶平臺(tái)證書工具。
- 運(yùn)行證書工具,填寫您的商戶號(hào)和商戶名稱,生成請求串。
- 將生成的請求串復(fù)制到商戶平臺(tái)的相應(yīng)位置,提交申請。
- 申請成功后,可以下載包含公鑰和私鑰的證書文件。
請注意,API 密鑰和證書是與微信支付系統(tǒng)進(jìn)行安全通信的關(guān)鍵,務(wù)必妥善保管,避免泄露。
如需更詳細(xì)的操作指南,可以參考以下鏈接:
- 微信商戶號(hào)證書和密鑰設(shè)置詳細(xì)教程--搜下相關(guān)博文,簡書不能放鏈接
- 微信商戶號(hào) API 密鑰、API 證書配置-搜下博文吧,簡書不能放鏈接
在完成上述配置后,才可以繼續(xù)進(jìn)行支付接口的開發(fā)和集成。
微信支付中的四個(gè)核心概念
1. 商戶號(hào) (Mch_id)
作用:
商戶號(hào)是微信支付商戶在微信支付系統(tǒng)中的唯一標(biāo)識(shí)符。每個(gè)商戶號(hào)對(duì)應(yīng)一個(gè)商戶賬號(hào),所有支付相關(guān)的請求都會(huì)通過商戶號(hào)進(jìn)行標(biāo)識(shí),確保交易是由合法的商戶發(fā)起的。
- 微信相關(guān)操作很多都以商戶號(hào)作為維度
- 一個(gè)公司可以有多個(gè)商戶號(hào)。微信支付允許一個(gè)公司注冊多個(gè)商戶號(hào),尤其是當(dāng)公司在不同的業(yè)務(wù)領(lǐng)域或不同的地區(qū)開展業(yè)務(wù)時(shí),可以為每個(gè)子公司、分支機(jī)構(gòu)或不同的支付場景配置獨(dú)立的商戶號(hào)。
頁面展示:
在微信支付商戶平臺(tái)中,商戶號(hào)通常顯示在 商戶信息 頁面。登錄后,可以在商戶中心查看商戶號(hào)。
存儲(chǔ)內(nèi)容:
商戶號(hào)通常為一個(gè) 數(shù)字 字符串,例如:1234567890。
文件存儲(chǔ):
商戶號(hào)作為請求參數(shù)的一部分,與其他支付請求的參數(shù)一起存儲(chǔ)在請求數(shù)據(jù)中,用于每次的 API 調(diào)用。商戶號(hào)不會(huì)單獨(dú)存儲(chǔ)在證書中,通常是在數(shù)據(jù)庫中保留。
2. 商戶號(hào)公鑰/私鑰
作用:
- 公鑰:用于加密信息,商戶將需要加密的數(shù)據(jù)使用公鑰加密,微信支付系統(tǒng)通過商戶的公鑰來解密信息。保證了數(shù)據(jù)傳輸?shù)陌踩浴?/li>
- 私鑰:商戶用于簽名生成的密鑰。商戶使用私鑰對(duì)請求參數(shù)進(jìn)行簽名,以保證請求的完整性和合法性。微信支付系統(tǒng)使用商戶的公鑰來驗(yàn)證簽名。
頁面展示:
商戶在微信支付商戶平臺(tái)的 API安全 頁面進(jìn)行配置和管理。在此頁面,商戶會(huì)看到API密鑰、證書配置等信息。
文件格式和存儲(chǔ)內(nèi)容:
-
私鑰文件:商戶需要生成一個(gè) PKCS#8 格式的私鑰文件(通常是
.pem格式),用于簽名。 -
公鑰文件:商戶也需要生成一個(gè)公鑰(通常為
.pem格式),并上傳到微信支付平臺(tái),平臺(tái)用它來驗(yàn)證商戶的簽名。- 私鑰存儲(chǔ):商戶服務(wù)器上安全存儲(chǔ),確保私鑰的安全。
- 公鑰存儲(chǔ):公鑰可以公開存儲(chǔ)在微信支付平臺(tái)和商戶服務(wù)器。
文件存儲(chǔ):
私鑰和公鑰文件會(huì)存儲(chǔ)在商戶的服務(wù)器上。通常情況下,私鑰存儲(chǔ)在加密文件中,而公鑰可以直接存儲(chǔ)為一個(gè) PEM 格式文件。每次簽名時(shí),商戶會(huì)從存儲(chǔ)中加載私鑰生成簽名。
3. API 密鑰
作用:
API 密鑰是商戶用來加密接口請求數(shù)據(jù)并驗(yàn)證簽名的重要安全手段。在微信支付接口請求中,API 密鑰確保傳輸數(shù)據(jù)的完整性和可靠性。商戶請求時(shí)會(huì)使用該密鑰進(jìn)行數(shù)據(jù)加密,微信支付會(huì)用商戶提供的 API 密鑰驗(yàn)證請求的合法性。
頁面展示:
商戶在微信支付商戶平臺(tái)的 API安全 頁面設(shè)置和查看 API 密鑰。
該頁面提供 API 密鑰 的生成和修改選項(xiàng)。
- API密鑰不能隨意改,改了不同步到對(duì)應(yīng)的商戶系統(tǒng),直接與微信交互報(bào)錯(cuò)
存儲(chǔ)內(nèi)容:
API 密鑰是一個(gè) 32 位長度的字符串,由字母和數(shù)字組成。商戶在商戶平臺(tái)上設(shè)置后,微信支付會(huì)存儲(chǔ)該密鑰,并用于請求驗(yàn)簽和加密。
文件格式和存儲(chǔ)內(nèi)容:
-
API 密鑰格式:由字母和數(shù)字組成的32位字符,例如:
1234567890abcdef1234567890abcdef。 - 存儲(chǔ):商戶應(yīng)將 API 密鑰存儲(chǔ)在 安全的服務(wù)器環(huán)境中或者配置文件,并避免暴露給未經(jīng)授權(quán)的人員。常見的做法是將其保存在數(shù)據(jù)庫中加密存儲(chǔ)。
4. 平臺(tái)證書
作用:
微信支付 V3 版本引入了平臺(tái)證書,用于商戶與微信支付系統(tǒng)之間的安全數(shù)據(jù)交換。商戶使用平臺(tái)證書加密敏感數(shù)據(jù),微信支付用相應(yīng)的私鑰解密。平臺(tái)證書提高了通信的安全性,避免了數(shù)據(jù)在傳輸過程中被篡改或泄露。
頁面展示:
平臺(tái)證書在 API安全 頁面中可以看到。商戶需要申請證書并下載,生成證書時(shí)需要商戶信息。
文件格式和存儲(chǔ)內(nèi)容:
-
證書格式:平臺(tái)證書是 PEM 格式 的文件,通常包括
public和private證書。 -
證書存儲(chǔ):平臺(tái)證書及其私鑰文件需要保存在商戶服務(wù)器的 安全目錄 中。
- 公鑰證書:商戶下載的公鑰證書文件,用于加密與微信支付系統(tǒng)間的數(shù)據(jù)。
- 私鑰證書:商戶生成的私鑰證書,微信支付通過該私鑰證書解密請求數(shù)據(jù)。
文件存儲(chǔ):
平臺(tái)證書及私鑰需要在商戶的服務(wù)器或者配置文件中保存。
- 商戶號(hào):標(biāo)識(shí)商戶身份,通常存儲(chǔ)為數(shù)字字符串,管理在商戶平臺(tái)中。
-
商戶公鑰/私鑰:用于加密數(shù)據(jù)和簽名驗(yàn)證,私鑰文件通常為
.pem格式,公鑰可以公開上傳到商戶平臺(tái)。 - API 密鑰:用于接口加密和簽名驗(yàn)證,32位的字母數(shù)字組合,商戶需要妥善保存。
-
平臺(tái)證書:V3版本新增證書,用于加密與微信支付系統(tǒng)之間的敏感數(shù)據(jù)交換,格式為
.pem,包括公鑰和私鑰。
商戶需確保這些核心概念和文件的正確配置與存儲(chǔ),以保障微信支付的安全性和數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
V2 與 V3 的區(qū)別
-
API 設(shè)計(jì)與接口結(jié)構(gòu):
- V2:接口主要基于傳統(tǒng)的 HTTP 請求響應(yīng)模式,使用的是傳統(tǒng)的 HTTP 協(xié)議,商戶接口信息相對(duì)簡單。
- V3:V3 版本在接口設(shè)計(jì)上進(jìn)行了優(yōu)化,所有請求均采用 HTTPS,支持更為細(xì)粒度的權(quán)限控制和更加規(guī)范的接口結(jié)構(gòu),增強(qiáng)了安全性和可維護(hù)性。
-
安全性提升:
- V3 在 V2 的基礎(chǔ)上增加了更多安全措施,尤其是在簽名和證書的管理上,V3 引入了 平臺(tái)證書、APIv3 密鑰 和 HMAC-SHA256 等更加先進(jìn)的加密方法,保證了交易過程中的數(shù)據(jù)傳輸更加安全。
V2 版本使用的是傳統(tǒng)的 對(duì)稱加密(例如 MD5),它通過商戶的 API 密鑰 來生成簽名和加密數(shù)據(jù)。這種方式相對(duì)簡單,但在安全性上存在一定的風(fēng)險(xiǎn),特別是在密鑰泄露時(shí)。
V3 版本采用了 非對(duì)稱加密(例如 HMAC-SHA256),并引入了 平臺(tái)證書 和 APIv3 密鑰 來加密和驗(yàn)證數(shù)據(jù)。這種加密方式增加了系統(tǒng)的安全性,因?yàn)榧词剐孤读四承┟荑€,攻擊者也無法輕易篡改數(shù)據(jù)。
V3 版本通過引入 非對(duì)稱加密 和更復(fù)雜的 平臺(tái)證書管理,比 V2 版本在安全性上更為增強(qiáng)。
-
證書與密鑰管理:
-
V2 版本中,商戶會(huì)使用 商戶號(hào)證書 (
apiclient_cert.p12) 來進(jìn)行 API 簽名和身份驗(yàn)證。 - V3 版本則全面采用了 平臺(tái)證書 和 APIv3 密鑰,并采用了更為復(fù)雜的認(rèn)證機(jī)制,且所有商戶證書及密鑰需要通過微信商戶平臺(tái)配置和管理。
-
V2 版本中,商戶會(huì)使用 商戶號(hào)證書 (
- 本質(zhì)就是對(duì)稱加密和非對(duì)稱加密
支持V2和V3兩個(gè)微信版本的系統(tǒng)是否可以交付?
一個(gè)系統(tǒng)可以同時(shí)支持微信支付的 V2 和 V3 版本,但這通常涉及到兼容性的處理。微信支付的 V2 和 V3 版本有不同的接口設(shè)計(jì)和安全要求,因此在實(shí)際開發(fā)中,需要根據(jù)不同版本的需求進(jìn)行相應(yīng)的配置和集成。你可能需要通過接口版本的切換或者在后端提供不同的適配邏輯來同時(shí)支持 V2 和 V3 接口。
- 實(shí)際企業(yè)是需要同時(shí)支持的,因?yàn)榕f的鏈路v2還是很高效而且一直沿用
微信支付V2和V3的區(qū)別
為了更清晰地對(duì)比 V2 和 V3 的區(qū)別,下面是表格形式的詳細(xì)對(duì)比:
| 特性 | V2 版本 | V3 版本 |
|---|---|---|
| 安全性 | 使用商戶號(hào)的證書 (apiclient_cert.p12) 和 API 密鑰進(jìn)行數(shù)據(jù)簽名和加密 |
增強(qiáng)了安全性,使用平臺(tái)證書、APIv3密鑰,并引入 HMAC-SHA256 加密方式,保障通信安全 |
| 證書管理 | 商戶需要手動(dòng)上傳和配置證書,使用 P12 格式證書 | 引入了平臺(tái)證書和 APIv3 密鑰,證書管理更為規(guī)范化 |
| API 設(shè)計(jì) | 主要基于 HTTP 請求和響應(yīng) | 更為規(guī)范,所有請求均使用 HTTPS,提供了更細(xì)粒度的權(quán)限控制 |
| 簽名方式 | 使用商戶證書進(jìn)行簽名 | 引入了更復(fù)雜的 HMAC-SHA256 簽名方式,增加了簽名安全性 |
| 證書配置 | 僅需要配置商戶證書及私鑰 | 需要配置商戶證書、平臺(tái)證書和 APIv3 密鑰,管理方式更復(fù)雜 |
| 接口方式 | 使用傳統(tǒng)的接口方式 | 提供了更為豐富的接口,增強(qiáng)了數(shù)據(jù)交換和處理能力 |
| 回調(diào)處理 | 支持異步回調(diào) | 同樣支持異步回調(diào),并增加了更為詳細(xì)的接口設(shè)計(jì),支持更復(fù)雜的業(yè)務(wù)邏輯 |
微信支付后的回調(diào)特點(diǎn)
- 異步通知:微信支付完成后,微信支付平臺(tái)會(huì)發(fā)送異步回調(diào)到商戶配置的回調(diào) URL?;卣{(diào)通知包括支付狀態(tài)、商戶訂單號(hào)等關(guān)鍵信息,商戶需要根據(jù)回調(diào)的內(nèi)容確認(rèn)訂單狀態(tài)。
- 簽名驗(yàn)證:回調(diào)通知的內(nèi)容需要進(jìn)行驗(yàn)簽,商戶通過驗(yàn)證簽名來確?;卣{(diào)信息的真實(shí)性,防止信息偽造。
異步通知-多次回調(diào)
微信支付成功后的回調(diào)不僅僅是一次回調(diào),實(shí)際上,在某些情況下,可能會(huì)進(jìn)行 多次回調(diào)。
主要原因是微信支付可能需要對(duì)支付狀態(tài)進(jìn)行確認(rèn),特別是在涉及 訂單狀態(tài)更新、支付結(jié)果確認(rèn) 和 退款狀態(tài)變更 時(shí),會(huì)發(fā)送多次回調(diào)通知。
為了避免重復(fù)處理,商戶系統(tǒng)需要有合適的 冪等性 控制措施,確保相同的事件只會(huì)處理一次。
驗(yàn)簽-簽名驗(yàn)證
驗(yàn)簽是驗(yàn)證請求數(shù)據(jù)的完整性和真實(shí)性的過程,防止數(shù)據(jù)在傳輸過程中被篡改。商戶發(fā)起請求時(shí),會(huì)將數(shù)據(jù)進(jìn)行簽名,微信支付平臺(tái)收到請求后,會(huì)使用商戶的公鑰或 APIv3 密鑰對(duì)請求數(shù)據(jù)進(jìn)行驗(yàn)證,確保請求的合法性和完整性。
驗(yàn)簽流程:公鑰與 APIv3 密鑰的關(guān)系
在微信支付中,驗(yàn)簽的確是一個(gè)重要的安全步驟,目的是驗(yàn)證商戶發(fā)起的請求是否被篡改,以及請求的合法性。
簽名流程:
- 商戶發(fā)起請求時(shí),會(huì)使用自己的 私鑰(對(duì)于 V2)或 APIv3 密鑰(對(duì)于 V3)來簽名請求的數(shù)據(jù)。
- 微信支付系統(tǒng)收到請求后,會(huì)使用商戶的 公鑰(V2)或 APIv3 密鑰(V3)來對(duì)簽名進(jìn)行驗(yàn)證,確保請求數(shù)據(jù)沒有被篡改。
驗(yàn)簽使用公鑰還是 APIv3 密鑰?
V2 版本:微信支付使用商戶提供的 公鑰 來驗(yàn)證簽名。公鑰和私鑰是一對(duì) 非對(duì)稱密鑰,私鑰用于簽名,公鑰用于驗(yàn)簽。
V3 版本:由于 V3 引入了平臺(tái)證書和更強(qiáng)的安全機(jī)制,驗(yàn)簽使用的是 APIv3 密鑰,同時(shí)可能涉及到 平臺(tái)證書,并使用 HMAC-SHA256 簽名算法。商戶使用 APIv3 密鑰對(duì)數(shù)據(jù)進(jìn)行簽名,微信支付則使用相應(yīng)的 APIv3 密鑰來進(jìn)行驗(yàn)簽。
取決于什么:
- 在 V2 版本中,公鑰用于驗(yàn)簽。
- 在 V3 版本中,APIv3 密鑰用于驗(yàn)簽。
所以,V2 版本使用公鑰,V3 版本使用 APIv3 密鑰,不是“或”的關(guān)系,而是由版本和加密機(jī)制決定的。
自主研發(fā)軟件上線需要的流程與注意點(diǎn)
需求與功能規(guī)劃:首先明確軟件的需求,確定哪些功能需要支持微信支付,包括支付、退款、訂單查詢等。
技術(shù)方案設(shè)計(jì):確定系統(tǒng)架構(gòu)、數(shù)據(jù)庫設(shè)計(jì)、支付模塊設(shè)計(jì),確保支付接口與后端系統(tǒng)無縫對(duì)接。
開發(fā)與集成:在確保 API 密鑰、商戶號(hào)、平臺(tái)證書等配置正確的情況下,進(jìn)行支付接口的開發(fā)與集成。
-
測試:
- 單元測試:確保每個(gè)功能模塊的正常運(yùn)行。--這步很重要了,打通就行了
- 集成測試:測試整個(gè)支付流程,包括支付、回調(diào)、退款等功能,確保與微信支付系統(tǒng)的兼容性。
驗(yàn)簽與安全性:務(wù)必保證支付數(shù)據(jù)的安全性,防止因簽名錯(cuò)誤導(dǎo)致的數(shù)據(jù)篡改或偽造。
上線前驗(yàn)證:上線前進(jìn)行完整的支付流程測試,驗(yàn)證支付是否可以順利進(jìn)行,回調(diào)是否能夠正確收到。
上線與監(jiān)控:上線后,定期監(jiān)控支付功能的運(yùn)行情況,處理可能的支付異常、錯(cuò)誤或退款問題,確保支付系統(tǒng)的高可用性。
合規(guī)性與法律風(fēng)險(xiǎn):確保所有的支付流程符合相關(guān)法律法規(guī),避免因合規(guī)問題影響上線。
補(bǔ)充下重點(diǎn)的V3支付
微信支付 V3 版本流程圖
V3 版本的微信支付安全機(jī)制相比 V2 版本更加復(fù)雜,涉及了更多的安全組件和流程。以下是微信支付 V3 版本的核心流程圖:
V3 微信支付流程圖
商戶系統(tǒng)(商戶發(fā)起支付) → 生成支付請求(使用私鑰簽名) → 微信支付系統(tǒng)(驗(yàn)簽)
↓
商戶系統(tǒng)(支付成功通知) → 微信支付系統(tǒng)(發(fā)起異步通知)
↓
商戶系統(tǒng)(異步通知驗(yàn)證簽名) → 完成支付處理
關(guān)鍵流程和加密解密過程
-
商戶發(fā)起支付請求:
- 商戶系統(tǒng)發(fā)起支付請求時(shí),首先需要構(gòu)建請求數(shù)據(jù),并使用商戶的私鑰進(jìn)行簽名。
- 使用 APIv3 密鑰 或商戶的 私鑰 對(duì)請求數(shù)據(jù)進(jìn)行簽名,確保數(shù)據(jù)傳輸?shù)陌踩院屯暾浴?/li>
-
微信支付系統(tǒng)驗(yàn)簽:
- 微信支付收到請求后,使用商戶提供的 公鑰 或 APIv3 密鑰 對(duì)請求進(jìn)行簽名驗(yàn)證,確保數(shù)據(jù)沒有被篡改。
-
支付成功通知:
- 微信支付支付成功后,向商戶系統(tǒng)發(fā)出異步通知,商戶系統(tǒng)會(huì)收到支付通知,并需要對(duì)該通知進(jìn)行驗(yàn)簽。
-
商戶驗(yàn)簽異步通知:
- 商戶系統(tǒng)使用 商戶公鑰 或 APIv3 密鑰 對(duì)微信支付發(fā)送的異步通知進(jìn)行驗(yàn)簽,以確保通知的真實(shí)性和完整性。
各個(gè)證書和密鑰的作用
在微信支付 V3 版本中,涉及多個(gè)證書和密鑰,每個(gè)證書和密鑰在加密、解密以及驗(yàn)簽的過程中都有其特定的作用。下面是詳細(xì)的說明:
| 證書/密鑰 | 作用 | 加密/解密/驗(yàn)簽過程 |
|---|---|---|
| 商戶私鑰 | 用于簽名請求數(shù)據(jù)。 | 商戶使用私鑰生成簽名,用于驗(yàn)證請求的完整性。 |
| 商戶公鑰 | 用于微信支付系統(tǒng)驗(yàn)證商戶請求數(shù)據(jù)的簽名。 | 微信支付系統(tǒng)使用商戶公鑰來驗(yàn)證商戶發(fā)起的請求數(shù)據(jù)的簽名,確保數(shù)據(jù)未被篡改。 |
| APIv3 密鑰 | 用于簽名請求數(shù)據(jù)和驗(yàn)簽異步通知。 | 商戶使用 APIv3 密鑰對(duì)請求和支付結(jié)果進(jìn)行簽名;微信支付使用 APIv3 密鑰對(duì)請求進(jìn)行驗(yàn)簽。 |
| 平臺(tái)證書 | 用于加密和解密商戶與微信支付系統(tǒng)之間的敏感數(shù)據(jù)。 | 商戶使用平臺(tái)證書加密數(shù)據(jù),微信支付使用平臺(tái)證書解密。 |
其他的一些注意點(diǎn):
- 單次支付的限制:5w.開通網(wǎng)聯(lián)限額可以取消這個(gè)限制
- 微信支付只是多個(gè)支付的其中一種方式,對(duì)于系統(tǒng)維度來說,支付一般需要使用策略模式,支持多渠道支付,常用的三種1.微信支付 2.支付寶支付 3. 銀聯(lián)支付
- 在開發(fā)上其實(shí)v3是比較重要的,v2改動(dòng)和驗(yàn)證都很快,現(xiàn)在主要用的是V3.
- 開發(fā)的時(shí)候這些肯定是封裝好的,但是遇到證書過期或者apiV3密鑰修改等等這種情況需要對(duì)微信支付全流程以及各個(gè)證書的作用非常了解,不然你的系統(tǒng)就不能發(fā)放微信券和支付了,也沒法回調(diào)了,影響非常大。