You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
221 lines
9.8 KiB
221 lines
9.8 KiB
package pgsoft |
|
|
|
import ( |
|
"io" |
|
"net/http" |
|
"net/url" |
|
"strings" |
|
"time" |
|
|
|
"github.com/liangdas/mqant/log" |
|
) |
|
|
|
const ( |
|
APIURL = "https://api.pg-bo.co" |
|
APITest = "https://api.pg-bo.me" |
|
// APIURL = "https://m.pgr-nmga.com" |
|
// APITest = "https://m.pg-redirect.net" |
|
OperatorTokenTest = "164a855bf5129a8448dffc31ff9ec86c" |
|
SecretKeyTest = "c441ef6f2297b8390e2d2dad353599fa" |
|
SaltTest = "d6b791314cd04dc6d82e372a11bfd7bd" |
|
OperatorTokenRelease = "4735860F-03A6-5C31-EDD3-3484B0B8E8A0" |
|
SecretKeyRelease = "687CCAFA0D12C0081F48E7D307FD18E4" |
|
SaltRelease = "85238F6B2158D393F447D5F03CA047FB" |
|
) |
|
|
|
var ( |
|
OperatorToken = "" |
|
SecretKey = "" |
|
Salt = "" |
|
) |
|
|
|
var ( |
|
API = "" |
|
) |
|
|
|
type Error struct { |
|
Code string |
|
Message string |
|
} |
|
|
|
type CommonResp struct { |
|
Data interface{} `json:"data"` |
|
Error *Error `json:"error"` |
|
} |
|
|
|
type verifySessionReq struct { |
|
OperatorToken string `json:"operator_token"` |
|
SecretKey string `json:"secret_key"` |
|
OperatorPlayerSession string `json:"operator_player_session"` |
|
GameID int `json:"game_id"` |
|
IP string `json:"ip"` |
|
CustomParameter string `json:"custom_parameter"` |
|
BetType int `json:"bet_type"` |
|
} |
|
|
|
type verifySessionResp struct { |
|
PlayerName string `json:"player_name"` |
|
Nickname string `json:"nickname"` |
|
Currency string `json:"currency"` |
|
} |
|
|
|
type CashGetReq struct { |
|
OperatorToken string `json:"operator_token"` |
|
SecretKey string `json:"secret_key"` |
|
PlayerName string `json:"player_name"` |
|
OperatorPlayerSession string `json:"operator_player_session"` |
|
GameID int `json:"game_id"` |
|
} |
|
|
|
type CashGetResp struct { |
|
CurrencyCode string `json:"currency_code"` |
|
BalanceAmount float64 `json:"balance_amount"` |
|
UpdatedTime int64 `json:"updated_time"` |
|
} |
|
|
|
type TransInOutReq struct { |
|
OperatorToken string `json:"operator_token"` |
|
SecretKey string `json:"secret_key"` |
|
OperatorPlayerSession string `json:"operator_player_session"` |
|
PlayerName string `json:"player_name"` |
|
GameID int `json:"game_id"` |
|
ParentBetID string `json:"parent_bet_id"` |
|
BetID string `json:"bet_id"` |
|
CurrencyCode string `json:"currency_code"` |
|
BetAmount float64 `json:"bet_amount"` |
|
WinAmount float64 `json:"win_amount"` |
|
TransferAmount float64 `json:"transfer_amount"` |
|
TansactionID string `json:"transaction_id"` |
|
WalletType string `json:"wallet_type"` |
|
BetType int `json:"bet_type"` |
|
Platform string `json:"platform"` |
|
CreateTime int64 `json:"create_time"` |
|
UpdatedTime int64 `json:"updated_time"` |
|
IsValidateBet bool `json:"is_validate_bet"` // 表示该请求是否是为进行验证而重新发送的交易 True: 重新发送的交易 False: 正常交易 |
|
IsAdjustment bool `json:"is_adjustment"` // 表示该请求是否是待处理投注的调整或正常交易 True: 调整 False: 正常交易 |
|
IsParentZeroStake bool `json:"is_parent_zero_stake"` // 表示该请求在第一轮投注中的投注金 额是否为0 True: 在第一轮投注中的投注金额为0(针对至尊百家乐的飞牌操作)False: 在第一轮投注中的投注金额大于 0 |
|
IsFeature bool `json:"is_feature"` // 表示旋转类型 True: 特色旋转 False: 普通旋转 |
|
IsFeatureBuy bool `json:"is_feature_buy"` // 表示购买奖金游戏 注:仅适用于具有购买奖金游戏功能的游戏 |
|
IsWager bool `json:"is_wager"` // 表示该交易是否为投注 |
|
IsEndRound bool `json:"is_end_round"` // 表示当前游戏投注是否已结束 |
|
FreeGameTransactionID string `json:"free_game_transaction_id"` // 免费游戏的唯一标识符 只有在免费游戏分配给玩家时才会出现。注:仅适用于以外部应用编程接口API创建的免费游戏 |
|
FreeGameName string `json:"free_game_name"` // 免费游戏名称只有在免费游戏分配给玩家时才会出现。 |
|
FreeGameID int `json:"free_game_id"` // 免费游戏的唯一标识符 只有在免费游戏分配给玩家时才会出现。 |
|
IsMinusCount bool `json:"is_minus_count"` // 免费游戏中的旋转类型 True: 普通旋转(扣除免费游戏次数) False: 免费旋转 |
|
BonusTransactionID string `json:"bonus_transaction_id"` // 红利游戏的唯一标识符 只有在红利分配给玩家时才会出现。注:仅适用于以外部应用编程接口API创建的红利游戏 |
|
BonusName string `json:"bonus_name"` // 红利游戏名称 只有在红利分配给玩家时才会出现。 |
|
BonusID int `json:"bonus_id"` // 红利游戏的唯一标识符 只有在红利分配给玩家时才会出现。 |
|
BonusBalanceAmount float64 `json:"bonus_balance_amount"` // 红利钱包的红利总金额 只有在玩家选择用现金完成红利时才会出现。 |
|
BonusRatioAmount float64 `json:"bonus_ratio_amount"` // 红利游戏中玩家需要达到的流水金额 只有在玩家选择用现金完成红利时才会出现。 |
|
} |
|
|
|
type TransInOutResp struct { |
|
CurrencyCode string `json:"currency_code"` |
|
BalanceAmount float64 `json:"balance_amount"` |
|
UpdatedTime int64 `json:"updated_time"` |
|
} |
|
|
|
type AdjustmentReq struct { |
|
OperatorToken string `json:"operator_token"` |
|
SecretKey string `json:"secret_key"` |
|
PlayerName string `json:"player_name"` |
|
CurrencyCode string `json:"currency_code"` |
|
BetType int `json:"bet_type"` |
|
TransferAmount float64 `json:"transfer_amount"` |
|
AdjustmentTime int64 `json:"adjustment_time"` |
|
AdjustmentID string `json:"adjustment_id"` |
|
AdjustmentTransaction string `json:"adjustment_transaction_id"` |
|
TransactionType string |
|
} |
|
|
|
type AdjustmentResp struct { |
|
AdjustAmount float64 `json:"adjust_amount"` |
|
BalanceBefore float64 `json:"balance_before"` |
|
BalanceAfter float64 `json:"balance_after"` |
|
UpdatedTime int64 `json:"updated_time"` |
|
} |
|
|
|
// BetReq 请求下注 |
|
type BetReq struct { |
|
ReqID string `json:"reqId"` // 请求识别码 |
|
Token string `json:"token"` // token |
|
Currency string `json:"Currency"` |
|
Game int `json:"game"` // 游戏代码 |
|
Round int64 `json:"round"` // 注单唯一识别值 |
|
WagersTime int64 `json:"wagersTime"` // 注单结账时间戳 |
|
BetAmount float64 `json:"betAmount"` // 押注金额 |
|
WinLoseAmount float64 `json:"winloseAmount"` // 发奖金额 |
|
IsFreeRound bool `json:"isFreeRound"` // 为true时表示离线开奖 |
|
UserId string `json:"userId"` // 玩家账号唯一值 |
|
TransactionID int64 `json:"transactionId"` // 离线开奖触发局局号 |
|
Platform string `json:"platform"` // 玩家装置信息 |
|
} |
|
|
|
type BetResp struct { |
|
ErrorCode int `json:"errorCode"` // 0成功 |
|
Message string `json:"message"` // 信息 |
|
UserName string `json:"username"` // 账号唯一识别名称 |
|
Currency string `json:"currency"` // 身上持有币种 |
|
Balance float64 `json:"balance"` // 余额 |
|
TxID int64 `json:"txId"` // 营运商注单号 |
|
Token string `json:"token"` // token |
|
} |
|
|
|
// SessionBetReq 请求下注 |
|
type SessionBetReq struct { |
|
ReqID string `json:"reqId"` // 请求识别码 |
|
Token string `json:"token"` // token |
|
Currency string `json:"Currency"` |
|
Game int `json:"game"` // 游戏代码 |
|
Round int64 `json:"round"` // 注单唯一识别值 |
|
WagersTime int64 `json:"wagersTime"` // 注单结账时间戳 |
|
BetAmount float64 `json:"betAmount"` // 押注金额 |
|
WinLoseAmount float64 `json:"winloseAmount"` // 发奖金额 |
|
SessionID int64 `json:"sessionId"` // 牌局唯一值 |
|
Type int `json:"type"` // 注单类型 1下注 2结算 |
|
UserId string `json:"userId"` // 玩家账号唯一值 |
|
TurnOver float64 `json:"turnover"` // 有效投注 |
|
Preserve float64 `json:"preserve"` // 有效投注 |
|
Platform string `json:"platform"` // 玩家装置信息 |
|
SessionTotalBet float64 `json:"sessionTotalBet"` // 整一局总投注 |
|
} |
|
|
|
// HttpPostForm post请求 |
|
func HttpPostForm(target string, send url.Values) (string, error) { |
|
log.Debug("send:%+v", send.Encode()) |
|
// ul += fmt.Sprintf("%v=%v", "sign", util.CalculateMD5(oid+strconv.Itoa(apiReq.AdvChannel)+apiReq.ClientDate+apiReq.Money+values.ZYAppKey)) |
|
|
|
req, err := http.NewRequest("POST", target, strings.NewReader(send.Encode())) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
return "", err |
|
} |
|
req.Header.Set("Content-Type", "application/x-www-form-urlencoded") |
|
req.Header.Set("Cache-Control", "no-cache, no-store, must-revalidate") |
|
// req.Header.Set("Accept", "application/problem+json") |
|
// req.Header.Set("Authorization", "api-key "+config.GetConfig().Web.OrangePay.APISecret) |
|
// req.Header.Set("Authorization", "api-key "+OrangeAPISecret) |
|
|
|
client := &http.Client{ |
|
Timeout: 5 * time.Second, |
|
} |
|
log.Debug("req:%+v", req) |
|
resp, err := client.Do(req) |
|
if err != nil { |
|
log.Error("http post call err:%v", err) |
|
return "", err |
|
} |
|
// if resp.StatusCode != http.StatusOK { |
|
// log.Error("req fail err code:%v", resp.StatusCode) |
|
// return errors.New("http req fail") |
|
// } |
|
defer resp.Body.Close() |
|
body, _ := io.ReadAll(resp.Body) |
|
res := string(body) |
|
log.Debug("response Body%v:", res) |
|
// if err := json.Unmarshal(body, ret); err != nil { |
|
// log.Error("unmarshal fail err:%v", err) |
|
// return err |
|
// } |
|
return res, nil |
|
}
|
|
|