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