微信回调验签总结
近期在做微信商家券项目期间,微信回调的验签始终不能通过,来来回回查文档、检查参数、调试参数甚至都要怀疑人生了。哪哪都对,为什么就是验签不通过?
先说结论:问题在于微信的官方文档和回调实际下发的body字段顺序不一致。
我试了3种方案。
-
微信最新api wechatpay-apache-httpclient
-
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":"商家券领券通知"}
《完》