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数据!!! 

仅此记录~