// 组合参数
params := []string{
fmt.Sprintf("pid=%d", pid),
fmt.Sprintf("trade_no=%s", order.TradeNo),
fmt.Sprintf("out_trade_no=%s", order.OutTradeNo),
fmt.Sprintf("type=%s", Type),
fmt.Sprintf("name=%s", "product"),
fmt.Sprintf("money=%.2f", order.Money),
fmt.Sprintf("trade_status=%s", status),
}
// 排序 ,将发送或接收到的所有参数按照参数名ASCII码从小到大排序(a-z)
sort.Strings(params)
//将排序后的参数拼接成URL键值对的格式
signatureString := strings.Join(params, "&")
// 再将拼接好的字符串与商户密钥KEY进行MD5加密
signature := md5.Sum([]byte(signatureString + key))
// 将字节数组转换成十六进制字符串表示的字符串
signatureStr := hex.EncodeToString(signature[:])
// 或者使用fmt.Println(fmt.Sprintf("%x", signature)) 转换为十六进制字符串