资讯详情

微信支付V3版回调通知解密逻辑讲解

📅 2026/11/2 11:18:38 | 华诺云谱 👁 阅读
微信支付V3版回调通知解密逻辑讲解
目录一、回调通知机制二、回调通知整体流程三、回调通知数据结构四、开发验签并解密数据五、解密后数据结构六、回调处理注意事项一、回调通知机制核心定义微信支付在用户支付完成后主动向商户系统发送支付结果通知简单说就像快递送达后给你打电话告诉你包裹到了打个比方你点外卖商家做好后通知你回调就是微信支付通知商户支付结果解密微信支付回调数据: 支付成功回调通知_Native支付|微信支付商户文档中心注意商户接收到回调通知报文后需在5秒内完成对报文的验签并应答回调通知。若商户应答回调接收成功微信支付将不再重复发送该回调通知。若因网络或其他原因商户收到了重复的回调通知请做好重入设计并持续应答200若商户应答回调接收失败或超时(5s)未应答时微信支付会按照15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h的频次重复发送回调通知直至微信支付接收到商户应答成功或达到最大发送次数15次二、回调通知整体流程三、回调通知数据结构{id: d92f3b9a-XXXX-57ed-XXXX-192c5463515f,create_time: 2026-03-04T11:40:3308:00,resource_type: encrypt-resource,event_type: TRANSACTION.SUCCESS,summary: 支付成功,resource: {original_type: transaction,algorithm: AEAD_AES_256_GCM,ciphertext: DmnL1wPMRMgQRncDDXXXXXXXXXXXXXXXXXXXXvpk3RkXvU5E0K0ZD3KdO9Cnz9zGUgWl4Q5bd2v9tO1tpBX6SLjh8WiygQBIIA3M6/ooriGgV7MdNChAHAv7dKkMN4ONDzn3iUpjU2JqcsyWzK62hgIOi0OhVrmArNltuNMhNCkCGxmUrKymhgJv56Oa03J9Jm/z7CnY8DsVbjP0IkE9gVyXPsfOysRiiczVvEvly3PjU1fL1Uj8r0Y6Dn73gUu9D/nvghoqFWIIY7V5nsMzIzj0UVL1uY7N7dPtmK07CxP6bwg5pPnjBsXsynJVNfQWlVmCzPnC/q1tjRdGxVnRBS3VQIByJjMedWhh8dkT8usEuKDocsxCTYxc1fHbqRguu7z5iyzlZtzCi4lWTBFiTgiYs7ZVeyZ2u6MlyCD1bae938tTace0DFWETD4jpfaCMErp9aYHpVujNivI0fHkqI24vHW6lMndOlxxWrsBwrHP8csbiTmoRuH0erI9k0DOiYS51NUwxJEobJdyCFhFEo2fnZuqrjHJ3EX4iWFKIHVk8QPerzHZhV96IbLTuLw,associated_data: transaction,nonce: KLIcKxxxxxyC}}四、开发验签并解密数据/** * 解析微信支付回调通知 * 使用公钥模式的 NotificationParser 验签并解密回调数据 * * param timestamp 回调请求头 Wechatpay-Timestamp * param nonce 回调请求头 Wechatpay-Nonce * param signature 回调请求头 Wechatpay-Signature * param signType 回调请求头 Wechatpay-Signature-Type * param serialNumber 回调请求头 Wechatpay-Serial * param body 回调请求体 * return 解析后的 Transaction 交易对象解析失败返回null */ public Transaction parseCallbackNotification(String timestamp, String nonce, String signature, String signType, String serialNumber, String body) { try { RequestParam requestParam new RequestParam.Builder() .serialNumber(serialNumber) .nonce(nonce) .signature(signature) .timestamp(timestamp) .signType(signType) .body(body) .build(); Transaction transaction notificationParser.parse(requestParam, Transaction.class); log.info(解析微信支付回调成功订单号{}状态{}, transaction.getOutTradeNo(), transaction.getTradeState()); return transaction; } catch (Exception e) { log.error(解析微信支付回调失败, e); return null; } }五、解密后数据结构{transaction_id: 1217752501xxxxxxxxxx33368018,amount: {payer_total: 100,total: 100,currency: CNY},mchid: 12300xxx09,trade_state: SUCCESS,bank_type: CMC,success_time: 2018-06-08T10:34:5608:00,out_trade_no: 121775xxxxxxxxx7033233368018,appid: wxd678efh5xxxxxxx87}六、回调处理注意事项幂等性处理同一订单可能收到多次回调需要去重快速响应回调处理要尽快返回避免微信支付重试异步处理复杂业务逻辑建议异步处理返回值格式验签通过商户需告知微信支付接收回调成功HTTP应答状态码需返回200或204无需返回应答报文。验签不通过商户需告知微信支付接收回调失败HTTP应答状态码需返回5XX或4XX同时需返回应答报文。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