54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package app
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
// PayOrderRequest 获取订单支付请求数据
|
|
type PayOrderRequest struct {
|
|
OrderId string `json:"orderId" label:"订单编号" validate:"required"` // 订单id
|
|
}
|
|
|
|
// PayOrderDataResponse 获取订单支付返回数据-data
|
|
type PayOrderDataResponse struct {
|
|
AppId string `json:"appid"` // 公众号id
|
|
Total int `json:"total"` // 订单总金额(精确到分)
|
|
Description string `json:"description"` // 订单描述
|
|
OpenId string `json:"openid"` // 下单用户
|
|
OutTradeNo string `json:"out_trade_no"` // 商户订单
|
|
Attach string `json:"attach"` // 附加信息
|
|
NotifyUrl string `json:"notify_url"` // 异步接收微信支付结果通知的回调地址
|
|
GoodName string `json:"goodName"` // 商品名称
|
|
}
|
|
|
|
// VerifySignature 验证签名
|
|
func VerifySignature(req PayOrderRequest, requestSign string) error {
|
|
// 将 JSON 数据编码为字节数组
|
|
jsonData, err := json.Marshal(req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
maps := make(map[string]interface{})
|
|
err = json.Unmarshal(jsonData, &maps)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 生成签名
|
|
sign, err := GenSignature(maps)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Println(sign)
|
|
// 对比签名
|
|
if sign != requestSign {
|
|
return errors.New("签名错误")
|
|
}
|
|
|
|
return nil
|
|
}
|