变更玩家余额

变更玩家余额,该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种类型:正常下注,取消下注,返奖,游戏结束等

  1. 下注并返奖场景,changeType=0 betAmount栏位有值,bonus栏位值为0,bonus栏位值>0就有返奖,=0就是没有返奖 multiple栏位是返奖倍数,有值则取此值,没有值,则系统会使用bonus/betAmount计算 isCompleted栏位值=true,直接结束此次下注

  2. 正常下注场景,changeType=1 betAmount栏位有值,bonus栏位值为0

  3. 取消下注场景,changeType=2 betAmount栏位有值,下注时金额

  4. 返奖场景,changeType=3 betAmount栏位值为0,bonus栏位有值 返奖,个别游戏可能会有多次调用 multiple栏位是返奖倍数,有值则取此值,没有值,则系统会使用bonus/betAmount计算 最后一次返奖时,可以设置isCompleted=true,表示本局游戏已经结束,和再调用一次本接口changeType=4效果相同

  5. 结束游戏场景,changeType=4 betAmount栏位值为0,bonus栏位值为0

  6. 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 | code | message | data | 场景描述 | | true | 0 | null | {"tenantId":1,"userId":"276682","balance":100000,"currency":"BRL"} | 执行成功,正常返回 | | false | 1 | 类似于:无效请求或参数验证错误,内容可以自定义 | {"tenantId":1,"userId":"276682","balance":100000,"currency":"BRL"} | 请求参数验证、商户自己的业务验证,能返回用户余额就返回余额,可以根据自己的业务情况返回message内容,无固定的messsage | | false | 2 | 获取用户余额失败 | 无 | 获取玩家余额失败,无法返回玩家余额 | | false | 3 | 玩家余额不足 | {"tenantId":1,"userId":"276682","balance":0.5,"currency":"BRL"} | 玩家余额不足,玩家余额小于下注金额 | | false | 4 | 更新余额失败 | {"tenantId":1,"userId":"276682","balance":0.5,"currency":"BRL"} | 更新余额失败,返回的余额是上次成功更新后的余额 | | false | 5 | 订单已存在或重复下注 | {"tenantId":1,"userId":"276682","balance":0.5,"currency":"BRL"} | recordId已存在,再次调用changeType=0或1,报此错误,同一个recordId只能下注一次,幂等验证 | | false | 6 | 订单不存在 | {"tenantId":1,"userId":"276682","balance":100000,"currency":"BRL"} | 取消、返奖、结束时,没有查询到recordId的订单 | | false | 7 | 订单已取消 | {"tenantId":1,"userId":"276682","balance":100000,"currency":"BRL"} | 订单已经取消,再次取消,就会报此错误 | | false | 8 | 订单已结算 | {"tenantId":1,"userId":"276682","balance":100000,"currency":"BRL"} | 订单已经返奖或是结束,再次调用返奖、结束、changeType=0合并模式,报此错误 | | false | 9 | 订单状态异常 | {"tenantId":1,"userId":"276682","balance":100000,"currency":"BRL", changeType: 4} | 对已取消的订单进行返奖或是结束,对已返奖或是结束的订单进行取消,报此错误,并把当前订单的changeType返回,这种情况发生在调用商户接口超时或是报错,没有正确得到响应结果,无法判定订单当前状态 | | false | 500 | 系统异常 | 无 | 内部服务器错误,建议商户在整个处理订单的最外层统一处理一下异常 |

我们会在处理上面code从0-9的所有场景,其余的场景不做处理

示例

{
  "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 结束游戏

游戏流程举例说明:

非直接下注并返奖的场景,会有下面几个流程

  1. 正常下注返奖 游戏下注 -> 游戏返奖(isCompleted=true);对应changeType值,从1 -> 3;玩家在游戏内进行投注,并中奖结算,对局结束;此情况适用大部分游戏流程,最后一次返奖isCompleted=true,推荐此流程,少调用一次接口 游戏下注 -> 游戏返奖 -> 游戏对局结束; 对应changeType值,从1 -> 3 -> 4;玩家在游戏内进行投注,并中奖结算,对局结束;此情况适用大部分游戏流程;

  2. 取消下注 游戏下注 -> 取消下注;对应changeType值,1 -> 2;玩家在游戏内进行投注,对局开始前自主取消下注,一般为百人场、Mini Game类游戏;取消下注的recordId与下注的recordId一致;

  3. 未返奖 游戏下注 -> 未中奖 -> 游戏对局结束;对应changeType值,从1 -> 4;玩家在游戏内进行投注,当局未中奖,验证对局结束;

  4. 一次下注多次返奖 此种情况一般为连消类slot、slot游戏进入特殊玩法、彩票类游戏,玩家在游戏内进行投注,此局中奖多次直到对局结束。 游戏下注 -> 游戏返奖 -> 游戏返奖 -> 游戏返奖········ -> 游戏返奖(isCompleted=true);对应changeType值,从1 -> 3 -> 3 -> ······· -> 3;最后一次返奖isCompleted=true,推荐此流程,少调用一次接口 游戏下注 -> 游戏返奖 -> 游戏返奖 -> 游戏返奖········ -> 游戏对局结束;对应changeType值,从1 -> 3 -> 3 -> ······· -> 4;

results matching ""

    No results matching ""