81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package service
|
|
|
|
import (
|
|
"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
|
|
}
|
|
|
|
bizJson := req.String()
|
|
|
|
// 我们的sm2 公钥加密
|
|
// 请求到我们这边 使用 我们的私钥解密
|
|
encryptBody, err := cmb.Encrypt(s.bc.Cmb.Sm2Puk, bizJson)
|
|
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.SortStructJsonTag(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)
|
|
}
|