微信小游戏
本栏目介绍世游为微信小游戏提供的相关功能。
登录与 session_key
微信小游戏的登录由 Combo SDK 统一完成,游戏客户端调用 Login() 成功后会得到 Identity Token,游戏服务端对其验证后即可获得用户的可信身份信息,接入方式参见 登录验证。
当 idp 为 minigame_weixin 时,Identity Token 中会额外包含 weixin_session_key 加密字段。游戏服务端解密后可得到微信小游戏的会话密钥 session_key,用于解密客户端从微信 API 获取的加密用户数据,或验证微信返回数据的签名完整性。
session_key 的获取、缓存与失效处理,参见 session_key 的使用。
接口调用凭证 access_token
游戏服务端调用微信服务端 API 时,需要使用接口调用凭证 access_token。
access_token 由世游服务端统一维护和刷新,游戏侧无需自行调用微信接口获取,避免多方获取导致凭证相互失效。
游戏服务端通过世游 REST API 获取 access_token,参见 获取接口调用凭证。
消息推送与消息转发
微信小游戏的 消息推送 统一由世游服务端接收。对于游戏侧需要自行处理的事件消息(例如 游戏礼包 的道具发货通知 minigame_deliver_goods 等),世游服务端可将微信的原始推送请求转发到游戏服务端,由游戏服务端处理,即本节所述的消息转发功能。
接入步骤
游戏侧确定需要接收的微信推送事件类型(即消息中的
Event取值),联系世游进行配置:配置项 Description 转发 URL 游戏服务端接收转发消息的 HTTPS 地址。 转发事件类型 需要转发到游戏服务端的事件类型,可配置多个。 从世游获取该微信小游戏消息推送的 Token 与 EncodingAESKey,用于对转发消息的验签与解密。
游戏服务端在转发 URL 上实现 HTTP 接口,完成 验签、解密与响应。
只有事件消息(MsgType 为 event),且事件类型在配置的转发范围内,才会被转发;未配置的事件类型不会转发。
转发请求
世游服务端会将微信服务器的原始推送请求原封不动地转发至转发 URL:HTTP Method、Headers、Body 均与微信服务器发出的原始请求保持一致,原始请求的 Query 参数会合并到转发 URL 上(转发 URL 自带的 Query 参数会被保留)。
也就是说,游戏服务端收到的请求与直接对接微信消息推送时收到的完全一致,可按照微信官方文档 接收消息推送 进行处理。
消息推送统一采用 JSON 数据格式与安全模式(消息体加密),游戏侧必须按此标准接入。
验签、解密与响应
游戏服务端收到转发请求后,按以下步骤处理:
- 验签与解密:使用世游提供的 Token 与 EncodingAESKey,按微信官方文档完成请求的验签与消息体的解密。
- 处理:解密后的明文消息结构与处理方式,参见对应事件的微信官方文档。
- 响应:按对应事件的微信官方文档构造响应,包括响应内容的格式与加密要求。游戏服务端的响应会由世游服务端原样返回给微信服务器。若响应不符合约定或超时,微信服务器会认为推送失败并发起重试。
- 微信服务器对推送的响应时长有超时限制,且转发链路本身会占用部分时间。游戏服务端收到转发请求后应尽快完成响应,耗时较长的业务逻辑建议异步处理。
- 消息转发请求不使用世游的
SEAYOO-HMAC-SHA256签名,请求的合法性通过微信消息体签名(msg_signature)验证。 - 微信服务器对同一条消息可能重复推送,游戏服务端应根据消息中的唯一标识(如订单号)进行去重,保证处理的幂等性。