132 lines
4.5 KiB
Go
132 lines
4.5 KiB
Go
package rchgutil
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"net/http"
|
||
"strconv"
|
||
"time"
|
||
|
||
"91porn-server/common/httputil"
|
||
"91porn-server/common/log"
|
||
"91porn-server/models/v/wdordmod"
|
||
"91porn-server/web/webg"
|
||
)
|
||
|
||
type Exchg struct {
|
||
TransNo string `json:"transNo" bson:"transNo"` //订单号
|
||
UID string `json:"uid" bson:"uid"` //用户id
|
||
Name string `json:"name" bson:"name"` //用户名
|
||
PayMoney int64 `json:"payMoney" bson:"payMoney"` //实际到账
|
||
PayType string `json:"payType" bson:"payType" binding:"required"` //提现方式,alipay,bankcard
|
||
ActName string `json:"actName" bson:"actName"` //交易账户持有人
|
||
Act string `json:"act" bson:"act"` //交易账户
|
||
UserIP string `json:"userIp" bson:"userIp"` //用户ip
|
||
DeviceType string `json:"deviceType" bson:"deviceType"` //设备类型
|
||
DevID string `json:"devID" bson:"devID"` //设备id
|
||
CheckedAt time.Time `json:"checkedAt" bson:"checkedAt"` //审核时间
|
||
NotifyUrl string `json:"notifyUrl"` //回调地址
|
||
ProductType int `json:"productType"` //支付产品类型 0 站群 1 棋牌
|
||
Rate float64 `json:"rate"` //费率
|
||
PlatformID string `json:"platformID"`
|
||
BankCode string `json:"bankCode" bson:"bankCode"` //银行编码
|
||
}
|
||
|
||
type ExchgBack struct {
|
||
OID string `json:"oid" ` //支付平台订单号
|
||
Money int64 `json:"money"` //兑换金额
|
||
TradeNo string `json:"tradeNo"` //商户订单号
|
||
Status string `json:"status"`
|
||
Mark string `json:"mark"` //拒绝兑换理由
|
||
}
|
||
|
||
type ExchgBackMsg struct {
|
||
Code int `json:"code"`
|
||
Err string `json:"err"`
|
||
}
|
||
|
||
type ExchgMsg struct {
|
||
OID string `json:"oid"`
|
||
Code int `json:"code"`
|
||
Err string `json:"err"`
|
||
Msg string `json:"msg"`
|
||
}
|
||
|
||
// ToPay 支付发起
|
||
func (this *Exchg) ToPay() ExchgMsg {
|
||
var msg ExchgMsg
|
||
var errlog string
|
||
this.fill()
|
||
code, err := httputil.DefaultClientPostJsonWithResp(&msg, this.GetURL(), this.GetHeader(), this.GetBody())
|
||
if err != nil {
|
||
msg.Code = UNKNOWError
|
||
errlog = fmt.Sprintf("recharge ToPay Http.PostJson fail error:%+v/,data:%+v;", err, this)
|
||
msg.Err = errlog
|
||
log.Error(errlog)
|
||
return msg
|
||
}
|
||
if code != http.StatusOK {
|
||
msg.Code = UNKNOWError
|
||
errlog = fmt.Sprintf("recharge ToPay Http.PostJson fail error:%+v/,data:%+v;", err, code)
|
||
msg.Err = errlog
|
||
log.Error(errlog)
|
||
return msg
|
||
}
|
||
return msg
|
||
}
|
||
|
||
func (this *Exchg) fill() {
|
||
this.PlatformID = "91PO"
|
||
this.NotifyUrl = webg.Conf.URL.LocalAppUrl + "/3rd/defray/callback/echg/bill"
|
||
}
|
||
|
||
// GetBody 获取请求body
|
||
func (this *Exchg) GetBody() interface{} {
|
||
jsonStr, err := json.Marshal(this)
|
||
if err != nil {
|
||
log.Info(fmt.Sprintf("excharge json.Marshal is fail error:%+v/data:%+v", err, this))
|
||
}
|
||
sstr := string(jsonStr)
|
||
log.Info(fmt.Sprintf("recharg topay json data :%+v", sstr))
|
||
return jsonStr
|
||
}
|
||
|
||
// GetHeader 获取请求头信息
|
||
func (this *Exchg) GetHeader() map[string]string {
|
||
header := make(map[string]string, 0)
|
||
return header
|
||
}
|
||
|
||
// GetURL 获取请求地址
|
||
func (*Exchg) GetURL() string {
|
||
return webg.Conf.URL.TransactionUrl + "/api/recharge/withdraw"
|
||
}
|
||
|
||
// 防洗钱校验
|
||
// 提现防洗钱限制, 防止用户用usdt充值, 其它方式提现洗钱
|
||
// 例如: 用户usdt充值1000, 则用户只能用usdt提现1000,
|
||
//
|
||
// 且, 用户usdt充值1000未提现时, 此时用其它方式提现,
|
||
// 则, 余额 - 提现金额 >= 1000
|
||
//
|
||
// eType: 提现方式
|
||
// allMoney: 可提现总金额
|
||
// money: 提现金额
|
||
// usdtAmount: usdt可提现额度
|
||
// uid: 提现用户id
|
||
func CheckMoney(eType string, allMoney, money, usdtAmount int64, uid uint64) bool {
|
||
//usdt方式提现
|
||
if eType == wdordmod.TypeUsdt && money*100 > usdtAmount {
|
||
log.Error("用户: " + strconv.FormatInt(int64(uid), 10) + ", USDT方式可提现余额为: " + strconv.FormatInt(usdtAmount, 10))
|
||
return false
|
||
}
|
||
//可提现金额
|
||
ktx_Amount := allMoney*100 - usdtAmount
|
||
//非usdt方式提现
|
||
if eType != wdordmod.TypeUsdt && ktx_Amount < money*100 {
|
||
log.Error("用户: " + strconv.FormatInt(int64(uid), 10) + ", 当前方式可提现金额为: " + strconv.FormatInt(ktx_Amount, 10) + ", 其它金额请通过USDT提现!")
|
||
return false
|
||
}
|
||
return true
|
||
}
|