wechatpay-apiv3 / wechatpay-go

微信支付 APIv3 的官方 Go Library
https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/index.shtml
Apache License 2.0
1.03k stars 141 forks source link

支付回调通知空指针 #186

Closed chenyangguang closed 5 months ago

chenyangguang commented 1 year ago

这段代码

func ExampleHandler_ParseNotifyRequest_transaction() {
    var handler notify.Handler
    var request *http.Request

    content := new(payments.Transaction)
    notifyReq, err := handler.ParseNotifyRequest(context.Background(), request, content)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 处理通知内容
    fmt.Println(notifyReq.Summary)
    fmt.Println(content)
}
notifyReq, err := handler.ParseNotifyRequest(context.Background(), request, content)

这行会导致空指针

并且用 http.request替代里面的值之后。报错:

unsupported Wechatpay-Signature-Type: WECHATPAY2-SHA256-RSA2048

一看是这个算法套件没初始化,

// NewRSANotifyHandler 创建一个 RSA 的通知处理器,它包含 AES-GCM 解密能力 func NewRSANotifyHandler(apiV3Key string, verifier auth.Verifier) (*Handler, error) { c, err := aes.NewCipher([]byte(apiV3Key)) if err != nil { return nil, err } aesgcm, err := cipher.NewGCM(c) if err != nil { return nil, err }

return NewEmptyHandler().AddRSAWithAESGCM(verifier, aesgcm), nil

}

但是这个算法怎么用?方便透露一个栗子么

` // Package auth 微信支付 API v3 Go SDK 安全验证相关接口 package auth

import "context"

// Verifier 数字签名验证器 type Verifier interface { Verify(ctx context.Context, serial, message, signature string) error // 对签名信息进行验证 }

` 请问这个 messsge 是啥?

EmmetZC commented 1 year ago

handler 如何初始化可以看一下 README.md#回调通知的验签与解密