@ -12,6 +12,7 @@ import (
"server/modules/web/values"
"server/pb"
"server/util"
"strings"
"time"
"github.com/gin-gonic/gin"
@ -279,7 +280,7 @@ func PlayerWithdraw(c *gin.Context) {
}
ip := a . GetRemoteIP ( )
payInfo , code := NewWithdraw ( req , uid , ip )
payInfo , code := NewWithdraw ( req , uid , ip , a . UUID )
if code != values . CodeOK {
a . Code = code
a . Msg = payInfo
@ -349,7 +350,7 @@ func PlayerWithdraw(c *gin.Context) {
con := call . GetVipCon ( uid )
realAmount := need // 实际打款
if con != nil && con . Fee > 0 {
realAmount = common . RoundCurrency ( req . CurrencyType , ( 1000 - int64 ( con . Fee ) ) * realAmount / 1000 )
realAmount = common . RoundCurrency ( req . CurrencyType , con . Fee ) * realAmount
}
var shouldAuto = false
@ -406,76 +407,86 @@ func PlayerWithdraw(c *gin.Context) {
}
// 返回值在code不为0的时候,代表错误msg
func NewWithdraw ( req * values . WithdrawReq , uid int , ip string ) ( string , int ) {
func NewWithdraw ( req * values . WithdrawReq , uid int , ip string , uuid string ) ( string , int ) {
one := common . WithdrawCommon { }
err := mapstructure . Decode ( req . PayAccount , & one )
if err != nil || ! one . PayType . Isvalid ( ) {
if err != nil || one . BankCode == "" {
log . Error ( "NewWithdrawImp err:%v,one:%+v" , err , one )
return "" , values . CodeParam
}
if one . PayType == common . PayTypeUPI {
return "The UPI channel is closed, please use the bank channel to withdraw cash." , values . CodeParam
}
if ! one . PayType . Isvalid ( ) {
log . Error ( "NewWithdrawImp err:%v,one:%+v" , err , one )
return "" , values . CodeParam
}
one . DeviceNo = uuid
one . AccountName = strings . TrimSpace ( one . AccountName )
one . BankCardNo = strings . TrimSpace ( one . BankCardNo )
one . BankCode = strings . TrimSpace ( one . BankCode )
one . IP = ip
// one.AccountName = strings.TrimSpace(one.AccountName)
// one.BankCardNo = strings.TrimSpace(one.BankCardNo)
// one.BankCode = strings.TrimSpace(one.BankCode)
// if one.DrawType == common.WithdrawTypeBank && len(one.BankCode) != 11 {
// return "The IFSC Code shall be 11 digital letters.", values.CodeParam
// }
// if one.DrawType == common.WithdrawTypeBank && one.BankCardNo == "" && one.AccountName == "" && one.Email == "" {
// log.Error("NewWithdrawImp 银行卡支付,银行卡号不能为空 one:%+v", one)
// return "", values.CodeParam
// }
// if one.DrawType != common.WithdrawTypeUPI && one.DrawType != common.WithdrawTypeBank {
// log.Error("NewWithdrawImp unknown draw type one:%+v", one)
// return "", values.CodeParam
// }
// user, _ := call.GetUserXInfo(uid, "mobile")
// if user.Mobile == "" {
// return "", values.CodeParam
// }
// mapstructure.Decode(req.PayAccount, &one)
// if one.Mobile == "" {
// one.Mobile = user.Mobile
// }
if one . PayType == common . PayTypeBank && len ( one . BankCode ) != 11 {
return "The IFSC Code shall be 11 digital letters." , values . CodeParam
}
if one . PayType == common . PayTypeBank && one . BankCardNo == "" && one . AccountName == "" && one . Email == "" {
log . Error ( "NewWithdrawImp 银行卡支付,银行卡号不能为空 one:%+v" , one )
return "The Bank Card No should not be empty." , values . CodeParam
}
user , _ := call . GetUserXInfo ( uid , "mobile" )
if user . Mobile == "" {
return "" , values . CodeParam
}
_ = mapstructure . Decode ( req . PayAccount , & one )
if one . Mobile == "" {
one . Mobile = user . Mobile
}
// 判断是否是拉黑用户,拉黑用户不让代付
// blackData := &common.BlackList{Phone: one.Mobile, PayAccount: one.BankCardNo, Email: one.Email, Name: one.AccountName}
// if one.DrawType == common.WithdrawTypeUPI {
// blackData.PayAccount = one.BankCode
// }
// if call.BlackListAndKick(uid, blackData) {
// return "", values.CodeRetry
// }
blackData := & common . BlackList { Phone : one . Mobile , PayAccount : one . BankCardNo , Email : one . Email , Name : one . AccountName }
if one . PayType == common . PayTypeUPI {
blackData . PayAccount = one . BankCode
}
if call . BlackListAndKick ( uid , blackData ) {
return "" , values . CodeRetry
}
// 如果是银行那卡代付,验证ifsc
// if one.DrawType == common.WithdrawTypeBank {
// if !call.CheckIFSC(one.BankCode) {
// return "The IFSC Code is invalid.", values.CodeParam
// }
// }
if one . PayType == common . PayTypeBank {
if ! call . CheckIFSC ( one . BankCode ) {
return "The IFSC Code is invalid." , values . CodeParam
}
}
// 查询该银行卡是否已经绑定其他账号
// pi := &common.PayInfo{UID: uid}
// db.Mysql().Get(pi)
// if one.DrawType == common.WithdrawTypeBank {
// if pi.BankCardNo != one.BankCardNo {
// sql := fmt.Sprintf("bank_card_no = '%v'", one.BankCardNo)
// if db.Mysql().Count(&common.PayInfo{}, sql) >= int64(config.GetConfig().Web.MaxBankCardCount) {
// return "", values.CodeBankCardNoLimit
// }
// }
// } else if one.DrawType == common.WithdrawTypeUPI { // UPI
// if pi.BankCode != one.BankCode {
// sql := fmt.Sprintf("bank_code = '%v'", one.BankCode)
// if db.Mysql().Count(&common.PayInfo{}, sql) >= int64(config.GetConfig().Web.MaxBankCardCount) {
// return "", values.CodeBankCardNoLimit
// }
// }
// }
pi := & common . PayInfo { UID : uid }
_ = db . Mysql ( ) . Get ( pi )
if one . PayType == common . PayTypeBank {
if pi . BankCardNo != one . BankCardNo {
sql := fmt . Sprintf ( "bank_card_no = '%v'" , one . BankCardNo )
if db . Mysql ( ) . Count ( & common . PayInfo { } , sql ) >= int64 ( config . GetConfig ( ) . Web . MaxBankCardCount ) {
return "" , values . CodeBankCardNoLimit
}
}
} else if one . PayType == common . PayTypeUPI { // UPI
if pi . BankCode != one . BankCode {
sql := fmt . Sprintf ( "bank_code = '%v'" , one . BankCode )
if db . Mysql ( ) . Count ( & common . PayInfo { } , sql ) >= int64 ( config . GetConfig ( ) . Web . MaxBankCardCount ) {
return "" , values . CodeBankCardNoLimit
}
}
}
info := & common . PayInfo {
UID : uid ,
Name : one . Name ,
Mobile : one . Mobile ,
Email : one . Email ,
PayType : one . PayType ,
Number : one . Number ,
UID : uid ,
DeviceNo : one . DeviceNo ,
// Device: one.Device,
PhoneModel : one . Model ,
OperatorOs : one . OperatorOs ,
AccountName : one . AccountName ,
Mobile : one . Mobile ,
Email : one . Email ,
BankCardNo : one . BankCardNo ,
PayType : one . PayType ,
BankCode : one . BankCode ,
// Address: one.Address,
}
if _ , err := db . Mysql ( ) . Upsert ( fmt . Sprintf ( "uid = %v" , uid ) , info ) ; err != nil {
return "" , values . CodeParam
@ -584,7 +595,10 @@ func (p *PayWithdraw) Withdraw() error {
req . Name = send . Name
req . Email = send . Email
req . PayType = int64 ( send . PayType )
req . Address = send . Address
req . PayCode = send . BankCode
req . CardNo = send . BankCardNo
req . Name = send . AccountName
}
ret , err := call . Withdraw ( req )
if ret != nil {
@ -594,7 +608,10 @@ func (p *PayWithdraw) Withdraw() error {
log . Error ( "err:%v" , err )
return err
}
or := & common . RechargeOrder { Status : common . StatusROrderPay , APIPayID : ret . APIOrderID , PaySource : common . PaySourceModulePay , PayChannel : int ( ret . Channel ) }
or := & common . WithdrawOrder {
Status : common . StatusROrderPay , APIPayID : ret . APIOrderID ,
PaySource : common . PaySourceModulePay }
or . ID = order . ID
res := db . Mysql ( ) . C ( ) . Model ( order ) . Updates ( or )
err = res . Error
@ -629,7 +646,9 @@ func (p *PayWithdraw) AutoWithdraw() error {
req . Name = send . Name
req . Email = send . Email
req . PayType = int64 ( send . PayType )
req . Address = send . Address
req . BankName = send . BankName
req . CardNo = send . BankCode
// req.Address = send.Address
// req.Number = send.Number
} else {
req . Address = order . PayAccount