From d5460e9415f2b44ef0cb8848e733ecb71fe9b492 Mon Sep 17 00:00:00 2001 From: ziming Date: Thu, 26 Mar 2026 10:44:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=87=E6=8D=A2=E4=B8=BB=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wechatrepoimpl/bank_multi_activity.go | 14 ++++++++++-- .../pkg/wechat/srv/marketing/marketing.go | 8 +++---- internal/pkg/wechat/utils/aes_test.go | 22 +++++++++++++++++++ internal/pkg/wechat/utils/wxpay_utility.go | 17 +++++++++----- 4 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 internal/pkg/wechat/utils/aes_test.go diff --git a/internal/data/wechatrepoimpl/bank_multi_activity.go b/internal/data/wechatrepoimpl/bank_multi_activity.go index 58bd146..f0c9b00 100644 --- a/internal/data/wechatrepoimpl/bank_multi_activity.go +++ b/internal/data/wechatrepoimpl/bank_multi_activity.go @@ -66,14 +66,24 @@ func (w *BankMultiActivityImpl) Notify(ctx context.Context, mchId string, header return } - decodeBodyStr, err := t.Notify(ctx, headers, respBody) + body, decodeBodyStr, err := t.Notify(ctx, headers, respBody) if err != nil { return } + var plainText bo.PlainText if err = json.Unmarshal([]byte(decodeBodyStr), &response); err != nil { return nil, err } - return + return &bo.WechatVoucherNotifyBo{ + ID: body.Id, + CreateTime: body.CreateTime, + ResourceType: body.ResourceType, + EventType: body.EventType, + Summary: body.Summary, + //OriginalType: body.OriginalType, + //AssociatedData: body.AssociatedData, + PlainText: plainText, + }, nil } diff --git a/internal/pkg/wechat/srv/marketing/marketing.go b/internal/pkg/wechat/srv/marketing/marketing.go index 71e0894..362776a 100644 --- a/internal/pkg/wechat/srv/marketing/marketing.go +++ b/internal/pkg/wechat/srv/marketing/marketing.go @@ -63,12 +63,12 @@ func (srv *Marketing) Query(appId, openId, couponId string) (response *SendResp, } // Notify . -func (srv *Marketing) Notify(_ context.Context, headers *http.Header, respBody []byte) (response string, err error) { +func (srv *Marketing) Notify(_ context.Context, headers *http.Header, respBody []byte) (body *utils.WxNotifyBody, response string, err error) { - bizStr, err := srv.GetDecodeBody(headers, respBody) + wxNotifyBody, bizStr, err := srv.GetDecodeBody(headers, respBody) if err != nil { - return "", err + return nil, "", err } - return bizStr, nil + return wxNotifyBody, bizStr, nil } diff --git a/internal/pkg/wechat/utils/aes_test.go b/internal/pkg/wechat/utils/aes_test.go new file mode 100644 index 0000000..7a4e4de --- /dev/null +++ b/internal/pkg/wechat/utils/aes_test.go @@ -0,0 +1,22 @@ +package utils + +import ( + "testing" +) + +func TestAes(t *testing.T) { + + aesUtil, err := NewAesUtil("d9af70585b18ae206d981548c766563f") + if err != nil { + t.Errorf("NewAesUtil() error = %v", err) + return + } + + gotResponse, err := aesUtil.DecryptToString("coupon", "pV96KsdLrSAd", "IfJmKJnBYezruwmk+IA+ENQBn13oWiLR1YnYi3bhYaqYreaXwFcFWbnnQjWfh8RDF36S1v+H1eLj0OtiQVDveLJ9vOcCrtr0M8bkV6NpRN7amqcf02vg+xLcs6UiZDedkN353nMnVVY1SAyuJj0AjKTUJrMhPNtxzdPpL/A3bMVCHrw4sqUItAOsDWVyJ5Kb09BEbdNOesmFkCc+Pcqmr554UHXzjQxzYimMpdbZ8OCovEy6JY1jnbxyiduDI7XBiTvxLr5CzLGlxNk1tIHUSrrDnRzUCpFJzNETgcrF3JWvQVAPThelGnTLN/TT3/pyM7/Kz60YNGaSbJTNKOtxbLXopk72x5hlt45fgrueP+RsnVQWmjULJ0AVEVmPNtlHTYRw7WV0cGwwrF7CCSDifYPed9QZPU1+awVtnGb3If53l109HojJiJB7Y0C/ZPX/vH/KLmtUx+10YKIFOo3vYnxEBV5lv4D5ZqXn4gOOtufVH/URYqgRqnzNFqJV6sW2qP6K9AgBhe/BO4AoeDDHG00XP89XFbeHmR2zZ019jBapq92YkvDVtQc2oLr9MWPoHJUhkmApwB6AmOK7ldWJ14P/Fws3/zBzCxVSlQsgLoDyBKm461ZnA6k09c+hffhTutLt89HYv+pqA1nukdTGuCWqPqUgx0AsK5i1CngrBQZJwc7+ylpakpOrX8oulyuA3So65hgMuqgl5dgkR0e8nvjjv7dVl0aRkqTZt3VL7BB1xwGqbvO3aTEuqqPrFQKLpnaY5Gz64dgg6huQFOBnZww=") + if err != nil { + t.Errorf("DecryptToString() error = %v", err) + return + } + + t.Log(gotResponse) +} diff --git a/internal/pkg/wechat/utils/wxpay_utility.go b/internal/pkg/wechat/utils/wxpay_utility.go index 15de6d0..95ba98f 100644 --- a/internal/pkg/wechat/utils/wxpay_utility.go +++ b/internal/pkg/wechat/utils/wxpay_utility.go @@ -576,10 +576,10 @@ func (srv *MchConfig) Verify(request *http.Request) (string, error) { return EncryptOAEPWithPublicKey(string(respBody), srv.wechatPayPublicKey) } -func (srv *MchConfig) GetDecodeBody(headers *http.Header, respBody []byte) (string, error) { +func (srv *MchConfig) GetDecodeBody(headers *http.Header, respBody []byte) (*WxNotifyBody, string, error) { if respBody == nil { - return "", fmt.Errorf("request HttpBody is nil") + return nil, "", fmt.Errorf("request HttpBody is nil") } err := ValidateResponse( @@ -589,20 +589,25 @@ func (srv *MchConfig) GetDecodeBody(headers *http.Header, respBody []byte) (stri respBody, ) if err != nil { - return "", err + return nil, "", err } var wxNotifyBody WxNotifyBody if err = json.Unmarshal(respBody, &wxNotifyBody); err != nil { - return "", err + return nil, "", err } aesUtil, err := NewAesUtil(srv.aesKey) if err != nil { - return "", err + return nil, "", err } - return aesUtil.DecryptToString(wxNotifyBody.Resource.AssociatedData, wxNotifyBody.Resource.Nonce, wxNotifyBody.Resource.Ciphertext) + decryptedText, err := aesUtil.DecryptToString(wxNotifyBody.Resource.AssociatedData, wxNotifyBody.Resource.Nonce, wxNotifyBody.Resource.Ciphertext) + if err != nil { + return nil, "", err + } + + return &wxNotifyBody, decryptedText, nil } // BuildSortedQueryString 函数接受一个 map,返回按照字段名排序后的 URL 键值对格式字符串