创建订单
请求地址:http://orderapi.liangtouyang.com/api/orders/pay
请求名 | 类型 | 参考值 | 备注 | |
appid | String | 100010000 | 后台应用中心获取 | |
type | int | 0 | 0:微信支付 1:支付宝支付 | |
out_trade_no | string | Y1234567989 | 用户订单号 | |
money | string | 1.00 | 付款金额,注意必须是标准的金额格式如1.00 1.01 | |
notify_url | string | 可填可不填 不填则用后台应用内设置的为准 | ||
device | int | 1 | 1:电脑 2:手机 填写的类型会利于接口的返回类型 | |
sign | string | 32位的MD5加密字符串 |
|
计算签名
package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
"net/url"
"sort"
"strings"
)
func generateSign(params map[string]string, secretKey string) string {
// 移除 'sign' 参数
delete(params, "sign")
// 按键名排序
var keys []string
for k := range params {
keys = append(keys, k)
}
sort.Strings(keys)
// 拼接字符串
var sb strings.Builder
for _, k := range keys {
sb.WriteString(k)
sb.WriteString("=")
sb.WriteString(params[k])
sb.WriteString("&")
}
// 去掉最后的&
paramString := sb.String()
paramString = strings.TrimSuffix(paramString, "&")
// 在拼接的字符串后面加上密钥
paramString += secretKey
// 计算MD5签名
hash := md5.Sum([]byte(paramString))
return hex.EncodeToString(hash[:])
}
func main() {
params := map[string]string{
"appid": "100010000",
"type": "0",
"out_trade_no": "Y1234567989",
"money": "1.00",
"notify_url": "",
"device": "1",
}
secretKey := "your_secret_key_here"
sign := generateSign(params, secretKey)
fmt.Println(sign)
}
查询订单
请求地址:http://orderapi.liangtouyang.com/api/orders/query
请求名 | 类型 | 参考值 | 备注 | |
appid | string | 100010000 | 后台应用处获取 | |
out_trade_no | string | Y123456789 | 用户自己订单号 (二选一) | |
trade_no | string | R201400000000000000 | 平台订单号(二选一) |
查询订单 无需sign计算
验证回调签名
package main
import (
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"net/url"
"sort"
"strings"
)
func verifyCallbackSignature(data map[string]interface{}, secretKey string) bool {
// 提取签名
signature, _ := data["sign"].(string)
delete(data, "sign")
// 排序参数
var keys []string
for k := range data {
keys = append(keys, k)
}
sort.Strings(keys)
// 拼接字符串
var sb strings.Builder
for _, k := range keys {
sb.WriteString(k)
sb.WriteString("=")
sb.WriteString(fmt.Sprintf("%v", data[k]))
sb.WriteString("&")
}
// 去掉最后的&
paramString := sb.String()
paramString = strings.TrimSuffix(paramString, "&")
// 在拼接的字符串后面加上密钥
paramString += secretKey
// 计算MD5签名
hash := md5.Sum([]byte(paramString))
computedSignature := hex.EncodeToString(hash[:])
// 验证签名
return signature == computedSignature
}
func main() {
urlData := `data=%7B%22appid%22%3A100100001%2C%22time%22%3A1713760397%2C%22amount%22%3A%221.
进件地址:两头羊支付