游戏内跳转活动页
业务场景
- 从游戏内携带用户加密信息跳转到活动页,实现活动自动登录和角色绑定
注意事项
- 用户信息加密必须在服务端完成,禁止在客户端加密
- 参数携带的毫秒时间戳与当前时间差不能超过10分钟
- 活动页的域名不是固定的,每次对接用哪个域名,请咨询对接人
流程图
参数说明
- 参数格式:JSON,需要进行加密
- 加密算法:AES,加密模式:ECB,填充:PKCS5Padding,数据块:128位,字符集:UTF-8,输出:hex,密钥:AppKey
- 参数内容:
字段 | 类型 | 必需 | 说明 |
---|---|---|---|
openId | string | 是 | SDK用户唯一标识 |
serverId | string | 是 | 游戏区服ID |
serverName | string | 是 | 游戏区服名称 |
roleId | string | 是 | 游戏角色ID |
roleName | string | 是 | 游戏角色名称 |
roleLevel | int | 否 | 游戏角色等级 |
vipLevel | int | 是 | 游戏VIP等级 |
platform | string | 否 | 平台;android:安卓,ios:IOS,other:其他 |
gameCategory | string | 是 | 游戏类别;app:手游,wechat:微信小游戏,other:其他 |
extend | string | 是 | 扩展字段 |
timestamp | long | 是 | 毫秒时间戳,与当前时间差不能超过10分钟 |
参数示例
- 加密前
{"openId":"12345678912345678912345","serverId":"123456","serverName":"一区","roleId":"1234567890","roleName":"张三","roleLevel":1,"vipLevel":1,"platform":"android","gameCategory":"app","timestamp":1742559434725}
- 假设AppKey为1234567890abcdef,加密后的参数如下
53f796843760acfc8f423d9bc7bcecd57748ea25f991738895b94f8b0bb8d7789e0309135fc77efdaac908047a4fdabd88a7e626e981a8c071f4fd65b2a96679d7a245fe1794a6a313be113c0a2b3b38cecbd153154c259b66ec25e2778936ad134725f48a7a2ea590fb6dc11b7b599cd0e2e89cf77e378c17d427a8250f4f76d4af2c171fad4e63cc09b1cca60d33dbd7cdc67ab4cccc5eb48333928314e8c21ef5561d1abacf119328495e2fede6595aee18242416f7b710bdb562d3ab9ae9c961af236ba5945c9bc3d5d627d78b6ac3422f945934706f973150c666cb3e1d
跳转方式
- 端包跳转活动H5页
- 作为url参数传入,参数名为info
- 需要判断是否有其他参数而拼接 ? 或 &
https://www.example.com?info=53f796843760acfc8f423d9bc7bcecd57748ea25f991738895b94f8b0bb8d7789e0309135fc77efdaac908047a4fdabd88a7e626e981a8c071f4fd65b2a96679d7a245fe1794a6a313be113c0a2b3b38cecbd153154c259b66ec25e2778936ad134725f48a7a2ea590fb6dc11b7b599cd0e2e89cf77e378c17d427a8250f4f76d4af2c171fad4e63cc09b1cca60d33dbd7cdc67ab4cccc5eb48333928314e8c21ef5561d1abacf119328495e2fede6595aee18242416f7b710bdb562d3ab9ae9c961af236ba5945c9bc3d5d627d78b6ac3422f945934706f973150c666cb3e1d
- 微信小游戏跳转活动小程序
- 放在extraData.info字段
wx.navigateToMiniProgram({
appId: 'xxx',
path: 'pages/index/index',
extraData: {
info: '53f796843760acfc8f423d9bc7bcecd57748ea25f991738895b94f8b0bb8d7789e0309135fc77efdaac908047a4fdabd88a7e626e981a8c071f4fd65b2a96679d7a245fe1794a6a313be113c0a2b3b38cecbd153154c259b66ec25e2778936ad134725f48a7a2ea590fb6dc11b7b599cd0e2e89cf77e378c17d427a8250f4f76d4af2c171fad4e63cc09b1cca60d33dbd7cdc67ab4cccc5eb48333928314e8c21ef5561d1abacf119328495e2fede6595aee18242416f7b710bdb562d3ab9ae9c961af236ba5945c9bc3d5d627d78b6ac3422f945934706f973150c666cb3e1d'
}
})
加密示例
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
import com.alibaba.fastjson.JSON;
import java.util.LinkedHashMap;
import java.util.Map;
public class AutoLoginExample {
public static void main(String[] args) {
Map<String, Object> paramMap = new LinkedHashMap<>();
paramMap.put("openId", "12345678912345678912345");
paramMap.put("serverId", "123456");
paramMap.put("serverName", "一区");
paramMap.put("roleId", "1234567890");
paramMap.put("roleName", "张三");
paramMap.put("roleLevel", 1);
paramMap.put("vipLevel", 1);
paramMap.put("platform", "android");
paramMap.put("gameCategory", "app");
paramMap.put("timestamp", System.currentTimeMillis());
String jsonParam = JSON.toJSONString(paramMap);
System.out.printf("明文信息:%s%n", jsonParam);
String appKey = "1234567890abcdef";
AES aes = SecureUtil.aes(appKey.getBytes());
String encryptParam = aes.encryptHex(jsonParam);
System.out.printf("加密信息:%s%n", encryptParam);
}
}