# 名词定义
为了方便沟通,对系统及产品定义属性进行统一称呼。
- 平台(platform):
指游戏的开发平台:iOS、安卓等。 - 渠道(channel)
- 道具(item):
游戏内元素,在道具礼包平台中是游戏发货的最小明细。 - 礼包(package):
平台定义元素。是由一个或多个道具组成的配置信息。在道具礼包平台中是用户领取或兑换的最小单位。 - 兑换码(giftCode):
平台定义元素。用于提供用户在游戏内兑换礼包的一串数字与字符。
# 礼包领取时序图
说明:
- 对于第三方渠道礼包平台,“2-查询游戏区服”、“5-查询帐号角色”为定制接口,由道具礼包平台统一实现后,适配外部不同的接口。
- 目前角色数据(角色ID、角色名、角色等级)等信息,由于实时性的要求,目前从游戏方获取,平台缓存10分钟。
- 根据游戏要求,通知礼包或道具发送接口与通知手游充值发货接口区分开。为防止配置错误,礼包或道具发送接口URL中必须要带giftPackage,以便配置页面进行检查。
# 兑换码生命周期
说明:
- 兑换码配置信息必须且只能关联一个礼包;
- 兑换码兑换渠道:游戏内;
- 兑换码类别属性:
a) 通用性:通用码、非通用码;
b) 绑定性:非绑定、绑定;
c) 绑定类别:绑定帐号(游戏appId+appMid)、绑定角色(appMid+areaId+roleId); - 兑换码标识: appId+兑换码组成兑换码唯一标识;
- 兑换码校验失败时,礼包发放接口不落地订单信息;
# 兑换码客户端校验规则
为了防止客户端大量猜码及尝试,兑换码最后1位字符为校验位。接入方应在前端做好兑换码校验工作。
校验算法如下:
第一步:排除兑换码最后一位(校验位),取得每个字符对应的ASCII码(10进制)值后累加;
第二步:使用第二步的值除32(10进制)取余。然后再与32进制码表比对,如果取得码表字符与检验码一致则认为兑换码符合格式,可发送至服务端校验。
附:32进制码对照表:
码 | 值 | 码 | 值 | 码 | 值 | 码 | 值 | 码 | 值 | 码 | 值 | 码 | 值 | 码 | 值 | 码 | 值 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 5 | 6 | 6 | 7 | 7 | 8 | 8 |
9 | 9 | A | 10 | B | 11 | C | 12 | D | 13 | E | 14 | F | 15 | G | 16 | H | 17 |
J | 18 | K | 19 | L | 20 | M | 21 | N | 22 | P | 23 | R | 24 | S | 25 | T | 26 |
U | 27 | V | 28 | W | 29 | X | 30 | Y | 31 |
Java代码示例:
final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
'N', 'P', 'R', 'S', 'T', 'U', 'V','W', 'X', 'Y' };
private static Boolean checkCode(String giftCode){
int totalCharValue=0;
for (int i = 0; i < giftCode.length()-1; i++) {
int ch = (int) giftCode.charAt(i);
totalCharValue+=ch;
}
int p = totalCharValue % 32;
return digits[p]==giftCode.charAt(giftCode.length()-1);
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
← 服务端 API 说明 服务端 API 说明 →