验签优化
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