274 lines
7.0 KiB
Go
274 lines
7.0 KiB
Go
package gateway
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"gateway/conf"
|
|
"gateway/models/order"
|
|
"gateway/query"
|
|
"gateway/service"
|
|
"gateway/supplier/third_party"
|
|
"gateway/utils"
|
|
"github.com/astaxie/beego/logs"
|
|
"github.com/beego/beego/v2/client/orm"
|
|
"github.com/beego/beego/v2/server/web"
|
|
"strings"
|
|
)
|
|
|
|
type OrderController struct {
|
|
web.Controller
|
|
}
|
|
|
|
func (c *OrderController) ShowErr(string2 string) {
|
|
web.ReadFromRequest(&c.Controller)
|
|
c.Data["flash"] = map[string]string{"error": string2}
|
|
c.TplName = "err/params.html"
|
|
}
|
|
|
|
type JsonResponse struct {
|
|
Code int `json:"code"`
|
|
Msg string `json:"msg"`
|
|
Data interface{} `json:"data"`
|
|
}
|
|
|
|
// CardSuit 卡片提交
|
|
func (c *OrderController) CardSuit() {
|
|
params := make(map[string]string)
|
|
params["orderNo"] = strings.TrimSpace(c.GetString("orderid"))
|
|
params["exValue"] = strings.TrimSpace(c.GetString("card"))
|
|
orderInfo := order.GetOrderByMerchantOrderId(params["orderNo"])
|
|
if orderInfo.BankOrderId == "" || len(orderInfo.BankOrderId) == 0 {
|
|
jsonResponse := JsonResponse{
|
|
Code: 0,
|
|
Msg: "订单已被处理或者不存在。",
|
|
}
|
|
c.Data["json"] = &jsonResponse
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
if orderInfo.ExValue != "" {
|
|
jsonResponse := JsonResponse{
|
|
Code: 0,
|
|
Msg: "你已提交过卡密信息,无需重复提交。",
|
|
}
|
|
c.Data["json"] = &jsonResponse
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
if orderInfo.Status != "wait" {
|
|
logs.Error("阿达达,订单号=", orderInfo.BankOrderId)
|
|
return
|
|
}
|
|
o := orm.NewOrm()
|
|
|
|
err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
|
|
if orderInfo.Status != "wait" {
|
|
logs.Error("是否收到,订单号=", orderInfo.BankOrderId)
|
|
return errors.New(fmt.Sprintf("该订单已经处理,订单号= %s", orderInfo.BankOrderId))
|
|
}
|
|
|
|
//{"card_type":"171","data":"111111","face_type":"10","recovery_type":"2"}
|
|
cdata := third_party.CardInfo{
|
|
CardType: "171",
|
|
FaceType: fmt.Sprintf("%f", orderInfo.OrderAmount),
|
|
RecoveryType: "2",
|
|
Data: params["exValue"],
|
|
}
|
|
marshal, err := json.Marshal(cdata)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
orderInfo.ExValue = string(marshal)
|
|
orderInfo.CardData = params["exValue"]
|
|
orderInfo.UpdateTime = utils.GetBasicDateTime()
|
|
if _, err := txOrm.Update(&orderInfo); err != nil || orderInfo.BankOrderId == "" {
|
|
logs.Error(fmt.Sprintf("solve pay success, update order info fail: %s, bankOrderId = %s", err, orderInfo.BankOrderId))
|
|
return err
|
|
}
|
|
return nil
|
|
})
|
|
if err == nil {
|
|
params["MerchantUid"] = orderInfo.MerchantUid
|
|
params["payWayCode"] = orderInfo.PayTypeCode
|
|
|
|
p := service.GetMerchantInfoByUID(params)
|
|
if p.Code == -1 {
|
|
jsonResponse := JsonResponse{
|
|
Code: 0,
|
|
Msg: p.Msg,
|
|
}
|
|
c.Data["json"] = &jsonResponse
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
p.OrderAmount = orderInfo.OrderAmount
|
|
//选择通道
|
|
p = service.ChooseRoad(p)
|
|
if p.Code == -1 {
|
|
jsonResponse := JsonResponse{
|
|
Code: 0,
|
|
Msg: p.Msg,
|
|
}
|
|
c.Data["json"] = &jsonResponse
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
supplierCode := "MF178"
|
|
supplier := third_party.GetPaySupplierByCode(supplierCode)
|
|
sdata := supplier.Syt(orderInfo, p.RoadInfo, p.MerchantInfo)
|
|
if sdata.Status == "-1" {
|
|
jsonResponse := JsonResponse{
|
|
Code: 0,
|
|
Msg: sdata.Msg,
|
|
}
|
|
|
|
c.Data["json"] = &jsonResponse
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
jsonResponse := JsonResponse{
|
|
Code: 1,
|
|
Msg: "提交成功,系统核对成功后,将返回原系统处理。",
|
|
}
|
|
|
|
c.Data["json"] = &jsonResponse
|
|
c.ServeJSON()
|
|
} else {
|
|
jsonResponse := JsonResponse{
|
|
Code: 0,
|
|
Msg: err.Error(),
|
|
}
|
|
c.Data["json"] = &jsonResponse
|
|
c.ServeJSON()
|
|
}
|
|
}
|
|
|
|
// OrderCreate 订单创建
|
|
func (c *OrderController) OrderCreate() {
|
|
//客户传递过来对参数 订单ID 支付类型 卡类型 卡面值
|
|
//判断订单是否存在 是否关闭 是否支付成功
|
|
//c.Data["flash"] = map[string]string{"error": string2}
|
|
|
|
params := make(map[string]string)
|
|
//获取客户端的ip
|
|
//clientIp := c.Ctx.Input.IP()
|
|
params["payWayCode"] = strings.TrimSpace(c.GetString("paycode"))
|
|
params["orderPrice"] = strings.TrimSpace(c.GetString("price"))
|
|
params["orderNo"] = strings.TrimSpace(c.GetString("orderid"))
|
|
params["notifyUrl"] = strings.TrimSpace(c.GetString("notifyurl"))
|
|
params["returnUrl"] = strings.TrimSpace(c.GetString("returnurl"))
|
|
|
|
params["orderPeriod"] = "1" //订单有效时间
|
|
params["PayTypeCode"] = "CARD_DH" //类型
|
|
//商户ID
|
|
params["payKey"] = strings.TrimSpace(c.GetString("paykey"))
|
|
|
|
if params["payWayCode"] == "" || params["orderPrice"] == "" || params["orderNo"] == "" {
|
|
c.ShowErr("参数有误,请检查再试试。")
|
|
return
|
|
}
|
|
|
|
p := service.GetMerchantInfo(params)
|
|
if p.Code == -1 {
|
|
c.ShowErr(p.Msg)
|
|
return
|
|
}
|
|
p.PayWayCode = params["payWayCode"]
|
|
p = service.OrderPriceIsValid(p)
|
|
if p.Code == -1 {
|
|
c.ShowErr(p.Msg)
|
|
return
|
|
}
|
|
|
|
orderInfo := order.GetOrderByMerchantOrderId(params["orderNo"])
|
|
p = service.ChooseRoad(p)
|
|
if p.Code == -1 {
|
|
c.ShowErr(p.Msg)
|
|
return
|
|
}
|
|
if orderInfo.BankOrderId == "" || len(orderInfo.BankOrderId) == 0 {
|
|
//生成订单记录
|
|
orderInfo, _ = service.GenerateRecord(p)
|
|
if p.Code == -1 {
|
|
c.ShowErr(p.Msg)
|
|
return
|
|
}
|
|
}
|
|
|
|
c.Data["Status"] = orderInfo.Status
|
|
c.Data["orderNo"] = params["orderNo"]
|
|
c.Data["price"] = params["orderPrice"]
|
|
c.TplName = "scan.html"
|
|
if orderInfo.Status == conf.WAIT {
|
|
c.Data["qrCode"] = "../static/new/febs/images/public/jx.png"
|
|
} else if orderInfo.Status == conf.SUCCESS || orderInfo.Status == conf.FAIL {
|
|
if orderInfo.Status == conf.SUCCESS {
|
|
c.Data["price"] = orderInfo.FactAmount
|
|
}
|
|
c.Data["UpdateTime"] = orderInfo.UpdateTime
|
|
}
|
|
|
|
}
|
|
|
|
func (c *OrderController) OrderQuery() {
|
|
bankOrderId := c.GetString("bankOrderId")
|
|
logs.Debug(fmt.Sprintf("获取到boss后台的银行id = %s", bankOrderId))
|
|
|
|
qy := query.SupplierOrderQueryResult(bankOrderId)
|
|
|
|
if qy {
|
|
c.Ctx.WriteString("success")
|
|
} else {
|
|
c.Ctx.WriteString("fail")
|
|
}
|
|
c.StopRun()
|
|
}
|
|
|
|
func (c *OrderController) OrderUpdate() {
|
|
bankOrderId := c.GetString("bankOrderId")
|
|
solveType := c.GetString("solveType")
|
|
|
|
orderInfo := order.GetOrderByBankOrderId(bankOrderId)
|
|
|
|
orderInfo.Operator = c.GetString("operator")
|
|
|
|
flag := false
|
|
if orderInfo.BankOrderId == "" {
|
|
logs.Error("该订单不存在,bankOrderId=", bankOrderId)
|
|
} else {
|
|
switch solveType {
|
|
case conf.SUCCESS:
|
|
flag = service.SolvePaySuccess(bankOrderId, orderInfo.FactAmount, orderInfo.BankTransId)
|
|
case conf.FAIL:
|
|
flag = service.SolvePayFail(bankOrderId, orderInfo.BankTransId)
|
|
case conf.FREEZE_AMOUNT:
|
|
//将这笔订单进行冻结
|
|
flag = service.SolveOrderFreeze(bankOrderId)
|
|
case conf.UNFREEZE_AMOUNT:
|
|
//将这笔订单金额解冻
|
|
flag = service.SolveOrderUnfreeze(bankOrderId)
|
|
case conf.REFUND:
|
|
if orderInfo.Status == conf.SUCCESS {
|
|
flag = service.SolveRefund(bankOrderId)
|
|
}
|
|
case conf.ORDERROLL:
|
|
if orderInfo.Status == conf.SUCCESS {
|
|
flag = service.SolveOrderRoll(bankOrderId)
|
|
}
|
|
default:
|
|
logs.Error("不存在这样的处理类型")
|
|
}
|
|
if flag {
|
|
c.Ctx.WriteString(conf.SUCCESS)
|
|
} else {
|
|
c.Ctx.WriteString(conf.FAIL)
|
|
}
|
|
}
|
|
|
|
c.StopRun()
|
|
}
|