|
|
@@ -156,26 +156,28 @@ func getMd5Sign(callbackKey string, params map[string]string) string {
|
|
|
|
|
|
func getGNMd5Sign(md5Key string, params map[string]string) string {
|
|
|
// 删除参数中的 sign 字段
|
|
|
- delete(params, "md5Sign")
|
|
|
+ //delete(params, "md5Sign")
|
|
|
|
|
|
// 按参数名进行升序排序
|
|
|
- var keys []string
|
|
|
- for key := range params {
|
|
|
- keys = append(keys, key)
|
|
|
- }
|
|
|
- sort.Strings(keys)
|
|
|
+ //var keys []string
|
|
|
+ //for key := range params {
|
|
|
+ // keys = append(keys, key)
|
|
|
+ //}
|
|
|
+ //sort.Strings(keys)
|
|
|
|
|
|
// 拼接参数和值
|
|
|
var signKey strings.Builder
|
|
|
- for _, key := range keys {
|
|
|
- signKey.WriteString(key)
|
|
|
- signKey.WriteString("=")
|
|
|
- signKey.WriteString(params[key])
|
|
|
- signKey.WriteString("&")
|
|
|
- }
|
|
|
-
|
|
|
+ //for _, key := range keys {
|
|
|
+ // signKey.WriteString(key)
|
|
|
+ // signKey.WriteString("=")
|
|
|
+ // signKey.WriteString(params[key])
|
|
|
+ // signKey.WriteString("&")
|
|
|
+ //}
|
|
|
+ signKey.WriteString(params["nt_data"])
|
|
|
+ signKey.WriteString(params["sign"])
|
|
|
// 添加回调密钥
|
|
|
- signKey.WriteString("md5key=" + md5Key)
|
|
|
+ signKey.WriteString(md5Key)
|
|
|
+ //util.InfoF("aaaaa:%v", signKey.String())
|
|
|
|
|
|
// 计算 MD5
|
|
|
hash := md5.Sum([]byte(signKey.String()))
|
|
|
@@ -269,6 +271,19 @@ func WebPayHwQuickNotify(c *gin.Context) {
|
|
|
c.String(http.StatusOK, "SUCCESS")
|
|
|
}
|
|
|
|
|
|
+type Xml struct {
|
|
|
+ Quick xml.Name `xml:"quicksdk_message"`
|
|
|
+ Message2 Message `xml:"message"`
|
|
|
+}
|
|
|
+
|
|
|
+type Message struct {
|
|
|
+ Uid string `xml:"channel_uid"`
|
|
|
+ CpOrderId string `xml:"game_order"`
|
|
|
+ OrderNo string `xml:"order_no"`
|
|
|
+ Amount string `xml:"amount"`
|
|
|
+ Extras string `xml:"extras_params"`
|
|
|
+}
|
|
|
+
|
|
|
func WebPayGNQuickNotify(c *gin.Context) {
|
|
|
//util.DebugF("支付回调信息:%v", c.Request.PostForm)
|
|
|
params := make(map[string]string)
|
|
|
@@ -281,7 +296,7 @@ func WebPayGNQuickNotify(c *gin.Context) {
|
|
|
for key, value := range c.Request.PostForm {
|
|
|
params[key] = value[0] // 假设每个参数只有一个值
|
|
|
}
|
|
|
- sign := params["sign"]
|
|
|
+ sign := params["md5Sign"]
|
|
|
//info2 := params["extrasParams"]
|
|
|
//info := strings.ReplaceAll(info2, "\\", "")
|
|
|
//var extras Extras
|
|
|
@@ -299,47 +314,51 @@ func WebPayGNQuickNotify(c *gin.Context) {
|
|
|
// return
|
|
|
// }
|
|
|
//} else {
|
|
|
- util.InfoF("android 支付签名认证:%v", sign)
|
|
|
- newSign := getGNMd5Sign("siqvxn2fs5v59c0ndu1p9vdrc3ccnorf", params)
|
|
|
+ //params["nt_data"] = decryptData(params["nt_data"], "27564251240220692046169876879712")
|
|
|
+ //params["sign"] = decryptData(params["nt_data"], "27564251240220692046169876879712")
|
|
|
+ //params["nt_data"] = decryptData(params["nt_data"], "27564251240220692046169876879712")
|
|
|
+ //util.InfoF("android 支付签名认证:%v", sign)
|
|
|
+ newSign := getGNMd5Sign("o2wamscu5ncshxlhi1qhchca5uy9hsd6", params)
|
|
|
if newSign != sign {
|
|
|
- util.ErrorF("签名错误%v", sign)
|
|
|
+ util.ErrorF("签名错误%v,newSign:%v", sign, newSign)
|
|
|
c.String(http.StatusOK, "FAILED")
|
|
|
return
|
|
|
}
|
|
|
- data := decryptData(params["nt_data"], "27564251240220692046169876879712")
|
|
|
+ data := decryptData(params["nt_data"], "91741736721678744361414937890230")
|
|
|
//}
|
|
|
- m := make(map[string]string, 0)
|
|
|
- err := xml.Unmarshal([]byte(data), m)
|
|
|
+ var x Xml
|
|
|
+ err := xml.Unmarshal([]byte(data), &x)
|
|
|
if err != nil {
|
|
|
- util.ErrorF("data解析错误%v", data)
|
|
|
- c.String(http.StatusOK, "FAILED")
|
|
|
- return
|
|
|
- }
|
|
|
- util.DebugF("data m:%v", m)
|
|
|
- uid := m["channel_uid"]
|
|
|
- cpOrderId := m["game_order"]
|
|
|
- orderNo := m["order_no"]
|
|
|
- payAmount := m["amount"]
|
|
|
- status := m["status"]
|
|
|
- if status != "0" {
|
|
|
- util.ErrorF("uid:%v 充值失败 status:%v", uid, status)
|
|
|
+ util.ErrorF("data解析错误%v,err:%v", data, err)
|
|
|
c.String(http.StatusOK, "FAILED")
|
|
|
return
|
|
|
}
|
|
|
+ util.InfoF("data m:%v", x)
|
|
|
+ uid := x.Message2.Uid
|
|
|
+ cpOrderId := x.Message2.CpOrderId
|
|
|
+ orderNo := x.Message2.OrderNo
|
|
|
+ payAmount := x.Message2.Amount
|
|
|
+ e := x.Message2.Extras
|
|
|
+ //status := m["status"]
|
|
|
+ //if status != "0" {
|
|
|
+ // util.ErrorF("uid:%v 充值失败 status:%v", uid, status)
|
|
|
+ // c.String(http.StatusOK, "FAILED")
|
|
|
+ // return
|
|
|
+ //}
|
|
|
//usdAmount := c.PostForm("usdAmount")
|
|
|
ntfData := &WebNotifyData{}
|
|
|
ntfData.CpOrderId = cpOrderId
|
|
|
ntfData.SdkOrderId = orderNo
|
|
|
ntfData.PayTime = uint64(util.GetTimeSeconds())
|
|
|
ntfData.PayChannel = "qk_gn"
|
|
|
- util.InfoF("paycallback uid=%v cpOrderNo=%v orderNo=%v payAmount=%v payCurrency=%v payType=%v",
|
|
|
- uid, cpOrderId, orderNo, payAmount)
|
|
|
+ util.InfoF("paycallback uid=%v cpOrderNo=%v orderNo=%v payAmount=%v payCurrency=%v payType=%v extras:%v",
|
|
|
+ uid, cpOrderId, orderNo, payAmount, e)
|
|
|
f64, err := strconv.ParseFloat(payAmount, 32)
|
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
|
return
|
|
|
}
|
|
|
- webPayNotify(ntfData, float32(f64), c)
|
|
|
+ res := webPayNotify(ntfData, float32(f64), c)
|
|
|
|
|
|
//// 简单粗暴,直接给其他服转发,不需要确认是哪个服
|
|
|
//payPostRouter := service.GetServiceConfig().SDKConfig.PayPostRouter
|
|
|
@@ -357,7 +376,7 @@ func WebPayGNQuickNotify(c *gin.Context) {
|
|
|
//util.WarnF("paycallback routerString:%v\n", routerString)
|
|
|
//go sendPosts(payPostRouter, routerString)
|
|
|
|
|
|
- c.String(http.StatusOK, "SUCCESS")
|
|
|
+ c.String(http.StatusOK, res)
|
|
|
}
|
|
|
|
|
|
func encryptData(code_data string, callback_key string) string {
|