红利系统
红利系统指的是对特定用户发放 免费旋转 或者 Feature, 相应旋转产生的奖励可以是现金或者红利, 如果奖励为红利, 那么需要用户完成一定的打码任务后, 红利转换为现金加入用户的账户中。
交互流程如下:
注意⚠️: 发放奖励时,无缝钱包则需要OP提供一个单独的派奖接口,转账钱包则无需提供。
2J 侧提供的接口
接口名称 | 描述 | 路径 |
---|---|---|
查询红利配置 | 查询红利游戏相关配置 | /open2j/g/grantify/conf |
创建红利 | 创建红利 | /open2j/g/grantify/create |
取消红利 | 取消已经创建红利 | /open2j/g/grantify/cancel |
查询红利状态/进度 | 查询已经创建红利状态/进度 | /open2j/g/grantify/query |
1. 查询红利配置
Method: POST
URI:: /open2j/g/grantify/conf
Description: 查询红利游戏相关配置,包括支持的红利游戏列表,以及红利的某些默认值。
Request Body:
Content-Type: application/json
{}
Response Body:
Content-Type: application/json
{
"header": {
"code": 0, // 错误编码,0表示正常, 非0表示异常
"msg": "",
"timestamp":1709716095516,
},
"result": {
"validaty_hours": 168, // 红利有效期,单位小时
"award_type": 1, // 1: 现金, 2: 红利
"spin_type": 1, // 1: 免费旋转, 2: Feature
"spin_times": 10, // 免费旋转次数
"mosaic_multiple": 8, // 红利所需打码倍数
"odds_limit": 1000, // spin 奖励上限倍数
"game_ids": [1007, 1008, 1009], // 支持的红利游戏列表
}
}
2. 创建红利
Method: POST
URI:: /open2j/g/grantify/create
Description: 创建红利
Request Body:
Content-Type: application/json
{
"op_ids": [
"op123",
"op124",
], // 用户 ID
"game_id": 1007, // 红利游戏 ID
"bet": 1, // 每次旋转的下注金额
"spin_type": 1, // 红利类型
"spin_times": 10, // 免费旋转次数
"award_type": 1, // 奖励类型
"mosaic_multiple": 8, // 红利打码倍数
"validaty_hours": 168, // 红利有效期(小时)
"odds_limit": 1000 // spin 奖励上限倍数
}
参数说明:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
op_ids | string[] | 是 | 用户 ID 列表。一次最多100条 |
game_id | int | 是 | 红利游戏 ID, 必须在查询红利配置接口返回的 game_ids 中 |
bet | int | 否 | 每次旋转的下注金额, 默认值为游戏的最小下注金额 |
spin_type | int | 否 | 红利类型, 1: 免费旋转, 2: Feature , 默认值为查询红利配置接口返回的 spin_type |
spin_times | int | 否 | 免费旋转次数 [1, 100], 默认值为查询红利配置接口返回的 spin_times |
award_type | int | 否 | 奖励类型, 1: 现金, 2: 红利, 默认值为查询红利配置接口返回的 award_type |
mosaic_multiple | int | 否 | 红利打码倍数 [1, 100], 默认值为查询红利配置接口返回的 mosaic_multiple |
validaty_hours | int | 否 | 红利有效期(小时) [1, 168] 默认值为查询红利配置接口返回的 validaty_hours |
odds_limit | int | 否 | spin 奖励上限, 默认值为查询红利配置接口返回的 odds_limit |
Response Body:
Content-Type: application/json
{
"header": {
"code": 0, // 错误编码,0表示正常, 非0表示异常
"msg": "",
"timestamp":1709716095516,
},
"result": [
{
"op_id": "op123", // OP 侧红利 ID
"grantify_id": "9995ed28d4e3882c", // 红利
},
{
"op_id": "op124",
"grantify_id": "d03ba03818860d0a",
}
]
}
3. 取消红利
Method: POST
URI:: /open2j/g/grantify/cancel
Description: 取消已经创建红利
Request Body:
Content-Type: application/json
{
"grantify_ids": [
"9995ed28d4e3882c",
"d03ba03818860d0a"
] // 红利 ID 列表
}
参数说明:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
grantify_ids | string[] | 是 | 红利 ID 列表, 一次最多100条 |
Response Body:
Content-Type: application/json
{
"header": {
"code": 0, // 错误编码,0表示正常, 非0表示异常
"msg": "",
"timestamp":1709716095516,
},
"result": {
"grantify_ids": [
"9995ed28d4e3882c",
"d03ba03818860d0a"
] // 成功取消的红利 ID 列表
}
4. 查询红利状态/进度
Method: POST
URI:: /open2j/g/grantify/query
Description: 查询已经创建红利状态/进度
Request Body:
Content-Type: application/json
{
"op_ids": [
"op123",
"op124"
], // 用户 ID 列表
"grantify_ids": [
"9995ed28d4e3882c",
"d03ba03818860d0a"
], // 红利 ID 列表
"game_id": 1007, // 红利游戏 ID
"created_from": 1, // 创建来源: 1: OP 接口创建, 2: 2J 后台创建 3: 2J 系统创建
"state": 1, // 红利状态: 1: 进行中, 2: 打码中, 3: 已完成 4: 已取消, 5: 已过期
"limit": 20, // 返回结果数量限制, 默认20, 最大100
"offset": 0 // 返回结果偏移, 默认0
}
参数说明:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
op_ids | string[] | 否 | 用户 ID 列表, 一次最多100条 |
grantify_ids | string[] | 否 | 红利 ID 列表, 一次最多100条 |
game_id | int | 否 | 红利游戏 ID, 必须在查询红利配置接口返回的 game_ids 中。默认全部 |
created_from | int | 否 | 创建来源: 1: OP 接口创建, 2: 2J 后台创建 3: 2J 系统创建。默认全部 |
state | int | 否 | 红利状态: 1: 进行中, 2: 打码中, 3: 已完成 4: 已取消, 5: 已过期。默认全部 |
limit | int | 否 | 返回结果数量限制, 默认20, 最大100 |
offset | int | 否 | 返回结果偏移, 默认0 |
注意⚠️: op_ids 和 grantify_ids 不能同时为空; 如果两者都不为空, 则表示两者的交集。
Response Body:
Content-Type: application/json
{
"header": {
"code": 0, // 错误编码,0表示正常, 非0表示异常
"msg": "",
"timestamp":1709716095516,
},
"result": [
{
"grantify_id": "68bff8183377cc948464efb0", // 红利 ID
"op_id": "126012",
"game_id": 1066,
"left_hours": 1, // 剩余有效时间(不足1小时按1小时返回), 单位小时
"expired_at": 1758016152, // 过期时间戳
"created_at": 1757411352, // 创建时间戳
"created_from": 1, // 创建来源: 1: OP 接口创建, 2: 2J 后台创建 3: 2J 系统创建
"spin_type": 1, // 红利类型, 1: 免费旋转, 2: Feature
"spin_times": 3, // 免费旋转次数
"award_type": 1, // 奖励类型
"award_amount": 0, // 奖励金额
"odds_limit": 1000, // 奖励上限倍数
"mosaic_type": 1, // 打码类型, 1: 现金, 2: Bonus
"mosaic_multiple": 10, // 打码倍数
"bet": 1000, // 每次旋转的下注金额
"state": 3, // 红利状态: 1: 进行中, 2: 打码中, 3: 已完成 4: 已取消, 5: 已过期
"activated": false // 是否已激活
}
]
}
OP 侧提供的接口
如果使用无缝钱包, 则需要 OP 提供一个派奖接口, 由 2J 在用户完成红利时调用, 将奖励发放到用户账户中。
接口名称 | 描述 | 路径 |
---|---|---|
派奖接口 | 向用户派发奖励 | /grantify/reward |
1. 红利派奖接口
Method: POST
URI:: /grantify/reward
Description: 向(使用无缝钱包模式接入)OP 商户的用户派发红利奖励
OP 需要实现此接口的幂等性,避免重复派发; 同时如果收到重复的派奖请求, 请返回成功 (code = 0)。
Request Body:
Content-Type: application/json
{
"op_id": "op123", // 用户 ID
"timestamp": 1709716095, // 请求时间戳, 毫秒
"award_amount": 100, // 派发金额
"grantify_id": "9995ed28d4e3882c", // 红利 ID
}
参数说明:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
op_id | string | 是 | 用户 ID |
timestamp | int | 是 | 请求时间戳, 毫秒 |
amount | int | 是 | 派发金额 |
grantify_id | string | 是 | 红利 ID |
Response Body:
Content-Type: application/json
{
"header": {
"code": 0, // 错误编码,0表示正常,非0表示异常
"msg": "",
"timestamp":1709716095516,
},
"result": {
"op_id": "op123", // 用户 ID
}
}