# 平台事件服务器订阅

# 第一步:填写服务器配置

点击“配置”填写服务器地址(URL)、令牌(Token) 和 消息加密密钥(EncodingAESKey)等信息。

  • URL: 开发者用来接收道具发货消息事件的接口 URL。开发者所填写的URL 必须以 https:// 开头,支持443 端口。(如果你的url请求时间超过3s,会发生超时错误

  • Token: 可由开发者可以任意填写,用作生成签名。

  • EncodingAESKey: 由开发者手动填写或随机生成,将用作消息体加解密密钥。

同时,开发者可选择消息加解密方式:明文模式、和安全模式(推荐)。注意:消息数据格式仅支持JSON 格式,使用安全模式开发者需要对收到的消息进行解密,但回复微信服务器的消息不需要加密。

# 第二步:验证消息来自微信服务器

点击“发布”,微信服务器会发送GET请求到填写的服务器地址URL上,GET请求(例如: https://your_host?signature=6298f2b139f33959c59d69da33f5c4215d9df26a&timestamp=1700735027&nonce=50328042&echostr=Mzi3wDcVa5uI)携带参数如下表所示:

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

开发者通过检验 signature 对请求进行校验(下面有校验代码示例)。若确认此次 GET 请求来自微信服务器,请原样返回 echostr 参数内容,服务器收到回包后会显示发布成功,否则会显示测试失败并打印日志。

签名校验流程如下:

  1. 将token、timestamp、nonce三个参数进行字典序排序

  2. 将三个参数字符串拼接成一个字符串进行sha1加密

  3. 开发者获得加密后的字符串可与signature对比,确认该请求来源于微信

检验signature的PHP示例代码:

private function checkSignature()
{
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];

    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );

    if ($tmpStr == $signature ) {
        return true;
    } else {
        return false;
    }
}

PHP示例代码下载:下载链接见文档

# 第三步:订阅平台消息

对于你想关注的平台消息,点击订阅会弹出测试页面,点击模拟页面平台会发送一个对应类型的模拟消息到你的服务器,你需要按以下消息格式回复平台以表明已收到消息。

{"ErrCode":0,"ErrMsg":"Success"}

页面显示测试通过后即可订阅成功。

附平台事件消息格式

字段 类型 说明
ToUserName String 小游戏原始ID
FromUserName String 该事件消息的openid,固定为微信官方的openid
CreateTime Number 消息发送时间
MsgType String 固定为:event
Event String 平台事件通知固定为:minigame_notify_msg
MsgId String 平台事件id
Title String 平台事件通知标题
Content String 平台事件通知正文
Type String 版本审核通知:version_check
违规通知:punish_notify
点击咨询小助手