74 lines
2.1 KiB
Go
74 lines
2.1 KiB
Go
package query
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"gateway/internal/models/merchant"
|
||
"gateway/internal/models/order"
|
||
"gateway/internal/utils"
|
||
"strings"
|
||
|
||
"github.com/beego/beego/v2/core/logs"
|
||
"github.com/beego/beego/v2/server/web"
|
||
)
|
||
|
||
type MerchantQueryController struct {
|
||
web.Controller
|
||
}
|
||
|
||
type OrderQueryFailData struct {
|
||
PayKey string `json:"payKey"`
|
||
StatusCode string `json:"statusCode"`
|
||
Msg string `json:"msg"`
|
||
}
|
||
|
||
// OrderQuery 改接口是为下游商户提供订单查询
|
||
func (c *MerchantQueryController) OrderQuery() {
|
||
orderNo := strings.TrimSpace(c.GetString("orderNo"))
|
||
payKey := strings.TrimSpace(c.GetString("payKey"))
|
||
sign := strings.TrimSpace(c.GetString("sign"))
|
||
params := make(map[string]string)
|
||
params["orderNo"] = orderNo
|
||
params["payKey"] = payKey
|
||
|
||
failData := new(OrderQueryFailData)
|
||
failData.StatusCode = "01"
|
||
failData.PayKey = payKey
|
||
|
||
merchantInfo := merchant.GetMerchantByPasskey(payKey)
|
||
if merchantInfo.MerchantUid == "" || len(merchantInfo.MerchantUid) == 0 {
|
||
failData.Msg = "商户不存在,请核对payKey字段"
|
||
}
|
||
orderInfo := order.GetOrderByMerchantOrderId(orderNo)
|
||
if orderInfo.BankOrderId == "" || len(orderInfo.BankOrderId) == 0 {
|
||
failData.Msg = "不存在这样的订单,请核对orderNo字段"
|
||
}
|
||
keys := utils.SortMap(params)
|
||
paySercet := merchantInfo.MerchantSecret
|
||
tmpSign := utils.GetMD5Sign(params, keys, paySercet)
|
||
if tmpSign != sign {
|
||
failData.Msg = "签名错误"
|
||
}
|
||
if failData.Msg != "" {
|
||
c.Data["json"] = failData
|
||
_ = c.ServeJSON()
|
||
return
|
||
}
|
||
p := make(map[string]string)
|
||
p["orderNo"] = orderNo
|
||
p["orderTime"] = strings.TrimSpace(strings.Replace("-", "", orderInfo.UpdateTime.Format("2006-01-02 15:04:05"), -1))
|
||
p["trxNo"] = orderInfo.BankOrderId
|
||
p["tradeStatus"] = orderInfo.Status
|
||
p["payKey"] = payKey
|
||
p["orderPrice"] = fmt.Sprintf("%.2f", orderInfo.OrderAmount)
|
||
p["factPrice"] = fmt.Sprintf("%.2f", orderInfo.FactAmount)
|
||
p["statusCode"] = "00"
|
||
keys = utils.SortMap(p)
|
||
p["sign"] = utils.GetMD5Sign(p, keys, paySercet)
|
||
s, err := json.Marshal(p)
|
||
if err != nil {
|
||
logs.Error("json marshal fail: ", err)
|
||
}
|
||
c.Data["json"] = s
|
||
}
|