微信 Access Token
微信 Access Token
一. Token 使用
access_token
是微信小游戏的全局唯一接口调用凭据,小游戏调用各接口时都需使用,引力引擎主要在两方面使用微信 access_token
:
- 拉取微信广告变现相关数据
- 获取
URL Scheme
以支持百度营销/穿山甲 URL Scheme 的归因
注意
如果您不需要微信广告变现收入统计 或 微信小游戏百度营销归因 或 穿山甲 URL Scheme,则您不需要接入!
二. 问题与解决方案
由于微信的限制,如果有多方业务同时调用微信接口刷新 access_token
,则会导致 Token 冲突进而影响整体业务,可能产生数据异常,造成无可挽回的损失!
针对此种情况,引力引擎提供了三种方案解决,请您根据具体业务情况来选择任意一种方案:
1. 引力全自动刷新
在引力后台-设置-应用管理-配置-微信开发者页面,开启 自动刷新 Token 功能,刷新模式选择:引力全自动刷新,此时需要您填写小游戏AppSecret
,引力引擎服务器会自动定时刷新以获取最新的 token。
警告
此种方式需广告主保证:当前“开发者 ID”、“开发者密码”下,只有引力引擎可直接向微信 MP 请求获取 access_token
,若多方服务器同时请求获取,则会导致 access_token
冲突与失效,进而可能产生数据异常,造成无可挽回的损失!
2. 引力调用客户接口刷新
在引力后台-设置-应用管理-配置-微信开发者页面,开启 自动刷新 Token 功能,刷新模式选择:引力调用客户接口刷新,此时需要您填写由您的后端团队提供的 客户刷新接口地址,引力引擎后续会定时发起Get请求此接口以获取最新的 token。
引力会在您提供的 URL 后面自动拼接两个参数:
gravity_timestamp
:为秒级时间戳gravity_sign
:为签名(您可以考虑校验该值来避免接口被滥用)
gravity_sign
签名步骤
计算将引力 App 的 access_token(该参数在 应用管理 界面可以获取),gravity_timestamp 和小游戏 appid 三个 string 进行拼接
对拼接成的 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
到引力引擎。