微信 Access Token

约 841 字大约 3 分钟

微信 Access Token

一. Token 使用

access_token 是微信小游戏的全局唯一接口调用凭据,小游戏调用各接口时都需使用,引力引擎主要在两方面使用微信 access_token

  1. 拉取微信广告变现相关数据
  2. 获取 URL Scheme 以支持百度营销/穿山甲 URL Scheme 的归因

注意

如果您不需要微信广告变现收入统计微信小游戏百度营销归因穿山甲 URL Scheme,则您不需要接入!

二. 问题与解决方案

由于微信的限制,如果有多方业务同时调用微信接口open in new window刷新 access_token ,则会导致 Token 冲突进而影响整体业务,可能产生数据异常,造成无可挽回的损失!

针对此种情况,引力引擎提供了三种方案解决,请您根据具体业务情况来选择任意一种方案:

1. 引力全自动刷新

引力后台-设置-应用管理-配置-微信开发者页面,开启 自动刷新 Token 功能,刷新模式选择:引力全自动刷新,此时需要您填写小游戏AppSecret,引力引擎服务器会自动定时刷新以获取最新的 token。

警告

此种方式需广告主保证:当前“开发者 ID”、“开发者密码”下,只有引力引擎可直接向微信 MP 请求获取 access_token若多方服务器同时请求获取,则会导致 access_token 冲突与失效,进而可能产生数据异常,造成无可挽回的损失!

2. 引力调用客户接口刷新

引力后台-设置-应用管理-配置-微信开发者页面,开启 自动刷新 Token 功能,刷新模式选择:引力调用客户接口刷新,此时需要您填写由您的后端团队提供的 客户刷新接口地址,引力引擎后续会定时发起Get请求此接口以获取最新的 token。

引力会在您提供的 URL 后面自动拼接两个参数:

  • gravity_timestamp:为秒级时间戳
  • gravity_sign:为签名(您可以考虑校验该值来避免接口被滥用)
计算gravity_sign签名步骤
  1. 将引力 App 的 access_token(该参数在 应用管理open in new window 界面可以获取),gravity_timestamp 和小游戏 appid 三个 string 进行拼接

  2. 对拼接成的 string 进行 md5 哈希加密,转成 string

Java 代码示例

String str = GRAVITY_APP_ACCESS_TOKEN + GRAVITY_TIMESTAMP + MINI_GAME_APP_ID;
String sign = DigestUtils.md5DigestAsHex((str).getBytes()).toLowerCase();

​ 例如

GRAVITY_APP_ACCESS_TOKEN:b69faba2154c79d6c1cmfa879d6c1ca8
GRAVITY_TIMESTAMP:1688627637
MINI_GAME_APP_ID:wxia29f6ajdn987fj4

拼接后
b69faba2154c79d6c1cmfa879d6c1ca81688627637wxia29f6ajdn987fj4

签名生成
3b58c3a9002108ed28a9ce2a06666b0d

最终如果您提供的 URL 另有参数会通过&gravity_timestamp=1688627637&gravity_sign=3b58c3a9002108ed28a9ce2a06666b0d拼在后面,如没有参数则会将?gravity_timestamp=1688627637&gravity_sign=3b58c3a9002108ed28a9ce2a06666b0d拼接在后面。

提示

您提供的后端接口需要遵循以下返回格式:{"access_token": "********", "expires_in": 7200}

  • access_token 获取到的凭证
  • expires_in 凭证有效时间,单位:秒

3. 客户透传参数到引力

客户自行接入刷新微信/抖音 Access Token 接口,在 Token 变更时,通过接口调用透传access_token给引力引擎。

提示

此种方式,适合多方平台都需要使用 access_token 的情况,引力引擎后台将不再主动刷新,而是由您主动调用引力的接口,透传 access_token 到引力引擎。