Files
kami_gateway/internal/controllers/gateway/payfor_controller.go
2024-09-03 21:52:44 +08:00

133 lines
4.1 KiB
Go

package gateway
import (
"fmt"
"gateway/internal/config"
"gateway/internal/entities/supplier/third_party"
"gateway/internal/models/order"
"gateway/internal/models/payfor"
"gateway/internal/models/road"
"gateway/internal/schema/response"
pay_for2 "gateway/internal/service/pay_for"
"strings"
"github.com/astaxie/beego/logs"
"github.com/beego/beego/v2/server/web"
)
type PayForGateway struct {
web.Controller
}
// PayFor 接受下游商户的代付请求
func (c *PayForGateway) PayFor() {
params := make(map[string]string)
params["merchantKey"] = strings.TrimSpace(c.GetString("merchantKey"))
params["realname"] = strings.TrimSpace(c.GetString("realname"))
params["cardNo"] = strings.TrimSpace(c.GetString("cardNo"))
// params["bankCode"] = strings.TrimSpace(c.GetString("bankCode"))
params["accType"] = strings.TrimSpace(c.GetString("accType"))
// params["province"] = strings.TrimSpace(c.GetString("province"))
// params["city"] = strings.TrimSpace(c.GetString("city"))
// params["bankAccountAddress"] = strings.TrimSpace(c.GetString("bankAccountAddress"))
params["amount"] = strings.TrimSpace(c.GetString("amount"))
// params["mobileNo"] = strings.TrimSpace(c.GetString("mobileNo"))
params["merchantOrderId"] = strings.TrimSpace(c.GetString("merchantOrderId"))
params["sign"] = strings.TrimSpace(c.GetString("sign"))
payForResponse := new(response.PayForResponse)
res, msg := checkParams(params)
if !res {
payForResponse.ResultCode = "01"
payForResponse.ResultMsg = msg
} else {
payForResponse = pay_for2.AutoPayFor(params, config.SELF_API)
}
c.Data["json"] = payForResponse
_ = c.ServeJSON()
}
// PayForQuery 代付结果查询,
func (c *PayForGateway) PayForQuery() {
params := make(map[string]string)
params["merchantKey"] = strings.TrimSpace(c.GetString("merchantKey"))
params["timestamp"] = strings.TrimSpace(c.GetString("timestamp"))
params["merchantOrderId"] = strings.TrimSpace(c.GetString("merchantOrderId"))
params["sign"] = strings.TrimSpace(c.GetString("sign"))
c.Data["json"] = pay_for2.PayForResultQuery(params)
_ = c.ServeJSON()
}
// QuerySupplierPayForResult 查询上游的代付结果
func (c *PayForGateway) QuerySupplierPayForResult() {
bankOrderId := strings.TrimSpace(c.GetString("bankOrderId"))
p := payfor.GetPayForByBankOrderId(bankOrderId)
if p.RoadUid == "" {
// 向上游查询订单结果
orderInfo := order.GetOrderByBankOrderId(bankOrderId)
if orderInfo.BankOrderId == "" {
c.Ctx.WriteString("fail")
return
}
roadInfo := road.GetRoadInfoByRoadUid(p.RoadUid)
supplier := third_party.GetPaySupplierByCode(roadInfo.ProductUid)
supplier.PayQuery(orderInfo, roadInfo)
} else {
roadInfo := road.GetRoadInfoByRoadUid(p.RoadUid)
supplier := third_party.GetPaySupplierByCode(roadInfo.ProductUid)
res := supplier.PayFor(p)
logs.Debug("代付查询结果:", res)
c.Ctx.WriteString("success")
}
}
// SolvePayForResult 接收boss发送过来的代付手动处理结果
func (c *PayForGateway) SolvePayForResult() {
resultType := strings.TrimSpace(c.GetString("resultType"))
bankOrderId := strings.TrimSpace(c.GetString("bankOrderId"))
p := payfor.GetPayForByBankOrderId(bankOrderId)
if p.BankOrderId == "" {
c.Ctx.WriteString(config.FAIL)
}
if resultType == config.PAYFOR_FAIL {
pay_for2.PayForFail(p)
} else if resultType == config.PAYFOR_SUCCESS {
pay_for2.PayForSuccess(p)
}
c.Ctx.WriteString(config.SUCCESS)
}
// Balance 商户查找余额
func (c *PayForGateway) Balance() {
params := make(map[string]string)
params["merchantKey"] = strings.TrimSpace(c.GetString("merchantKey"))
params["timestamp"] = strings.TrimSpace(c.GetString("timestamp"))
params["sign"] = strings.TrimSpace(c.GetString("sign"))
balanceResponse := new(response.BalanceResponse)
res, msg := checkParams(params)
if !res {
balanceResponse.ResultCode = "-1"
balanceResponse.ResultMsg = msg
c.Data["json"] = balanceResponse
} else {
c.Data["json"] = pay_for2.BalanceQuery(params)
}
_ = c.ServeJSON()
}
func checkParams(params map[string]string) (bool, string) {
for k, v := range params {
if v == "" || len(v) == 0 {
return false, fmt.Sprintf("字段: %s 为必填!", k)
}
}
return true, ""
}