验签优化
parent
f2cc920537
commit
afc205d9ac
@ -0,0 +1,63 @@
|
||||
package sdk
|
||||
|
||||
import (
|
||||
"gitea.weitiangame.com/sdk/wt-game/utils"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// OrderRefund 表示一个订单退款对象,用于生成签名参数
|
||||
type OrderRefund struct {
|
||||
OutTradeNo string // 订单号
|
||||
RoleId string // 角色ID
|
||||
Status string // 订单状态
|
||||
RefundFee string // 退款金额
|
||||
Timestamp string // 时间戳
|
||||
}
|
||||
|
||||
// RefundSDK 封装了SDK配置和工具方法
|
||||
type RefundSDK struct {
|
||||
SecretKey string // 密钥
|
||||
}
|
||||
|
||||
// 全局变量,用于保存单例实例和线程安全控制
|
||||
var (
|
||||
instance2 *RefundSDK
|
||||
once2 sync.Once // 确保单例实例只初始化一次
|
||||
)
|
||||
|
||||
// NewRefundSDK 返回一个使用密钥初始化的 RefundSDK 单例实例
|
||||
func NewRefundSDK(secretKey string) *RefundSDK {
|
||||
// 使用 sync.Once 确保实例只初始化一次
|
||||
once2.Do(func() {
|
||||
instance2 = &RefundSDK{
|
||||
SecretKey: secretKey,
|
||||
}
|
||||
})
|
||||
return instance2
|
||||
}
|
||||
|
||||
// SignParam 为指定的 OrderRefund 对象生成签名
|
||||
func (sdk *RefundSDK) SignParam(order *OrderRefund) string {
|
||||
// 创建用于签名的参数字符串
|
||||
paramStr := sdk.createFormUrl(order)
|
||||
// 生成MD5签名
|
||||
md5Str := utils.Md5String(paramStr)
|
||||
// 返回大写的签名
|
||||
return strings.ToUpper(md5Str)
|
||||
}
|
||||
|
||||
// createFormUrl 生成用于签名的参数字符串
|
||||
func (sdk *RefundSDK) createFormUrl(order *OrderRefund) string {
|
||||
var builder strings.Builder
|
||||
// 按顺序拼接所有参数
|
||||
builder.WriteString(order.OutTradeNo)
|
||||
builder.WriteString(order.RoleId)
|
||||
builder.WriteString(order.Status)
|
||||
builder.WriteString(order.RefundFee)
|
||||
builder.WriteString(order.Timestamp)
|
||||
// 拼接密钥
|
||||
builder.WriteString(sdk.SecretKey)
|
||||
// 返回拼接后的字符串
|
||||
return builder.String()
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
)
|
||||
|
||||
// Md5String 生成给定字符串的MD5哈希值并返回十六进制字符串
|
||||
func Md5String(str string) string {
|
||||
hash := md5.Sum([]byte(str)) // 计算MD5哈希
|
||||
return hex.EncodeToString(hash[:]) // 转为十六进制字符串并返回
|
||||
}
|
Loading…
Reference in New Issue