70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
// Package gateway /
|
|
package gateway
|
|
|
|
import (
|
|
"gateway/response"
|
|
"gateway/service"
|
|
"gateway/supplier/third_party"
|
|
"gateway/utils"
|
|
"strings"
|
|
)
|
|
|
|
type ScanController struct {
|
|
BaseGateway
|
|
}
|
|
|
|
// SolveFailJSON 处理错误的返回
|
|
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()
|
|
}
|
|
|
|
// Scan 处理扫码的请求
|
|
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)
|
|
}
|
|
}
|