From 8d421a8adcc133ffae8ccb43fb297b3edb5772a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=AD=90=E9=93=AD?= Date: Thu, 6 Mar 2025 18:09:31 +0800 Subject: [PATCH] cmb --- internal/biz/cmb/consume.go | 17 +++++++++++++++-- internal/biz/mixrepos/cmb.go | 1 + internal/data/mixrepoimpl/cmb.go | 20 ++++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/internal/biz/cmb/consume.go b/internal/biz/cmb/consume.go index 17c44d7..f25c521 100644 --- a/internal/biz/cmb/consume.go +++ b/internal/biz/cmb/consume.go @@ -147,7 +147,20 @@ func (v *Cmb) NotifyConsume(ctx context.Context, order *bo.OrderBo, orderOutRequ if err != nil { return v.OrderNotifyRepo.Fail(ctx, orderNotify.ID, err.Error()) } - responses, _ := json.Marshal(x) - return v.OrderNotifyRepo.Success(ctx, orderNotify.ID, string(responses)) + bizStr, err := v.CmbMixRepo.VerifyResponse(ctx, x) + if err != nil { + return v.OrderNotifyRepo.Fail(ctx, orderNotify.ID, err.Error()) + } + + var s *v1.CmbNotifyReply + if err = json.Unmarshal([]byte(bizStr), &s); err != nil { + return v.OrderNotifyRepo.Fail(ctx, orderNotify.ID, err.Error()) + } + + if s.RespCode != vo.CmbResponseStatusSuccess.GetValue() { + return v.OrderNotifyRepo.Fail(ctx, orderNotify.ID, s.RespMsg) + } + + return v.OrderNotifyRepo.Success(ctx, orderNotify.ID, bizStr) } diff --git a/internal/biz/mixrepos/cmb.go b/internal/biz/mixrepos/cmb.go index b772e43..2c7a939 100644 --- a/internal/biz/mixrepos/cmb.go +++ b/internal/biz/mixrepos/cmb.go @@ -7,6 +7,7 @@ import ( ) type CmbMixRepo interface { + VerifyResponse(ctx context.Context, req *v1.CmbReply) (string, error) OrderVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbOrderRequest, error) ProductQueryVerify(ctx context.Context, req *v1.CmbRequest) (*v1.CmbQueryProductRequest, error) GetMockRequest(ctx context.Context, bizContent string) (*v1.CmbRequest, error) diff --git a/internal/data/mixrepoimpl/cmb.go b/internal/data/mixrepoimpl/cmb.go index 5f1bd96..b232e72 100644 --- a/internal/data/mixrepoimpl/cmb.go +++ b/internal/data/mixrepoimpl/cmb.go @@ -131,6 +131,26 @@ func (s *CmbMixRepoImpl) GetMockRequest(_ context.Context, bizContent string) (* return req, nil } +func (s *CmbMixRepoImpl) VerifyResponse(_ context.Context, req *v1.CmbReply) (string, error) { + str := cmb.SortStructStr(req) + + b, err := cmb.Verify(s.bc.Cmb.CmbSm2Puk, str, req.Sign) + if err != nil { + return "", err + } + + if !b { + return "", errors.New("签名验证失败") + } + + bizStr, err := cmb.Decrypt(s.bc.Cmb.Sm2Prk, req.EncryptBody) + if err != nil { + return "", err + } + + return bizStr, nil +} + func (s *CmbMixRepoImpl) GetResponse(_ context.Context, reqBo *bo.CmbResponseBo) (*v1.CmbReply, error) { reply := &v1.CmbReply{