Go在使用 微信最新的V3sdk时 接收回调通知的记录
这里使用的是官方文档中的方法1
使用时发现 回调header中返回的序列号和本地不一致
原因是header中的序列号是平台证书序列号 本地证书是商户证书
//读取本地的商户证书私钥
mchPrivateKey, err := utils.LoadPrivateKeyWithPath("/home/apiclient_key.pem")
ctx := context.Background()
// 使用商户私钥等初始化 client,并使它具有自动定时获取微信支付平台证书的能力
opts := []core.ClientOption{
option.WithWechatPayAutoAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, mchAPIv3Key),
}
_, err1 := core.NewClient(ctx, opts...)
fmt.Println(err1)
// 获取平台证书访问器
certVisitor := downloader.MgrInstance().GetCertificateVisitor(mchID)
handler := notify.NewNotifyHandler(mchAPIv3Key, verifiers.NewSHA256WithRSAVerifier(certVisitor))
transaction := new(payments.Transaction)
notifyReq, err := handler.ParseNotifyRequest(context.Background(), request, transaction)
获取平台证书后解密报错:
not valid wechatpay notify request: validate verify fail serial=[***************] request-id=[] err=verifty signature with public key err:crypto/rsa: verification error
红色为实际报错信息
查询文档发现 是在之前使用 ioutil.ReadAll(r.Body) 读取请求数据造成的
开发时要尤其注意:不要在ParseNotifyRequest前获取http数据!!!
仅此记录~