游戏内跳转活动页

业务场景

  1. 从游戏内携带用户加密信息跳转到活动页,实现活动自动登录和角色绑定

注意事项

  1. 用户信息加密必须服务端完成,禁止客户端加密
  2. 参数携带的毫秒时间戳与当前时间差不能超过10分钟
  3. 活动页的域名不是固定的,每次对接用哪个域名,请咨询对接人

流程图

参数说明

  1. 参数格式:JSON,需要进行加密
  2. 加密算法:AES,加密模式:ECB,填充:PKCS5Padding,数据块:128位,字符集:UTF-8,输出:hex,密钥:AppKey
  3. 参数内容:
字段类型必需说明
openIdstringSDK用户唯一标识
serverIdstring游戏区服ID
serverNamestring游戏区服名称
roleIdstring游戏角色ID
roleNamestring游戏角色名称
roleLevelint游戏角色等级
vipLevelint游戏VIP等级
platformstring平台;android:安卓,ios:IOS,other:其他
gameCategorystring游戏类别;app:手游,wechat:微信小游戏,other:其他
extendstring扩展字段
timestamplong毫秒时间戳,与当前时间差不能超过10分钟

参数示例

  • 加密前
{"openId":"12345678912345678912345","serverId":"123456","serverName":"一区","roleId":"1234567890","roleName":"张三","roleLevel":1,"vipLevel":1,"platform":"android","gameCategory":"app","timestamp":1742559434725}
  • 假设AppKey为1234567890abcdef,加密后的参数如下
53f796843760acfc8f423d9bc7bcecd57748ea25f991738895b94f8b0bb8d7789e0309135fc77efdaac908047a4fdabd88a7e626e981a8c071f4fd65b2a96679d7a245fe1794a6a313be113c0a2b3b38cecbd153154c259b66ec25e2778936ad134725f48a7a2ea590fb6dc11b7b599cd0e2e89cf77e378c17d427a8250f4f76d4af2c171fad4e63cc09b1cca60d33dbd7cdc67ab4cccc5eb48333928314e8c21ef5561d1abacf119328495e2fede6595aee18242416f7b710bdb562d3ab9ae9c961af236ba5945c9bc3d5d627d78b6ac3422f945934706f973150c666cb3e1d

跳转方式

  1. 端包跳转活动H5页
  • 作为url参数传入,参数名为info
  • 需要判断是否有其他参数而拼接 ? 或 &
https://www.example.com?info=53f796843760acfc8f423d9bc7bcecd57748ea25f991738895b94f8b0bb8d7789e0309135fc77efdaac908047a4fdabd88a7e626e981a8c071f4fd65b2a96679d7a245fe1794a6a313be113c0a2b3b38cecbd153154c259b66ec25e2778936ad134725f48a7a2ea590fb6dc11b7b599cd0e2e89cf77e378c17d427a8250f4f76d4af2c171fad4e63cc09b1cca60d33dbd7cdc67ab4cccc5eb48333928314e8c21ef5561d1abacf119328495e2fede6595aee18242416f7b710bdb562d3ab9ae9c961af236ba5945c9bc3d5d627d78b6ac3422f945934706f973150c666cb3e1d
  1. 微信小游戏跳转活动小程序
  • 放在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);
    }
}