74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
/***************************************************
|
|
** @Desc : 下游请求扫码支付的处理逻辑
|
|
** @Time : 2019/10/24 11:15
|
|
** @Author : yuebin
|
|
** @File : gateway
|
|
** @Last Modified by : yuebin
|
|
** @Last Modified time: 2019/10/24 11:15
|
|
** @Software: GoLand
|
|
****************************************************/
|
|
package gateway
|
|
|
|
import (
|
|
"gateway/response"
|
|
"gateway/service"
|
|
"gateway/supplier/third_party"
|
|
"gateway/utils"
|
|
"strings"
|
|
)
|
|
|
|
type ScanController struct {
|
|
BaseGateway
|
|
}
|
|
|
|
//处理错误的返回
|
|
func (c *ScanController) SolveFailJSON(p *response.PayBaseResp) {
|
|
scanFailJSON := new(response.ScanFailData)
|
|
scanFailJSON.StatusCode = "01"
|
|
scanFailJSON.PayKey = p.Params["payKey"]
|
|
scanFailJSON.Msg = p.Msg
|
|
c.Data["json"] = scanFailJSON
|
|
_ = c.ServeJSON()
|
|
c.StopRun()
|
|
}
|
|
|
|
//处理扫码的请求
|
|
func (c *ScanController) Scan() {
|
|
|
|
p := c.PayPrepare()
|
|
|
|
if p.Code == -1 {
|
|
c.SolveFailJSON(p)
|
|
}
|
|
//签名验证
|
|
p.Params["returnUrl"] = strings.TrimSpace(c.GetString("returnUrl"))
|
|
paySecret := p.MerchantInfo.MerchantSecret
|
|
if !utils.Md5Verify(p.Params, paySecret) {
|
|
p.Code = -1
|
|
p.Msg = "签名异常"
|
|
c.SolveFailJSON(p)
|
|
}
|
|
//选择通道
|
|
p = service.ChooseRoad(p)
|
|
if p.Code == -1 {
|
|
c.SolveFailJSON(p)
|
|
}
|
|
//生成订单记录
|
|
orderInfo, _ := service.GenerateRecord(p)
|
|
if p.Code == -1 {
|
|
c.SolveFailJSON(p)
|
|
}
|
|
//获取到对应的上游
|
|
supplierCode := p.RoadInfo.ProductUid
|
|
supplier := third_party.GetPaySupplierByCode(supplierCode)
|
|
scanData := supplier.Scan(orderInfo, p.RoadInfo, p.MerchantInfo)
|
|
if scanData.Status == "00" {
|
|
scanSuccessData := service.GenerateSuccessData(scanData, p)
|
|
c.Data["json"] = scanSuccessData
|
|
_ = c.ServeJSON()
|
|
} else {
|
|
p.Msg = scanData.Msg
|
|
c.SolveFailJSON(p)
|
|
}
|
|
}
|