# 名词定义

为了方便沟通,对系统及产品定义属性进行统一称呼。

  1. 平台(platform):
      指游戏的开发平台:iOS、安卓等。
  2. 渠道(channel)
  3. 道具(item):
      游戏内元素,在道具礼包平台中是游戏发货的最小明细。
  4. 礼包(package):
      平台定义元素。是由一个或多个道具组成的配置信息。在道具礼包平台中是用户领取或兑换的最小单位。
  5. 兑换码(giftCode):
      平台定义元素。用于提供用户在游戏内兑换礼包的一串数字与字符。

# 礼包领取时序图

说明:

  1. 对于第三方渠道礼包平台,“2-查询游戏区服”、“5-查询帐号角色”为定制接口,由道具礼包平台统一实现后,适配外部不同的接口。
  2. 目前角色数据(角色ID、角色名、角色等级)等信息,由于实时性的要求,目前从游戏方获取,平台缓存10分钟。
  3. 根据游戏要求,通知礼包或道具发送接口与通知手游充值发货接口区分开。为防止配置错误,礼包或道具发送接口URL中必须要带giftPackage,以便配置页面进行检查。

# 兑换码生命周期

说明:

  1. 兑换码配置信息必须且只能关联一个礼包;
  2. 兑换码兑换渠道:游戏内;
  3. 兑换码类别属性:
      a) 通用性:通用码、非通用码;
      b) 绑定性:非绑定、绑定;
      c) 绑定类别:绑定帐号(游戏appId+appMid)、绑定角色(appMid+areaId+roleId);
  4. 兑换码标识: appId+兑换码组成兑换码唯一标识;
  5. 兑换码校验失败时,礼包发放接口不落地订单信息;

# 兑换码客户端校验规则

为了防止客户端大量猜码及尝试,兑换码最后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
Last Updated: 4/24/2024, 7:11:27 AM