必须使用wechatpay-go sdk而非手写加解密,因其强制要求tls双向认证、authorization签名及aes-gcm解密验签;私钥需pkcs#8格式,证书序列号须用openssl从apiclient_cert.pem提取,apiv3key为商户平台设置的32位字符串;回调地址须https且域名备案,本地开发需内网穿透;回调接口须返回无body的http 200;需先解密验签再解析json;幂等性须自行实现,以out_trade_no等构造唯一键并用redis校验。

微信支付 V3 SDK 必须用 wechatpay-go,别手写加解密
微信支付 V3 接口强制要求 TLS 双向认证、Authorization 头签名、回调通知 AES-GCM 解密 + 签名验签。手写这些逻辑极易出错,比如:nonce_str 重复、时间戳偏差超 5 分钟、证书序列号没从 PEM 中正确提取、解密后 JSON 字段名大小写不匹配(如 resource 里是 original_type 而非 originalType)。
直接用官方维护的 wechatpay-go 是唯一稳妥选择:
go get -u github.com/wechatpay-apiv3/wechatpay-go- 私钥必须是 PKCS#8 格式(不是 PKCS#1),否则
utils.LoadPrivateKey会静默失败 - 证书序列号要从
apiclient_cert.pem中用 OpenSSL 提取:openssl x509 -in apiclient_cert.pem -noout -serial,不能抄商户平台页面上显示的“证书序列号”(格式不同) -
apiV3Key是你在商户平台「API 安全」里设置的 32 位字符串,不是证书密码
回调地址必须 HTTPS + 域名备案,本地开发只能靠内网穿透
微信支付拒绝接收 HTTP 或未备案域名的回调请求,报错通常是 invalid notify_url 或直接静默丢弃。本地 localhost:8080 或 127.0.0.1 绝对不可用。
可行方案只有两个:
- 用
ngrok/frp/ 花生壳等工具暴露本地端口,获得一个 HTTPS 域名(如https://xxx.ngrok.io/api/v1/pay/notify) - 把回调地址填进微信商户平台「开发配置 → 支付配置 → 回调URL」时,务必和实际请求头中的
Host完全一致(包括子域名、大小写) - 回调接口必须返回 HTTP 200 且响应体为空(连换行符都不能有),否则微信会持续重试(最多 5 次)
gin.Context.BindJSON 不能直接解析微信回调原始 body
微信 V3 回调发来的是加密后的 JSON(AES-GCM),c.Request.Body 是密文,不是结构体。如果直接 c.BindJSON(&v),会得到 json: cannot unmarshal string into Go value 或字段全空。
公众号运营|微信公众号|公众号一条龙|公众号全流程|自媒体运营|微信自动化|内容流水线|AIGC 工作流 — 公众号一条龙运营总控入口,覆盖选题→撰稿→审稿→排版→配图→发布等8个子技能,单条指令即可完成从零到上架的完整图文。面向公众号编辑、自媒体等用户。
正确流程是:
- 先用
c.Request.Body读取原始字节流(注意:c.Request.Body只能读一次) - 调用
verifier.VerifyBody(来自wechatpay-go)完成解密 + 验签,返回明文[]byte - 再用
json.Unmarshal解析明文,字段需严格按微信文档定义,例如通知类型是event_type,不是type - 业务处理完后立即
c.Status(200),不要c.JSON或c.String,避免额外字符
幂等性必须由你代码控制,SDK 不管这事
微信回调可能重复推送(网络抖动、超时重试),但 wechatpay-go 的验签解密只保证“消息真实”,不保证“消息唯一”。常见错误是:收到两次 TRANSACTION.SUCCESS 就扣两次库存、发两次发货单。
可靠做法是:
- 从解密后的
resource.out_trade_no或resource.mchid+resource.out_trade_no构造唯一键 - 用 Redis 记录已处理的回调 ID(
id字段)或业务单号,过期时间设为 24 小时 - 入库前先查该单号是否已有成功状态,有则直接返回 200,不再执行业务逻辑
- 不要依赖数据库主键冲突做幂等——微信回调并发高时,可能同时插入两条记录
最易被忽略的是:回调通知里的 create_time 是微信侧时间,不能用来判断“是否新通知”,必须以你的业务单号+状态为准。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










