天天看點

Java中的微信支付(2):API V3 微信平台證書的擷取與重新整理

1. 前言

在Java 中的微信支付(1):API V3 版本簽名詳解一文中胖哥講解了微信支付 V3 版本 API 的簽名,當我方(你自己的伺服器)請求微信支付伺服器時需要根據我方的API 證書對參數進行加簽,微信伺服器會根據我方簽名驗簽以确定請求來自我方伺服器。那麼同樣的道理我方的伺服器也要對微信支付伺服器的響應進行鑒别來确定響應真的來自微信支付伺服器,這就是驗簽。驗簽使用的是【微信支付平台證書公鑰】,不是商戶 API 證書。使用商戶 API 證書是驗證不過的。今天就來分享一下如何獲得微信平台公鑰和動态重新整理微信平台公鑰。

微信平台證書是微信支付平台自己的證書,我們是管不了的,而且是有效期的。

微信伺服器會定期更換,是以也要求我方定期擷取公鑰。而且我們隻能通過調用接口<code>/v3/certificates</code>來獲得,此接口也需要進行簽名(可參考上一篇文章)。你可以獲驗證書後靜态放到伺服器上,手動更新靜态證書;也可以動态擷取一勞永逸。本文采取一勞永逸的辦法。

平台證書接口文檔:https://wechatpay-api.gitbook.io/wechatpay-api-v3/jie-kou-wen-dang/ping-tai-zheng-shu

為了保證安全性,微信支付在回調通知和平台證書下載下傳接口中,對關鍵資訊進行了<code>AES-256-GCM</code>加密。也就是說我們拿到響應的資訊是被加密的,需要解密後才能獲得真正的微信平台證書公鑰。響應體大緻是這樣的,具體根據你調用平台證書接口,應該大差不差是下面這個結構:

你可以使用各種 JSON 類庫取得下面方法的參數進行解密以獲驗證書,同時這裡需要用到<code>APIv3密鑰</code>,通用的解密方式為:

回調的請求體也是此方法進行解密。

然後就能拿到微信平台證書公鑰。然後你可以定義個 Map,以證書的序列号為 KEY,以證書為 Value 來動态重新整理,關鍵僞代碼:

動态重新整理的政策就很好寫了:

雖然驗簽你不做可以拿到其它接口的響應結果,但是從資金安全的角度來說這是十分必要的。同時因為微信平台證書不收我方控制,采取動态重新整理也會更加友善,不必再擔心過期的問題。本文我們通過調用接口拿到密文并解密獲得證書。下一篇我們将通過獲得的證書進行簽名驗證來確定我們的響應是微信伺服器發過來的,請關注下方公衆号:碼農小胖哥 及時獲得相關的更新。

Java中的微信支付(2):API V3 微信平台證書的擷取與重新整理

往期推薦

MIT黑科技:通過手機記錄的咳嗽資料檢測是否感染新冠病毒

為什麼我使用了索引,查詢還是慢?

10個你可能不曾用過卻很有用的 LINUX 指令

分享一個Java開發都用得到的密碼摘要算法包

程式員編碼時都戴耳機?到底在聽什麼?

Spring Data 釋出更改版本管理方案之後的第一個版本:2020.0.0

深度内容

推薦加入

Java中的微信支付(2):API V3 微信平台證書的擷取與重新整理

最近熱門内容回顧   #技術人系列

Java中的微信支付(2):API V3 微信平台證書的擷取與重新整理