You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wt-game/wt_sdk/refund_sign.go

64 lines
1.6 KiB
Go

package wt_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()
}