agropay支付

dev_aagame_provider
zhora 2 months ago
parent de14cc2db6
commit afe78f72e5
  1. 3
      modules/backend/handler/gm/gm.go
  2. 117
      modules/pay/agropay/base.go
  3. 110
      modules/pay/agropay/values.go
  4. 3
      modules/pay/allpay/all.go
  5. 17
      modules/pay/base/signmd5.go
  6. 6
      modules/pay/base/util.go
  7. 8
      modules/web/handler/luckyWheel.go
  8. 4
      modules/web/handler/recharge.go
  9. 4
      modules/web/handler/share.go
  10. 4
      modules/web/handler/withdraw.go
  11. 7
      util/util.go

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"server/call" "server/call"
"server/common" "server/common"
"server/config"
"server/db" "server/db"
"server/modules/backend/app" "server/modules/backend/app"
"server/modules/backend/values" "server/modules/backend/values"
@ -61,7 +62,7 @@ func GMRecharge(c *gin.Context) {
return return
} }
order := new(common.RechargeOrder) order := new(common.RechargeOrder)
id := util.NewOrderID(req.UID) id := util.NewOrderID(req.UID, config.GetBase().ServerFlag)
order.OrderID = id order.OrderID = id
order.APIPayID = id order.APIPayID = id
order.UID = req.UID order.UID = req.UID

