微信回調驗簽總結


近期在做微信商家券項目期間,微信回調的驗簽始終不能通過,來來回回查文檔、檢查參數、調試參數甚至都要懷疑人生了。哪哪都對,為什么就是驗簽不通過?

先說結論:問題在於微信的官方文檔和回調實際下發的body字段順序不一致。

我試了3種方案。

  1. 微信最新api wechatpay-apache-httpclient

  2. java 驗簽API Java中的微信支付(3):對微信服務器響應進行簽名驗證 | 微信開放社區 (qq.com)

  3. openssl 命令行:微信支付-開發者文檔 (qq.com)

其中方案1的錯誤提示:

驗簽失敗:serial=[6AA7492A34586DA6D4AF42782A07F33D4379E95E]
message=[1643346572
zsKryvwcnulf38DUssvqHyKCM3bqduwp
{"create_time":"2022-01-28T13:09:30+08:00","event_type":"COUPON.SEND","id":"b73944d4-8ba9-5bce-8975-422fde973746","resource":{"algorithm":"AEAD_AES_256_GCM","associated_data":"coupon","ciphertext":"***","nonce":"LZQnQDfylJpO","original_type":"coupon"},"resource_type":"encrypt-resource","summary":"商家券領券通知"}
]
sign=[mTpDvPsa2IBv7/v/nWlLE88s12nnn9+cJqzuVPjDbjaBnOx7ZphnFayTSKqG3a/O+PT2G7MV6QKVtrjU7KJS7LihtQfntU3LEp8wn/2Dv229vWSLM3OXXJF52oZLmDy3xX4Mt56pSvh57XN4DbRUe3/p3PVFFMiyuGnA7oIAXlGG8egMR9+ksw1EtZDJw/flff1o4exF48WysXCbVIu6QdaiDS6daLHw5owltO+LAkZFXo9SVBPvx16/amuB/jh3zEX+ariAZ91jC9riB1yVh6PGqJ/jNfTth/KTZeE6nqr+bVFiyCA/QMSL2APGjXGj3XmsTt7vxu9dPJqxRt/+cA==]
事情的轉機。在反復看回調驗簽文檔時,看到這句“應答主體(response Body),需要按照接口返回的順序進行驗簽,錯誤的順序將導致驗簽失敗。”。我對比了回調數據的body 和接口文檔,發現了字段順序不一致的現象。

解決方法。格式化回調數據(body),跟接口文檔對齊。然后驗簽就順利通過了,通過了

通過這個事情,我們可以發現微信支付的api 文檔其實不是那么嚴謹。要吃透文檔,但是又要保持一點懷疑精神。對於上述引用自官方文檔這句話。應加上“回調接口的body 字段和接口文檔不一致,需要先格式化跟接口文檔的字段順序保持一致” 。

最后,回調的body(跟接口文檔的字段順序對比着看) :

{"create_time":"2022-02-17T02:31:39+08:00","event_type":"COUPON.SEND","id":"a31447cb-57e8-5552-bcd1-6e8fa0ba3d11","resource":{"algorithm":"AEAD_AES_256_GCM","associated_data":"coupon","ciphertext":"***","nonce":"zEFCBCPkeNVw","original_type":"coupon"},"resource_type":"encrypt-resource","summary":"商家券領券通知"}
《完》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM