package service import ( "encoding/json" "fmt" "github.com/go-kratos/kratos/v2/transport/http" "strings" "time" v1 "voucher/api/v1" "voucher/internal/pkg/cmb" "voucher/internal/pkg/helper" ) func (s *VoucherService) CmbOrderMock(ctx http.Context) error { var req *v1.CmbOrderRequest if err := ctx.BindForm(&req); err != nil { return err } bizJsonBytes, err := json.Marshal(req) if err != nil { return err } bizJsonStr := string(bizJsonBytes) // 我们的sm2 公钥加密 // 请求到我们这边 使用 我们的私钥解密 encryptBody, err := cmb.Encrypt(s.bc.Cmb.Sm2Puk, bizJsonStr) if err != nil { return err } date := time.Now().Format("20060102150405") reply := &v1.CmbRequest{ Mid: s.bc.Cmb.Mid, Aid: s.bc.Cmb.Aid, Date: date, Random: string(cmb.RandomBytes(16)), KeyAlias: s.bc.Cmb.KeyAlias, CmbKeyAlias: s.bc.Cmb.CmbKeyAlias, EncryptBody: encryptBody, Sign: "", } kvRows := helper.SortStructFieldsByKey(reply) var strToBeSigned strings.Builder for _, kv := range kvRows { if kv.Key == "sign" { continue } if kv.Value == "" { continue } strToBeSigned.WriteString(fmt.Sprintf("%s=%s&", kv.Key, kv.Value)) } str := fmt.Sprintf("/voucher/cmb/v1/order?%s", strings.TrimRight(strToBeSigned.String(), "&")) sing, err := cmb.Sign(s.bc.Cmb.CmbSm2Pik, str) if err != nil { return err } reply.Sign = sing return ctx.JSON(200, reply) } func (s *VoucherService) CmbProductQueryMock(ctx http.Context) error { var req v1.CmbQueryProductRequest if err := ctx.BindForm(&req); err != nil { return err } if err := req.Validate(); err != nil { return err } reply := &v1.CmbRequest{} return ctx.JSON(200, reply) }