cmb
This commit is contained in:
parent
1ee31eea6f
commit
d551c83294
|
|
@ -95,15 +95,6 @@ func (v *Cmb) NotifyConsume(ctx context.Context, order *bo.OrderBo, orderOutRequ
|
|||
}
|
||||
|
||||
request := &v1.CmbNotifyRequest{
|
||||
Mid: "",
|
||||
Aid: "",
|
||||
Date: "",
|
||||
Random: "",
|
||||
KeyAlias: "",
|
||||
CmbKeyAlias: "",
|
||||
EncryptBody: "",
|
||||
Sign: "",
|
||||
|
||||
Ticket: orderWechat.OrderNo,
|
||||
Status: "",
|
||||
TransDate: "",
|
||||
|
|
|
|||
|
|
@ -1,17 +1,11 @@
|
|||
package helper
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type KeyValue struct {
|
||||
Key string
|
||||
Value string
|
||||
}
|
||||
|
||||
func LowercaseFirstLetter(s string) string {
|
||||
if len(s) == 0 {
|
||||
return s
|
||||
|
|
@ -20,43 +14,47 @@ func LowercaseFirstLetter(s string) string {
|
|||
return firstLetter + s[1:]
|
||||
}
|
||||
|
||||
func SortStruct(data any) []KeyValue {
|
||||
v := reflect.ValueOf(data).Elem()
|
||||
t := v.Type()
|
||||
var kv []KeyValue
|
||||
for i := 0; i < v.NumField(); i++ {
|
||||
field := v.Field(i)
|
||||
key := LowercaseFirstLetter(t.Field(i).Name)
|
||||
value := fmt.Sprintf("%v", field.Interface())
|
||||
kv = append(kv, KeyValue{Key: key, Value: value})
|
||||
}
|
||||
sort.SliceStable(kv, func(i, j int) bool {
|
||||
return kv[i].Key < kv[j].Key
|
||||
})
|
||||
return kv
|
||||
// FieldKeyValue 定义一个结构体用于存储字段名和对应的值
|
||||
type FieldKeyValue struct {
|
||||
Key string
|
||||
Value interface{}
|
||||
}
|
||||
|
||||
func SortStructJsonTag(data any) []KeyValue {
|
||||
// 获取 data 结构体的类型和值
|
||||
dataType := reflect.TypeOf(data).Elem()
|
||||
dataValue := reflect.ValueOf(data).Elem()
|
||||
|
||||
var kv []KeyValue
|
||||
for i := 0; i < dataType.NumField(); i++ {
|
||||
field := dataType.Field(i)
|
||||
// SortStructFieldsByKey 按照键名对结构体导出字段进行字典序排序,并返回键值对切片
|
||||
func SortStructFieldsByKey(s interface{}) []FieldKeyValue {
|
||||
// 获取结构体的反射值
|
||||
value := reflect.ValueOf(s)
|
||||
// 如果传入的是指针,获取指针指向的值
|
||||
if value.Kind() == reflect.Ptr {
|
||||
value = value.Elem()
|
||||
}
|
||||
// 检查是否为结构体
|
||||
if value.Kind() != reflect.Struct {
|
||||
return nil
|
||||
}
|
||||
// 获取结构体的类型
|
||||
typ := value.Type()
|
||||
// 存储字段名和对应的值
|
||||
fieldKVs := make([]FieldKeyValue, 0, typ.NumField())
|
||||
// 遍历结构体的所有字段
|
||||
for i := 0; i < typ.NumField(); i++ {
|
||||
field := typ.Field(i)
|
||||
// 只处理导出的字段(PkgPath 为空表示导出字段)
|
||||
if field.PkgPath == "" {
|
||||
// 获取字段名
|
||||
fieldName := field.Name
|
||||
// 获取字段的值
|
||||
fieldValue := dataValue.FieldByName(field.Name).Interface()
|
||||
// 获取 JSON 字段名
|
||||
jsonTagName := field.Tag.Get("json")
|
||||
if jsonTagName != "" {
|
||||
kv = append(kv, KeyValue{Key: jsonTagName, Value: fmt.Sprintf("%v", fieldValue)})
|
||||
}
|
||||
}
|
||||
|
||||
// 排序
|
||||
sort.SliceStable(kv, func(i, j int) bool {
|
||||
return kv[i].Key < kv[j].Key
|
||||
fieldValue := value.Field(i).Interface()
|
||||
// 将字段名和对应的值存储到切片中
|
||||
fieldKVs = append(fieldKVs, FieldKeyValue{
|
||||
Key: LowercaseFirstLetter(fieldName),
|
||||
Value: fieldValue,
|
||||
})
|
||||
|
||||
return kv
|
||||
}
|
||||
}
|
||||
// 对键值对切片按照键名进行字典序排序
|
||||
sort.Slice(fieldKVs, func(i, j int) bool {
|
||||
return fieldKVs[i].Key < fieldKVs[j].Key
|
||||
})
|
||||
return fieldKVs
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/go-kratos/kratos/v2/transport/http"
|
||||
"strings"
|
||||
|
|
@ -12,16 +13,21 @@ import (
|
|||
|
||||
func (s *VoucherService) CmbOrderMock(ctx http.Context) error {
|
||||
|
||||
var req v1.CmbOrderRequest
|
||||
var req *v1.CmbOrderRequest
|
||||
if err := ctx.BindForm(&req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
bizJson := req.String()
|
||||
bizJsonBytes, err := json.Marshal(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
bizJsonStr := string(bizJsonBytes)
|
||||
|
||||
// 我们的sm2 公钥加密
|
||||
// 请求到我们这边 使用 我们的私钥解密
|
||||
encryptBody, err := cmb.Encrypt(s.bc.Cmb.Sm2Puk, bizJson)
|
||||
encryptBody, err := cmb.Encrypt(s.bc.Cmb.Sm2Puk, bizJsonStr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -39,7 +45,7 @@ func (s *VoucherService) CmbOrderMock(ctx http.Context) error {
|
|||
Sign: "",
|
||||
}
|
||||
|
||||
kvRows := helper.SortStructJsonTag(reply)
|
||||
kvRows := helper.SortStructFieldsByKey(reply)
|
||||
|
||||
var strToBeSigned strings.Builder
|
||||
for _, kv := range kvRows {
|
||||
|
|
|
|||
Loading…
Reference in New Issue