diff --git a/internal/biz/cmb/consume.go b/internal/biz/cmb/consume.go index bd71705..7850c09 100644 --- a/internal/biz/cmb/consume.go +++ b/internal/biz/cmb/consume.go @@ -119,7 +119,7 @@ func (v *Cmb) NotifyConsume(ctx context.Context, order *bo.OrderBo, orderOutRequ return err } - request, err := v.CmbMixRepo.GetRequest(ctx, &bo.CmbRequestBo{ + request, err := v.CmbMixRepo.GetCmbRequest(ctx, &bo.CmbRequestBo{ FuncName: vo.CmbNotifyFuncName, BizContent: string(bizJsonBytes), }) diff --git a/internal/biz/mixrepos/cmb.go b/internal/biz/mixrepos/cmb.go index ca40b72..87d41cb 100644 --- a/internal/biz/mixrepos/cmb.go +++ b/internal/biz/mixrepos/cmb.go @@ -10,6 +10,7 @@ import ( type CmbMixRepo interface { OrderVerify(ctx context.Context, req *v1.CmbRequest, funcName vo.CmbFuncName) (*v1.CmbOrderRequest, error) ProductQueryVerify(ctx context.Context, req *v1.CmbRequest, funcName vo.CmbFuncName) (*v1.CmbQueryProductRequest, error) - GetRequest(ctx context.Context, reqBo *bo.CmbRequestBo) (*v1.CmbRequest, error) + GetRequest(ctx context.Context, bizContent string) (*v1.CmbRequest, error) + GetCmbRequest(_ context.Context, reqBo *bo.CmbRequestBo) (*v1.CmbRequest, error) GetResponse(ctx context.Context, reqBo *bo.CmbResponseBo) (*v1.CmbReply, error) } diff --git a/internal/data/mixrepoimpl/cmb.go b/internal/data/mixrepoimpl/cmb.go index 2390bf4..a857c8f 100644 --- a/internal/data/mixrepoimpl/cmb.go +++ b/internal/data/mixrepoimpl/cmb.go @@ -70,7 +70,7 @@ func (s *CmbMixRepoImpl) Verify(_ context.Context, req *v1.CmbRequest, funcName return bizStr, nil } -func (s *CmbMixRepoImpl) GetRequest(_ context.Context, reqBo *bo.CmbRequestBo) (*v1.CmbRequest, error) { +func (s *CmbMixRepoImpl) GetCmbRequest(_ context.Context, reqBo *bo.CmbRequestBo) (*v1.CmbRequest, error) { encryptBody, err := cmb.Encrypt(s.bc.Cmb.Sm2Puk, reqBo.BizContent) if err != nil { @@ -88,11 +88,7 @@ func (s *CmbMixRepoImpl) GetRequest(_ context.Context, reqBo *bo.CmbRequestBo) ( Sign: "", } - str := cmb.SortStructStr(req) - - if len(reqBo.FuncName) > 0 { - str = fmt.Sprintf("%s?%s", reqBo.FuncName, str) - } + str := fmt.Sprintf("%s?%s", reqBo.FuncName, cmb.SortStructStr(req)) sing, err := cmb.Sign(s.bc.Cmb.CmbSm2Pik, str) if err != nil { @@ -104,6 +100,36 @@ func (s *CmbMixRepoImpl) GetRequest(_ context.Context, reqBo *bo.CmbRequestBo) ( return req, nil } +func (s *CmbMixRepoImpl) GetRequest(_ context.Context, bizContent string) (*v1.CmbRequest, error) { + + encryptBody, err := cmb.Encrypt(s.bc.Cmb.Sm2Puk, bizContent) + if err != nil { + return nil, err + } + + req := &v1.CmbRequest{ + Mid: s.bc.Cmb.Mid, + Aid: s.bc.Cmb.Aid, + Date: time.Now().Format("20060102150405"), + Random: string(cmb.RandomBytes(16)), + KeyAlias: s.bc.Cmb.KeyAlias, + CmbKeyAlias: s.bc.Cmb.CmbKeyAlias, + EncryptBody: encryptBody, + Sign: "", + } + + str := cmb.SortStructStr(req) + + sign, err := cmb.Sign(s.bc.Cmb.CmbSm2Pik, str) + if err != nil { + return nil, err + } + + req.Sign = sign + + return req, nil +} + func (s *CmbMixRepoImpl) GetResponse(_ context.Context, reqBo *bo.CmbResponseBo) (*v1.CmbReply, error) { reply := &v1.CmbReply{ diff --git a/internal/service/cmb_mock.go b/internal/service/cmb_mock.go index 160f9bc..dc82319 100644 --- a/internal/service/cmb_mock.go +++ b/internal/service/cmb_mock.go @@ -4,8 +4,6 @@ import ( "encoding/json" "github.com/go-kratos/kratos/v2/transport/http" v1 "voucher/api/v1" - "voucher/internal/biz/bo" - "voucher/internal/biz/vo" ) func (s *VoucherService) CmbOrderMock(ctx http.Context) error { @@ -20,10 +18,7 @@ func (s *VoucherService) CmbOrderMock(ctx http.Context) error { return err } - reply, err := s.CmbMixRepo.GetRequest(ctx, &bo.CmbRequestBo{ - FuncName: vo.CmbOrderFuncName, - BizContent: string(bizJsonBytes), - }) + reply, err := s.CmbMixRepo.GetRequest(ctx, string(bizJsonBytes)) if err != nil { return err } @@ -43,10 +38,10 @@ func (s *VoucherService) CmbProductQueryMock(ctx http.Context) error { return err } - reply, err := s.CmbMixRepo.GetRequest(ctx, &bo.CmbRequestBo{ - FuncName: vo.CmbProductQueryFuncName, - BizContent: string(bizJsonBytes), - }) + reply, err := s.CmbMixRepo.GetRequest(ctx, string(bizJsonBytes)) + if err != nil { + return err + } if err != nil { return err }