变更玩家余额
变更玩家余额,该API接口由商户(运营商)提供,供游戏平台进行调用
该接口会被多次调用,下注、取消下注、返奖、结束游戏等,都会调用1次。
每次调用changeType栏位值所有不同。
请求地址
POST {API_URL_ROOT}/player/changeBalance
注意:此地址,可在商户后台进行配置,但输入、输出参数需要满足下面要求
Request参数
Header内容
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
| sign | 是 | string | 签名,使用签名算法计算得到 |
| timestamp | 是 | int | 时间戳,单位秒,从1970年1月1日到现在所经过的秒数,如:1741837297 |
| Accept-Language | 是 | string | 接收的语言编码,参考语言列表,如:zh,en,以便在报错的时候,提供响应的语言错误信息。 |
| Content-Type | 是 | string | "application/json; charset=utf-8" |
BODY内容 **
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
| recordId | 是 | string | 游戏记录ID,区分玩家每次游戏的唯一标识 |
| txId | 是 | string | 交易ID,区分每次调用请求唯一标识 |
| tenantId | 是 | int | 商户ID, 平台给你分配的唯一的整数 |
| userId | 是 | string | 商户的玩家ID, 能够区分每一个玩家的ID |
| gameId | 是 | int | 游戏ID |
| changeType | 是 | int | 变更类型, 枚举值列表见下面 changeType类型说明 |
| betType | 是 | int | 下注类型, 枚举值列表见下面 |
| betAmount | 是 | double | 下注金额 |
| bonus | 是 | double | 返奖金额 |
| multiple | 否 | double | 返奖倍数,有时候此值与bonus/betAmount会有稍有差异,如:预设指定倍数提现,返奖金额又触发了最大返奖金额限制时会有所不同 |
| roundId | 否 | string | 对局ID, 多用于多人游戏,标识每一局游戏唯一ID |
| area | 否 | int | 区域ID, 默认是0,有的游戏有区域下注,用于区分不同区域 |
| currency | 否 | string | 币种 |
| isCompleted | 否 | bool | 是否完成,返奖时此值必输,最后一次方返奖的时候,可以直接设置本栏位值=true,就不需要再调用结束游戏请求(changeType=4),少调一次请求 |
| isRetry | 否 | bool | 是否重试,有时一次请求会超时或是正常返回结果,将会触发6次重试机制,直到成功返回结果,重试时此值为true |
| parentId | 否 | string | 父亲ID,slot游戏,有会触发免费旋转的场景,如果当前记录是免费旋转的记录时,parentId就是原下注的记录ID,同时betType=3,betAmount=0 标识免费旋转 |
changeType值不同,各个字段的值也会有所不同,共有4种类型:正常下注,取消下注,返奖,游戏结束等
下注并返奖场景,changeType=0 betAmount栏位有值,bonus栏位值为0,bonus栏位值>0就有返奖,=0就是没有返奖 multiple栏位是返奖倍数,有值则取此值,没有值,则系统会使用bonus/betAmount计算 isCompleted栏位值=true,直接结束此次下注
正常下注场景,changeType=1 betAmount栏位有值,bonus栏位值为0
取消下注场景,changeType=2 betAmount栏位有值,下注时金额
返奖场景,changeType=3 betAmount栏位值为0,bonus栏位有值 返奖,个别游戏可能会有多次调用 multiple栏位是返奖倍数,有值则取此值,没有值,则系统会使用bonus/betAmount计算 最后一次返奖时,可以设置isCompleted=true,表示本局游戏已经结束,和再调用一次本接口changeType=4效果相同
结束游戏场景,changeType=4 betAmount栏位值为0,bonus栏位值为0
slot游戏触发免费旋转的场景,changeType=0 betType=3 标识此次投注是免费旋转,同时,parentId有值,值为触发本次免费旋转的原下注记录ID,免费旋转可能会有多次返奖,每次返奖的recordId都不一样
示例
一共分6种情况
//下注并返奖场景:
{
"recordId": "682ed6edce1c812d736c4876",
"txId": "682ed6edce1c812d736c4877",
"tenantId": 2317,
"userId": "t20339",
"gameId": 2001,
"changeType": 0,
"betType": 0,
"betAmount": 100.00,
"bonus": 30,
"multiple": 0.30,
"roundId": "12353",
"area": 0,
"currency": "BRL",
"details": null,
"isCompleted": true
}
//正常下注场景:
{
"recordId": "682ed6edce1c812d736c4876",
"tenantId": 2317,
"userId": "t20339",
"gameId": 2001,
"changeType": 1,
"betType": 1,
"betAmount": 100.00,
"bonus": 0,
"multiple": 0,
"roundId": "12353",
"area": 0,
"currency": "BRL",
"details": null,
"isCompleted": false
}
//取消下注场景:
{
"recordId": "682ed6edce1c812d736c4876",
"tenantId": 2317,
"userId": "t20339",
"gameId": 2001,
"changeType": 2,
"betType": 1,
"betAmount": 100.00,
"bonus": 0,
"multiple": 0,
"roundId": "12353",
"area": 0,
"currency": "BRL",
"details": null,
"isCompleted": false
}
//返奖场景:
{
"recordId": "682ed6edce1c812d736c4876",
"tenantId": 2317,
"userId": "t20339",
"gameId": 2001,
"changeType": 3,
"betType": 1,
"betAmount": 0,
"bonus": 50.00,
"currency": "BRL",
"details": null,
"isCompleted": true
}
//结束游戏场景:
{
"recordId": "682ed6edce1c812d736c4876",
"tenantId": 2317,
"userId": "t20339",
"gameId": 2001,
"changeType": 4,
"betType": 1,
"betAmount": 0,
"bonus": 0,
"multiple": 0,
"roundId": "12353",
"area": 0,
"currency": "BRL",
"details": null,
"isCompleted": true
}
//slot游戏免费旋转场景:
{
"recordId": "682ed6edce1c812d73ac2899",
"tenantId": 2317,
"userId": "t20339",
"gameId": 2001,
"changeType": 0,
"betType": 3,
"betAmount": 0,
"bonus": 0,
"multiple": 0,
"roundId": "12353",
"area": 0,
"currency": "BRL",
"details": null,
"isCompleted": true,
"parentId": "682ed6edce1c812d736c4876"
}
Response参数
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
| tenantId | 是 | int | 商户ID, 平台给你分配的唯一的整数 |
| userId | 是 | string | 商户的用户ID, 能够区分每一个玩家的ID |
| balance | 否 | double | 玩家余额,不管是否扣减是否成功,都应该正确得返回当前账户余额,并更新账户余额 |
| currency | 否 | string | 游戏币种 |
注意: 不管isSuccess为true还是false,都应该正确得返回当前账户余额,系统会根据balance值更新当前账户余额,如果当前账户状态异常,不能玩游戏,balance一定返回0
示例
{
"isSuccess": true,
"code": 0,
"data": {
"tenantId": 1,
"userId": "t1_276682",
"balance": 100000,
"currency": "BRL"
}
}
//余额不足场景:
{
"isSuccess": false,
"code": xxx,//商户余额不足的错误代码,比如:2012
"message":"余额不足,下注失败",
"data": {
"tenantId": 1,
"userId": "t1_276682",
"balance": 1.0, //当前余额
"currency": "BRL"
}
}
//玩家被禁用场景:
{
"isSuccess": false,
"code": xxx,//商户状态异常的错误代码,比如:2013
"message":"玩家被禁用,下注失败",
"data": {
"tenantId": 1,
"userId": "t1_276682",
"balance": 0.0, //强制为0
"currency": "BRL"
}
}
betType 下注类型值列表
| 值 | 说明 |
|---|---|
| 1 | 正常下注 |
| 2 | 连消 |
| 3 | 免费旋转 |
| 4 | 重转 |
changeType类型说明
| 值 | 说明 |
|---|---|
| 0 | 下注并返奖 |
| 1 | 正常下注 |
| 2 | 取消下注 |
| 3 | 返奖 |
| 4 | 结束游戏 |
游戏流程举例说明:
非直接下注并返奖的场景,会有下面几个流程
正常下注返奖 游戏下注 -> 游戏返奖(isCompleted=true);对应changeType值,从1 -> 3;玩家在游戏内进行投注,并中奖结算,对局结束;此情况适用大部分游戏流程,最后一次返奖isCompleted=true,推荐此流程,少调用一次接口 游戏下注 -> 游戏返奖 -> 游戏对局结束; 对应changeType值,从1 -> 3 -> 4;玩家在游戏内进行投注,并中奖结算,对局结束;此情况适用大部分游戏流程;
取消下注 游戏下注 -> 取消下注;对应changeType值,1 -> 2;玩家在游戏内进行投注,对局开始前自主取消下注,一般为百人场、Mini Game类游戏;取消下注的recordId与下注的recordId一致;
未返奖 游戏下注 -> 未中奖 -> 游戏对局结束;对应changeType值,从1 -> 4;玩家在游戏内进行投注,当局未中奖,验证对局结束;
一次下注多次返奖 此种情况一般为连消类slot、slot游戏进入特殊玩法、彩票类游戏,玩家在游戏内进行投注,此局中奖多次直到对局结束。 游戏下注 -> 游戏返奖 -> 游戏返奖 -> 游戏返奖········ -> 游戏返奖(isCompleted=true);对应changeType值,从1 -> 3 -> 3 -> ······· -> 3;最后一次返奖isCompleted=true,推荐此流程,少调用一次接口 游戏下注 -> 游戏返奖 -> 游戏返奖 -> 游戏返奖········ -> 游戏对局结束;对应changeType值,从1 -> 3 -> 3 -> ······· -> 4;