|
@@ -8,6 +8,7 @@ import (
|
|
|
"encoding/json"
|
|
"encoding/json"
|
|
|
"encoding/xml"
|
|
"encoding/xml"
|
|
|
"fmt"
|
|
"fmt"
|
|
|
|
|
+ "io"
|
|
|
"net/http"
|
|
"net/http"
|
|
|
"net/url"
|
|
"net/url"
|
|
|
"rocommon/service"
|
|
"rocommon/service"
|
|
@@ -18,6 +19,7 @@ import (
|
|
|
"sort"
|
|
"sort"
|
|
|
"strconv"
|
|
"strconv"
|
|
|
"strings"
|
|
"strings"
|
|
|
|
|
+ "time"
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/gin-gonic/gin"
|
|
|
)
|
|
)
|
|
@@ -183,19 +185,17 @@ func getMd5RuSign(callbackKey string, params map[string]string) string {
|
|
|
return hex.EncodeToString(hash[:])
|
|
return hex.EncodeToString(hash[:])
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func getMd5DnSign(callbackKey string, params map[string]string) string {
|
|
|
|
|
- // 删除参数中的 sign 字段
|
|
|
|
|
- delete(params, "sign")
|
|
|
|
|
|
|
+func getMd5DnSign(callbackKey string, username, order_id, server, amount, extra, sandbox, timestamp string) string {
|
|
|
|
|
|
|
|
// 拼接参数和值
|
|
// 拼接参数和值
|
|
|
var signKey strings.Builder
|
|
var signKey strings.Builder
|
|
|
- signKey.WriteString(params["username"])
|
|
|
|
|
- signKey.WriteString(params["order_id"])
|
|
|
|
|
- signKey.WriteString(params["server"])
|
|
|
|
|
- signKey.WriteString(params["amount"])
|
|
|
|
|
- signKey.WriteString(params["extra"])
|
|
|
|
|
- signKey.WriteString(params["sandbox"])
|
|
|
|
|
- signKey.WriteString(params["timestamp"])
|
|
|
|
|
|
|
+ signKey.WriteString(username)
|
|
|
|
|
+ signKey.WriteString(order_id)
|
|
|
|
|
+ signKey.WriteString(server)
|
|
|
|
|
+ signKey.WriteString(amount)
|
|
|
|
|
+ signKey.WriteString(extra)
|
|
|
|
|
+ signKey.WriteString(sandbox)
|
|
|
|
|
+ signKey.WriteString(timestamp)
|
|
|
// 添加回调密钥
|
|
// 添加回调密钥
|
|
|
signKey.WriteString(callbackKey)
|
|
signKey.WriteString(callbackKey)
|
|
|
|
|
|
|
@@ -223,8 +223,9 @@ type ExtrasRu struct {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
type ExtrasDn struct {
|
|
type ExtrasDn struct {
|
|
|
- CpOrderId string `json:"cpOrderId"`
|
|
|
|
|
- Uid string `json:"uid"`
|
|
|
|
|
|
|
+ OrderNo string `json:"orderNo"`
|
|
|
|
|
+ Uid string `json:"uid"`
|
|
|
|
|
+ Platform string `json:"platform"`
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 海外版quick回调
|
|
// 海外版quick回调
|
|
@@ -412,29 +413,37 @@ func WebPayHwRuNotify(c *gin.Context) {
|
|
|
|
|
|
|
|
func WebPayHwDn2Notify(c *gin.Context) {
|
|
func WebPayHwDn2Notify(c *gin.Context) {
|
|
|
//util.DebugF("支付回调信息:%v", c.Request.PostForm)
|
|
//util.DebugF("支付回调信息:%v", c.Request.PostForm)
|
|
|
- params := make(map[string]string)
|
|
|
|
|
- if err := c.Request.ParseForm(); err != nil {
|
|
|
|
|
- util.InfoF("parseForm falied")
|
|
|
|
|
- c.String(http.StatusOK, "FAILED")
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- util.ErrorF("支付回调信息东南亚2:%v", c.Request.PostForm)
|
|
|
|
|
- for key, value := range c.Request.PostForm {
|
|
|
|
|
- params[key] = value[0] // 假设每个参数只有一个值
|
|
|
|
|
- }
|
|
|
|
|
- orderId := params["order_id"]
|
|
|
|
|
- payAmount := params["amount"]
|
|
|
|
|
- sign := params["sign"]
|
|
|
|
|
- if sign != getMd5DnSign("cee1b45a9aa02a75f9d720d6b9e7b7d4", params) {
|
|
|
|
|
- c.JSON(http.StatusOK, gin.H{"status": 1, "msg": "sign error"})
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ orderId := c.DefaultQuery("order_id", "")
|
|
|
|
|
+ payAmount := c.DefaultQuery("amount", "")
|
|
|
|
|
+ sign := c.DefaultQuery("sign", "")
|
|
|
|
|
+ extra := c.DefaultQuery("extra", "")
|
|
|
|
|
+ username := c.DefaultQuery("username", "")
|
|
|
|
|
+ server := c.DefaultQuery("server", "")
|
|
|
|
|
+ sandbox := c.DefaultQuery("sandbox", "")
|
|
|
|
|
+ timestamp := c.DefaultQuery("timestamp", "")
|
|
|
var extras ExtrasDn
|
|
var extras ExtrasDn
|
|
|
- err := json.Unmarshal([]byte(params["extra"]), &extras)
|
|
|
|
|
|
|
+ err := json.Unmarshal([]byte(extra), &extras)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
util.ErrorF("支付回调参数解析错误:%v", err)
|
|
util.ErrorF("支付回调参数解析错误:%v", err)
|
|
|
}
|
|
}
|
|
|
- cpOrderId := extras.CpOrderId
|
|
|
|
|
|
|
+ util.ErrorF("支付回调信息东南亚2:orderId:%v,payAmount:%v,sign:%v,extra:%v,username:%v,server:%v,sandbox:%v,timestamp:%v", orderId, payAmount, sign, extra, username, server, sandbox, timestamp)
|
|
|
|
|
+ if extras.Platform == "XUAN_YOU_Google_Android" {
|
|
|
|
|
+ if sign != getMd5DnSign("e81c2bd2ffb7feb7f0df477dc02b0bbd", username, orderId, server, payAmount, extra, sandbox, timestamp) {
|
|
|
|
|
+ c.JSON(http.StatusOK, gin.H{"status": 1, "msg": "sign error"})
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if extras.Platform == "XUAN_YOU_Google_Ios" {
|
|
|
|
|
+ if sign != getMd5DnSign("3f8e9fec0794443f76d3a27cd41e2711", username, orderId, server, payAmount, extra, sandbox, timestamp) {
|
|
|
|
|
+ c.JSON(http.StatusOK, gin.H{"status": 1, "msg": "sign error"})
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if sign != getMd5DnSign("cee1b45a9aa02a75f9d720d6b9e7b7d4", username, orderId, server, payAmount, extra, sandbox, timestamp) {
|
|
|
|
|
+ c.JSON(http.StatusOK, gin.H{"status": 1, "msg": "sign error"})
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ cpOrderId := extras.OrderNo
|
|
|
f64, err := strconv.ParseFloat(payAmount, 32)
|
|
f64, err := strconv.ParseFloat(payAmount, 32)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
@@ -462,8 +471,58 @@ func WebPayHwDn2Notify(c *gin.Context) {
|
|
|
if res == "SUCCESS" {
|
|
if res == "SUCCESS" {
|
|
|
c.JSON(http.StatusOK, gin.H{"status": 0})
|
|
c.JSON(http.StatusOK, gin.H{"status": 0})
|
|
|
} else {
|
|
} else {
|
|
|
- c.JSON(http.StatusOK, gin.H{"status": 0, "msg": "order already complete"})
|
|
|
|
|
|
|
+ c.JSON(http.StatusOK, gin.H{"status": 1, "msg": "order already complete"})
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func WebPayHwDnOpenServerNotify(c *gin.Context) {
|
|
|
|
|
+ //util.DebugF("支付回调信息:%v", c.Request.PostForm)
|
|
|
|
|
+ sidStr := c.DefaultQuery("sid", "")
|
|
|
|
|
+ nameStr := c.DefaultQuery("name", "")
|
|
|
|
|
+ timeStr := c.DefaultQuery("time", "") //2019-01-01 12:00:00
|
|
|
|
|
+ if nameStr == "" || sidStr == "" || timeStr == "" {
|
|
|
|
|
+ c.JSON(http.StatusOK, "param error:"+nameStr+sidStr+timeStr)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ reqUrl := "https://i.dze-game.com/game/center/sync_server"
|
|
|
|
|
+ now := strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
|
|
+ // 准备表单数据
|
|
|
|
|
+ formData := url.Values{}
|
|
|
|
|
+ formData.Add("GAME_ID", "121")
|
|
|
|
|
+ formData.Add("SID", sidStr)
|
|
|
|
|
+ formData.Add("_SID", sidStr)
|
|
|
|
|
+ formData.Add("NAME", nameStr)
|
|
|
|
|
+ formData.Add("START_TIME", timeStr)
|
|
|
|
|
+ formData.Add("sign", Md5Dn("121", nameStr, sidStr, timeStr, sidStr, now))
|
|
|
|
|
+ formData.Add("timestamp", now)
|
|
|
|
|
+ resp, err := http.Post(
|
|
|
|
|
+ reqUrl,
|
|
|
|
|
+ "application/x-www-form-urlencoded",
|
|
|
|
|
+ strings.NewReader(formData.Encode()),
|
|
|
|
|
+ )
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ util.ErrorF("req error:%v", err)
|
|
|
|
|
+ c.JSON(http.StatusOK, "req error:"+nameStr+sidStr+timeStr)
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
|
|
+ defer resp.Body.Close()
|
|
|
|
|
+
|
|
|
|
|
+ body, err := io.ReadAll(resp.Body)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ util.ErrorF("red body error:%v", err)
|
|
|
|
|
+ c.JSON(http.StatusOK, "res error:"+nameStr+sidStr+timeStr)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ util.ErrorF("东南亚开服信息,sid:%v,name:%v,time:%v,response:%v", sidStr, nameStr, timeStr, string(body))
|
|
|
|
|
+ c.JSON(http.StatusOK, gin.H{"status": 0})
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func Md5Dn(gameId, name, sid, time, _sid, timestamp string) string {
|
|
|
|
|
+ key := gameId + name + sid + time + _sid + timestamp + "cee1b45a9aa02a75f9d720d6b9e7b7d4"
|
|
|
|
|
+ hash := md5.Sum([]byte(key))
|
|
|
|
|
+ return hex.EncodeToString(hash[:])
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func WebPayHwDnNotify(c *gin.Context) {
|
|
func WebPayHwDnNotify(c *gin.Context) {
|