@ -1,14 +1,16 @@
package agropay package agropay
import ( import (
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"net/http" "net/http"
"server/common" "server/call"
"server/modules/pay/base" "server/modules/pay/base"
"server/modules/pay/values" "server/modules/pay/values"
"server/pb" "server/pb"
"server/util" "server/util"
"time"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
"github.com/liangdas/mqant/log" "github.com/liangdas/mqant/log"
@ -57,6 +59,10 @@ func (s *Sub) PackReq() interface{} {
return s.PackPayReq() return s.PackPayReq()
} else if s.Base.Opt == base.OPTWithdraw { } else if s.Base.Opt == base.OPTWithdraw {
return s.PackWithdrawReq() return s.PackWithdrawReq()
} else if s.Base.Opt == base.OPTQueryWithdraw {
return s.PackQueryWithdrawReq()
} else if s.Base.Opt == base.OPTQueryPay {
return s.PackQueryPayReq()
} }
return nil return nil
} }
@ -73,51 +79,98 @@ func (s *Sub) GetResp() (proto.Message, error) {
if s.Base.Status == 0 && resp.Code != 2000 { if s.Base.Status == 0 && resp.Code != 2000 {
return nil, errors.New("withdraw fail") return nil, errors.New("withdraw fail")
} }
return &pb.InnerWithdrawResp{APIOrderID: fmt.Sprintf("%v", resp.Data.TransferId), Channel: uint32(values.AgroPay)}, nil return &pb.InnerWithdrawResp{APIOrderID: fmt.Sprintf("%v", resp.Data.TransferId), Channel: uint32(values.AgroPay), Status: uint32(s.Base.Status)}, nil
} else if s.Base.Opt == base.OPTQueryWithdraw {
resp := s.Base.Resp.(*QueryWithdrawResp)
log.Debug("QueryWithdrawResp:%+v", resp)
ret := &pb.InnerQueryWithdrawResp{APIOrderID: resp.Data.TransferId, OrderID: resp.Data.MchOrderNo}
s.Base.QueryWithdrawResp.OrderID = resp.Data.MchOrderNo
s.Base.QueryWithdrawResp.APIOrderID = resp.Data.TransferId
if s.Base.Status == 0 {
if resp.Code == 2000 {
if resp.Data.State == 2 {
s.Base.QueryWithdrawResp.Status = base.QueryStatusOrderSuccess
} else if resp.Data.State == 1 {
s.Base.QueryWithdrawResp.Status = base.QueryStatusSuccess
}
} else {
if resp.Data.State == 3 {
s.Base.QueryWithdrawResp.Status = base.QueryStatusFail
}
}
}
if s.Base.QueryWithdrawResp.Status == 0 {
s.Base.QueryWithdrawResp.Status = base.QueryStatusUnknown
}
return ret, nil
} else if s.Base.Opt == base.OPTQueryPay {
resp := s.Base.Resp.(*QueryPayResp)
log.Debug("QueryPayResp:%+v", resp)
ret := &pb.InnerQueryWithdrawResp{APIOrderID: resp.Data.PayOrderId, OrderID: resp.Data.MchOrderNo}
s.Base.QueryPayResp.OrderID = resp.Data.MchOrderNo
s.Base.QueryPayResp.APIOrderID = resp.Data.PayOrderId
if s.Base.Status == 0 {
if resp.Code == 2000 && resp.Data.State == 2 {
s.Base.QueryPayResp.Status = base.QueryStatusOrderSuccess
}
}
if s.Base.QueryPayResp.Status == 0 {
s.Base.QueryPayResp.Status = base.QueryStatusUnknown
}
return ret, nil
} }
return nil, fmt.Errorf("unknow opt") return nil, fmt.Errorf("unknow opt")
} }
func (s *Sub) PackPayReq() interface{} { func (s *Sub) PackPayReq() interface{} {
r := s.Base.PayReq r := s.Base.PayReq
r.Amount /= 100
if len(r.Phone) == 12 {
r.Phone = r.Phone[2:]
}
send := &PayReq{ send := &PayReq{
MchNo: mid, MchNo: mid,
AppId: appID, AppID: appID,
MchOrderNo: r.OrderID, MchOrderNo: r.OrderID,
// Amount: fmt.Sprintf("%d", r.Amount), // Amount: fmt.Sprintf("%d", r.Amount),
Amount: float64(r.Amount), Amount: r.Amount,
Currency: "INR", Currency: "INR",
UserName: r.Name, UserName: r.Name,
Phone: r.Phone, Phone: r.Phone,
Email: r.Email, Email: r.Email,
Subject: "shop", Subject: "shop",
Body: "shop buy", Body: "shop buy",
NotifyUrl: values.GetPayCallback(values.AgroPay), // NotifyUrl: s.Base.GetPayCallbackURL(),
ReturnUrl: values.GetFrontCallback(), ReturnURL: values.GetFrontCallback(),
RiskControlExtParam: fmt.Sprintf(`{"userId":%d}`, r.UID), // RiskControlExtParam: fmt.Sprintf(`{"userId":%d}`, r.UID),
EncryptPhone: util.CalculateMD5(r.Phone), EncryptPhone: util.CalculateMD5(r.Phone),
EncryptEmail: util.CalculateMD5(r.Email), EncryptEmail: util.CalculateMD5(r.Email),
DeviceID: r.DeviceID,
} }
send.Sign = s.Base.SignMD5(send) risk := &RiskControlData{
UID: fmt.Sprintf("%d", r.UID),
}
p, _ := call.GetUserXInfo(int(r.UID), "birth")
risk.RegistrationTime = time.Unix(p.Birth, 0).Format("2006-01-02 15:04:05")
//re := call.GetRechargeInfo(int(r.UID))
send.PayinTimes = 0
// re := call.GetRechargeInfo(int(r.UID))
// risk.TotalRechargeAmount = re.TotalCharge
// risk.TotalNumberOfRecharges = int64(re.TotalChargeCount)
// risk.TotalWithdrawalAmount = re.TotoalWithdraw
// risk.TotalNumberOfWithdrawals = re.TotoalWithdrawCount
byt, _ := json.Marshal(risk)
send.RiskControlExtParam = string(byt)
send.Sign = s.Base.SignMD5Empty(send)
return send return send
} }
func (s *Sub) PackWithdrawReq() interface{} { func (s *Sub) PackWithdrawReq() interface{} {
r := s.Base.WithdrawReq r := s.Base.WithdrawReq
r.Amount /= 100
if len(r.Phone) == 12 {
r.Phone = r.Phone[2:]
}
send := &WithdrawReq{ send := &WithdrawReq{
MchNo: mid, MchNo: mid,
AppId: appID, AppId: appID,
MchOrderNo: r.OrderID, MchOrderNo: r.OrderID,
Amount: fmt.Sprintf("%d", r.Amount), Amount: r.Amount,
Currency: "INR", Currency: "INR",
// EntryType: , // EntryType: ,
// AccountNo: , // AccountNo: ,
@ -129,25 +182,41 @@ func (s *Sub) PackWithdrawReq() interface{} {
// BankName: , // BankName: ,
ClientIp: r.IP, ClientIp: r.IP,
TransferDesc: "shop withdraw", TransferDesc: "shop withdraw",
NotifyUrl: values.GetWithdrawCallback(values.AgroPay), // NotifyUrl: s.Base.GetWithdrawCallbackURL(),
// ChannelExtra // ChannelExtra
// ExtParam: , // ExtParam: ,
EncryptPhone: util.CalculateMD5(r.Phone), EncryptPhone: util.CalculateMD5(r.Phone),
EncryptEmail: util.CalculateMD5(r.Email), EncryptEmail: util.CalculateMD5(r.Email),
DeviceId: r.DeviceID, DeviceId: r.DeviceID,
} }
if r.PayType == int64(common.PayTypeBank) {
send.EntryType = "banks" send.EntryType = "banks"
send.AccountNo = r.CardNo send.AccountNo = r.CardNo
send.IfscCode = r.PayCode send.IfscCode = r.PayCode
send.BankName = r.BankName send.BankName = r.BankName
} else if r.PayType == int64(common.PayTypeUPI) {
send.EntryType = "upi" send.Sign = s.Base.SignMD5(send)
send.AccountNo = r.PayCode return send
} else { }
return nil
func (s *Sub) PackQueryWithdrawReq() interface{} {
r := s.Base.QueryWithdrawReq
send := &QueryWithdrawReq{
MchNo: mid,
AppId: appID,
MchOrderNo: r.OrderID,
} }
send.Sign = s.Base.SignMD5(send)
return send
}
func (s *Sub) PackQueryPayReq() interface{} {
r := s.Base.QueryPayReq
send := &QueryPayReq{
MchNo: mid,
AppId: appID,
MchOrderNo: r.OrderID,
}
send.Sign = s.Base.SignMD5(send) send.Sign = s.Base.SignMD5(send)
return send return send
} }

@ -12,24 +12,33 @@ const (
) )
type PayReq struct { type PayReq struct {
MchNo string `json:"mchNo"` MchNo string `json:"mchNo"` // 平台分配的商户号
AppId string `json:"appId"` AppID string `json:"appId"` // 商户应用ID
MchOrderNo string `json:"mchOrderNo"` MchOrderNo string `json:"mchOrderNo"` // 商户生成的唯一订单号
Amount float64 `json:"amount"` Amount int64 `json:"amount"` // 代收订单金额(单位:卢比,最多保留两位小数)
Currency string `json:"currency"` Currency string `json:"currency"` // 货币代码:INR
UserName string `json:"userName"` UserName string `json:"userName"` // 付款人姓名(仅字母和空格)
Phone string `json:"phone"` Phone string `json:"phone"` // 付款人电话(10位数字)
Email string `json:"email"` Email string `json:"email"` // 付款人邮箱
Subject string `json:"subject"` Subject string `json:"subject"` // 商品标题
Body string `json:"body"` Body string `json:"body"` // 商品描述
NotifyUrl string `json:"notifyUrl"` ReturnURL string `json:"returnUrl"` // 跳转地址(非必填)
ReturnUrl string `json:"returnUrl"` // ExtParam string `json:"extParam"` // 商户扩展参数(非必填)
ExtParam string `json:"extParam"` RiskControlExtParam string `json:"riskControlExtParam"` // 风控扩展参数(JSON格式字符串,非必填)
RiskControlExtParam string `json:"riskControlExtParam"` EncryptPhone string `json:"encryptPhone"` // MD5加密后的真实手机号
EncryptPhone string `json:"encryptPhone"` EncryptEmail string `json:"encryptEmail"` // MD5加密后的真实邮件地址
EncryptEmail string `json:"encryptEmail"` DeviceID string `json:"deviceId"` // 用户设备ID
DeviceId string `json:"deviceId"` PayinTimes int `json:"payinTimes"` // 充值成功次数
Sign string `json:"sign"` Sign string `json:"sign"` // 签名
}
type RiskControlData struct {
UID string `json:"userId"`
RegistrationTime string `json:"registrationTime"`
// TotalRechargeAmount int64 `json:"totalRechargeAmount"`
// TotalNumberOfRecharges int64 `json:"totalNumberOfRecharges"`
// TotalWithdrawalAmount int64 `json:"totalWithdrawalAmount"`
// TotalNumberOfWithdrawals int64 `json:"totalNumberOfWithdrawals"`
} }
type PayResp struct { type PayResp struct {
@ -47,6 +56,35 @@ type PayResp struct {
Sign string `json:"sign"` Sign string `json:"sign"`
} }
type QueryPayReq struct {
MchNo string `json:"mchNo"` // 商户号 String 是 平台分配的商户号
AppId string `json:"appId"` // 商户应用ID String 是 商户应用ID
MchOrderNo string `json:"mchOrderNo"` // 商户生成的唯一订单号 String 否 商户订单号与平台订单号必须传一个
PayOrderId string `json:"payOrderId"` // 平台订单号 String 否 商户订单号与平台订单号必须传一个
Sign string `json:"sign"` // 签名 String 是 详见签名算法
}
type QueryPayResp struct {
Code int // 返回码 2000:成功(仅代表请求成功,不代表业务成功);2010:系统异常;2011:参数有误;2012:数据库服务异常;9999:自定义业务异常
Msg string // 业务响应信息 成功:success
Data struct {
PayOrderId string // 支付平台订单号
MchOrderNo string // 商户订单号
MchNo string // 商户号
AppId string // 商户应用ID
Amount string // 支付金额 保留两位小数
RealAmount string // 实际支付金额 state=2 时,必须以这个金额为准,其它状态时,值为 0
State int // 订单状态 1 - 支付中 2 - 支付成功 3 - 支付失败 5 - 已退款
ErrCode string // 错误码
ErrMsg string // 错误描述
ExtParam string // 商户扩展参数
SuccessTime int64 // 订单支付成功时间
CreatedAt int64 // 订单创建时间
Sign string // 参数签名
} // 数据对象 成功时返回
Sign string // 签名 详见签名算法(data 中的数据参与签名)
}
type PayCallbackReq struct { type PayCallbackReq struct {
PayOrderId string `json:"payOrderId"` // 支付平台订单号 PayOrderId string `json:"payOrderId"` // 支付平台订单号
MchOrderNo string `json:"mchOrderNo"` // 商户订单号 MchOrderNo string `json:"mchOrderNo"` // 商户订单号
@ -67,7 +105,7 @@ type WithdrawReq struct {
MchNo string `json:"mchNo"` // 商户号 String 是 平台分配的商户号 MchNo string `json:"mchNo"` // 商户号 String 是 平台分配的商户号
AppId string `json:"appId"` // 商户应用ID String 是 商户应用ID AppId string `json:"appId"` // 商户应用ID String 是 商户应用ID
MchOrderNo string `json:"mchOrderNo"` // 商户生成的唯一订单号 String 是 商户保证唯一性 MchOrderNo string `json:"mchOrderNo"` // 商户生成的唯一订单号 String 是 商户保证唯一性
Amount string `json:"amount"` // 代付订单金额 BigDecimal 是 单位:卢比,最多保留两位小数 Amount int64 `json:"amount"` // 代付订单金额 BigDecimal 是 单位:卢比,最多保留两位小数
Currency string `json:"currency"` // 货币代码 String 是 货币代码:INR Currency string `json:"currency"` // 货币代码 String 是 货币代码:INR
EntryType string `json:"entryType"` // 入账方式 String 否 banks,upi,paytm,不传默认 banks(paytm 暂不支持) EntryType string `json:"entryType"` // 入账方式 String 否 banks,upi,paytm,不传默认 banks(paytm 暂不支持)
AccountNo string `json:"accountNo"` // 收款账号 String 是 收款账号, banks: 银行卡号,upi: UPI 账号,paytm:paytm 账号 AccountNo string `json:"accountNo"` // 收款账号 String 是 收款账号, banks: 银行卡号,upi: UPI 账号,paytm:paytm 账号
@ -79,9 +117,8 @@ type WithdrawReq struct {
BankName string `json:"bankName"` // 开户行名称 String 否 开户行名称 BankName string `json:"bankName"` // 开户行名称 String 否 开户行名称
ClientIp string `json:"clientIp"` // 客户端 IP String 否 客户端 IP ClientIp string `json:"clientIp"` // 客户端 IP String 否 客户端 IP
TransferDesc string `json:"transferDesc"` // 转账备注 String 是 转账备注 TransferDesc string `json:"transferDesc"` // 转账备注 String 是 转账备注
NotifyUrl string `json:"notifyUrl"` // 异步通知地址 String 是 异步通知地址,只支持 https // ChannelExtra string `json:"channelExtra"` // 特定渠道发起额外参数 String 否
ChannelExtra string `json:"channelExtra"` // 特定渠道发起额外参数 String 否 // ExtParam string `json:"extParam"` // 商户扩展参数 String 否
ExtParam string `json:"extParam"` // 商户扩展参数 String 否
EncryptPhone string `json:"encryptPhone"` // MD5 加密后的真实手机号 String 是 加密方法请参考签名文档中的 MD5 加密方法,用于黑名单校验 EncryptPhone string `json:"encryptPhone"` // MD5 加密后的真实手机号 String 是 加密方法请参考签名文档中的 MD5 加密方法,用于黑名单校验
EncryptEmail string `json:"encryptEmail"` // MD5 加密后的真实邮件地址 String 是 加密方法请参考签名文档中的 MD5 加密方法,用于黑名单校验 EncryptEmail string `json:"encryptEmail"` // MD5 加密后的真实邮件地址 String 是 加密方法请参考签名文档中的 MD5 加密方法,用于黑名单校验
DeviceId string `json:"deviceId"` // 用户设备 ID String 是 设备 ID:用来标识用户当前使用的设备,要求最好是唯一、并且与用户账号无关的。 DeviceId string `json:"deviceId"` // 用户设备 ID String 是 设备 ID:用来标识用户当前使用的设备,要求最好是唯一、并且与用户账号无关的。
@ -145,32 +182,3 @@ type QueryWithdrawResp struct {
} `json:"data"` } `json:"data"`
Sign string `json:"sign"` Sign string `json:"sign"`
} }
type QueryPayReq struct {
MchNo string `json:"mchNo"` // 商户号 String 是 平台分配的商户号
AppId string `json:"appId"` // 商户应用ID String 是 商户应用ID
MchOrderNo string `json:"mchOrderNo"` // 商户生成的唯一订单号 String 否 商户订单号与平台订单号必须传一个
PayOrderId string `json:"payOrderId"` // 平台订单号 String 否 商户订单号与平台订单号必须传一个
Sign string `json:"sign"` // 签名 String 是 详见签名算法
}
type QueryPayResp struct {
Code int // 返回码 2000:成功(仅代表请求成功,不代表业务成功);2010:系统异常;2011:参数有误;2012:数据库服务异常;9999:自定义业务异常
Msg string // 业务响应信息 成功:success
Data struct {
PayOrderId string // 支付平台订单号
MchOrderNo string // 商户订单号
MchNo string // 商户号
AppId string // 商户应用ID
Amount string // 支付金额 保留两位小数
RealAmount string // 实际支付金额 state=2 时,必须以这个金额为准,其它状态时,值为 0
State int // 订单状态 1 - 支付中 2 - 支付成功 3 - 支付失败 5 - 已退款
ErrCode string // 错误码
ErrMsg string // 错误描述
ExtParam string // 商户扩展参数
SuccessTime int64 // 订单支付成功时间
CreatedAt int64 // 订单创建时间
Sign string // 参数签名
} // 数据对象 成功时返回
Sign string // 签名 详见签名算法(data 中的数据参与签名)
}

@ -2,6 +2,7 @@ package allpay
import ( import (
"reflect" "reflect"
"server/modules/pay/agropay"
"server/modules/pay/antpay" "server/modules/pay/antpay"
"server/modules/pay/base" "server/modules/pay/base"
"server/modules/pay/ddaypay" "server/modules/pay/ddaypay"
@ -126,7 +127,7 @@ func init() {
All.RichPay = richpay.NewSub All.RichPay = richpay.NewSub
All.Moonpay2 = moonpay2.NewSub All.Moonpay2 = moonpay2.NewSub
All.MoneydealerPay = moneydealer.NewSub All.MoneydealerPay = moneydealer.NewSub
//All.AgroPay = agropay.NewSub All.Agropay = agropay.NewSub
All.JJPay = jjpay.NewSub All.JJPay = jjpay.NewSub
All.AntPay = antpay.NewSub All.AntPay = antpay.NewSub
All.VirgoPay = virgopay.NewSub All.VirgoPay = virgopay.NewSub

@ -55,3 +55,20 @@ func (b *Base) SignMD5WithStrEmpty(str string) string {
} }
return ret return ret
} }
func (b *Base) SignMD5Empty(send interface{}) string {
signStr := GetSignStrEmpty(send, b.SignPassStr...)
if b.PassKeyName {
signStr += b.SignKey
} else if b.KeyName == "" {
signStr += "&key=" + b.SignKey
} else {
signStr += "&" + b.KeyName + "=" + b.SignKey
}
log.Debug("final signStr:%s", signStr)
ret := util.CalculateMD5(signStr)
if b.ShouldSignUpper {
ret = strings.ToUpper(ret)
}
return ret
}

@ -62,6 +62,12 @@ func GetSignStrEmpty(send interface{}, pass ...string) string {
if shouldPass { if shouldPass {
continue continue
} }
switch m[i].(type) {
case string:
if m[i].(string) == "" {
continue
}
}
str = append(str, i) str = append(str, i)
} }
sort.Strings(str) sort.Strings(str)

@ -48,10 +48,10 @@ func LuckyWheelCfg(c *gin.Context) {
update bool update bool
) )
for _, wheelCfg := range luckyWheel.WheelCfgStr { for _, wheelCfg := range luckyWheel.WheelCfgStr {
if wheelCfg.LuckyType == 4 && //if wheelCfg.LuckyType == 4 &&
rechargeInfo.TotalRecharge < int64(wheelCfg.RechargeAmount[0]*common.DecimalDigits) { // 特殊转盘达到了才能看见 // rechargeInfo.TotalRecharge < int64(wheelCfg.RechargeAmount[0]*common.DecimalDigits) { // 特殊转盘达到了才能看见
continue // continue
} //}
lessKey := fmt.Sprintf("l%d", wheelCfg.LuckyType) lessKey := fmt.Sprintf("l%d", wheelCfg.LuckyType)
for _, rechargeAmount := range wheelCfg.RechargeAmount { for _, rechargeAmount := range wheelCfg.RechargeAmount {
if rechargeAmount == 0 { if rechargeAmount == 0 {

@ -405,7 +405,7 @@ type RechargeImp struct {
func (r *RechargeImp) CreateRecharge() error { func (r *RechargeImp) CreateRecharge() error {
if r.Order.OrderID == "" { if r.Order.OrderID == "" {
r.Order.OrderID = util.NewOrderID(r.UID) r.Order.OrderID = util.NewOrderID(r.UID, config.GetBase().ServerFlag)
} }
// r.Order.UID = r.UID // r.Order.UID = r.UID
// r.Order.Status = common.StatusROrderCreate // r.Order.Status = common.StatusROrderCreate
@ -426,7 +426,7 @@ type PayImp struct {
} }
func (p *PayImp) Recharge() int { func (p *PayImp) Recharge() int {
orderID := util.NewOrderID(p.base.UID) orderID := util.NewOrderID(p.base.UID, config.GetBase().ServerFlag)
// product := p.base.product // product := p.base.product
var resp *pb.InnerRechargeResp var resp *pb.InnerRechargeResp
var err error var err error

@ -403,7 +403,7 @@ func ShareNewWithdraw(c *gin.Context) {
} }
db.Mysql().Create(&common.RechargeOrder{ db.Mysql().Create(&common.RechargeOrder{
UID: uid, UID: uid,
OrderID: util.NewOrderID(uid), OrderID: util.NewOrderID(uid, config.GetBase().ServerFlag),
APIPayID: "", APIPayID: "",
// ProductID: common.ActivityIDPddShare, // ProductID: common.ActivityIDPddShare,
Amount: one.Amount, Amount: one.Amount,
@ -470,7 +470,7 @@ func ShareNewWithdraw(c *gin.Context) {
return return
} }
orderID := util.NewOrderID(uid) orderID := util.NewOrderID(uid, config.GetBase().ServerFlag)
order := &common.RechargeOrder{ order := &common.RechargeOrder{
UID: uid, UID: uid,

@ -360,7 +360,7 @@ func PlayerWithdrawBlock(c *gin.Context) {
} }
} }
orderID := "USDT" + util.NewOrderID(uid) orderID := "USDT" + util.NewOrderID(uid, config.GetBase().ServerFlag)
// 第一步,先扣钱 // 第一步,先扣钱
err := call.MineCurrencyProReal(&common.UpdateCurrency{ err := call.MineCurrencyProReal(&common.UpdateCurrency{
CurrencyBalance: &common.CurrencyBalance{ CurrencyBalance: &common.CurrencyBalance{
@ -507,7 +507,7 @@ func PlayerWithdraw(c *gin.Context) {
} }
} }
orderID := util.NewOrderID(uid) orderID := util.NewOrderID(uid, config.GetBase().ServerFlag)
// 第一步,先扣钱 // 第一步,先扣钱
pro := call.MineCurrencyProReal(&common.UpdateCurrency{ pro := call.MineCurrencyProReal(&common.UpdateCurrency{
CurrencyBalance: &common.CurrencyBalance{ CurrencyBalance: &common.CurrencyBalance{

@ -350,13 +350,16 @@ func RandomToken(uid int) string {
} }
// NewOrderID 新生成一个订单id // NewOrderID 新生成一个订单id
func NewOrderID(uid int) string { func NewOrderID(uid int, flag string) string {
orderID := "" orderID := ""
str := strconv.Itoa(uid) str := strconv.Itoa(uid)
for _, v := range str { for _, v := range str {
orderID += tokenMap[string(v)] orderID += tokenMap[string(v)]
} }
return orderID + strconv.FormatInt(time.Now().Unix(), 10) if flag == "a" {
flag = ""
}
return orderID + strconv.FormatInt(time.Now().Unix(), 10) + flag
} }
// SliceInt2Int32 数组转换 // SliceInt2Int32 数组转换

Loading…
Cancel
Save