mirror of
https://github.com/kongyuebin1/dongfeng-pay.git
synced 2025-12-15 13:59:57 +08:00
修改网关代码的结构,调整了逻辑,删除了许多无用的代码
This commit is contained in:
193
gateway/service/base_service.go
Normal file
193
gateway/service/base_service.go
Normal file
@@ -0,0 +1,193 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"gateway/conf"
|
||||
"gateway/models/merchant"
|
||||
"gateway/models/order"
|
||||
"gateway/response"
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
//获取商户信息
|
||||
func GetMerchantInfo(params map[string]string) *response.PayBaseResp {
|
||||
|
||||
c := new(response.PayBaseResp)
|
||||
c.Params = make(map[string]string)
|
||||
c.Params = params
|
||||
|
||||
merchantInfo := merchant.GetMerchantByPaykey(params["payKey"])
|
||||
|
||||
if merchantInfo.MerchantUid == "" || len(merchantInfo.MerchantUid) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "商户不存在,或者paykey有误,请联系管理员"
|
||||
} else if merchantInfo.Status != conf.ACTIVE {
|
||||
c.Code = -1
|
||||
c.Msg = "商户状态已经被冻结或者被删除,请联系管理员!"
|
||||
} else {
|
||||
c.MerchantInfo = merchantInfo
|
||||
}
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
func JudgeParams(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
//c.ReturnUrlIsValid()
|
||||
c = OrderIsValid(c)
|
||||
c = NotifyUrlIsValid(c)
|
||||
c = OsTypeIsValid(c)
|
||||
c = PayWayCodeIsValid(c)
|
||||
c = ProductIsValid(c)
|
||||
c = OrderPeriodIsValid(c)
|
||||
//c = IpIsWhite()
|
||||
c = OrderPriceIsValid(c)
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
/*
|
||||
* 插入支付订单记录和订单利润记录,保证一致性
|
||||
*/
|
||||
func InsertOrderAndOrderProfit(orderInfo order.OrderInfo, orderProfitInfo order.OrderProfitInfo) bool {
|
||||
o := orm.NewOrm()
|
||||
if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
|
||||
if _, err := txOrm.Insert(&orderInfo); err != nil {
|
||||
logs.Error("insert orderInfo fail: ", err)
|
||||
return err
|
||||
}
|
||||
if _, err := txOrm.Insert(&orderProfitInfo); err != nil {
|
||||
logs.Error("insert orderProfit fail: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}); err != nil {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
** 判断跳转地址是否符合规则
|
||||
*/
|
||||
func ReturnUrlIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["returnUrl"] == "" || len(c.Params["returnUrl"]) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "支付成功后跳转地址不能为空"
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
/**
|
||||
** 判断回调地址是否符合规则
|
||||
*/
|
||||
func NotifyUrlIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["notifyUrl"] == "" || len(c.Params["notifyUrl"]) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "支付成功订单回调地址不能空位"
|
||||
}
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
/**
|
||||
** 判断设备类型是否符合规则
|
||||
*/
|
||||
func OsTypeIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["osType"] == "" || len(c.Params["osType"]) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "支付设备系统类型不能为空,默认填写\"1\"即可"
|
||||
}
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
/**
|
||||
** 判断支付类型字段是否符合规则
|
||||
*/
|
||||
func PayWayCodeIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["payWayCode"] == "" || len(c.Params["payWayCode"]) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "支付类型字段不能为空"
|
||||
return c
|
||||
}
|
||||
|
||||
if !strings.Contains(c.Params["payWayCode"], "SCAN") {
|
||||
c.Code = -1
|
||||
c.Msg = "扫码支付不支持这种支付类型"
|
||||
} else {
|
||||
scanPayWayCodes := conf.GetScanPayWayCodes()
|
||||
for _, v := range scanPayWayCodes {
|
||||
if c.Params["payWayCode"] == v {
|
||||
c.PayWayCode = strings.Replace(c.Params["payWayCode"], "-", "_", -1)
|
||||
return c
|
||||
}
|
||||
}
|
||||
c.Code = -1
|
||||
c.Msg = "不存在这种支付类型,请仔细阅读对接文档"
|
||||
}
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
func ProductIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["productName"] == "" || len(c.Params["productName"]) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "商品描述信息字段不能为空"
|
||||
}
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
func OrderPeriodIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["orderPeriod"] == "" || len(c.Params["orderPeriod"]) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "订单过期时间不能为空,默认填写\"1\"即可"
|
||||
}
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
//判断订单金额
|
||||
func OrderPriceIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["orderPrice"] == "" || len(c.Params["orderPrice"]) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "订单金额不能为空"
|
||||
return c
|
||||
}
|
||||
|
||||
a, err := strconv.ParseFloat(c.Params["orderPrice"], 64)
|
||||
if err != nil {
|
||||
logs.Error("order price is invalid: ", c.Params["orderPrice"])
|
||||
c.Code = -1
|
||||
c.Msg = "订单金额非法"
|
||||
}
|
||||
c.OrderAmount = a
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
//判断金额订单号是否为空或者有重复
|
||||
func OrderIsValid(c *response.PayBaseResp) *response.PayBaseResp {
|
||||
if c.Params["orderNo"] == "" || len(c.Params["orderNo"]) == 0 {
|
||||
c.Code = -1
|
||||
c.Msg = "商户订单号不能为空"
|
||||
return c
|
||||
}
|
||||
if order.OrderNoIsEixst(c.Params["orderNo"]) {
|
||||
c.Code = -1
|
||||
c.Msg = "商户订单号重复"
|
||||
}
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
//判断ip是否在白名单中
|
||||
func IpIsWhite() bool {
|
||||
//TODO
|
||||
return true
|
||||
}
|
||||
Reference in New Issue
Block a user