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.
64 lines
1.6 KiB
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()
|
|
}
|