第一步:填写服务器配置
登录后,在移动应用/网页应用详情页面 -「消息推送」中,管理员可启用消息服务,填写服务器地址(url)、令牌(token) 和 消息加密密钥(encodingaeskey)等信息。
- url: 开发者用来接收微信消息和事件的接口 url。开发者所填写的url 必须以 http:// 或 https:// 开头,分别支持 80 端口和 443 端口。
- token: 可由开发者可以任意填写,用作生成签名(该 token 会和接口 url 中包含的 token 进行比对,从而验证安全性)。
- encodingaeskey: 由开发者手动填写或随机生成,将用作消息体加解密密钥。
同时,开发者可选择消息加解密方式:明文模式(默认)、兼容模式和安全模式。可以选择消息数据格式:xml 格式(默认)或 json 格式。
模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。切换加密方式和数据格式需要提前配置好相关代码,详情请参考 。
第二步:验证消息的确来自微信服务器
开发者提交信息后,微信服务器将发送 get 请求到填写的服务器地址 url 上,get请求携带参数如下表所示:
参数 | 描述 |
---|---|
signature | 微信加密签名,signature结合了开发者填写的 token 参数和请求中的 timestamp 参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
开发者通过检验 signature 对请求进行校验(下面有校验方式)。若确认此次 get 请求来自微信服务器,请原样返回 echostr 参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:
- 将token、timestamp、nonce三个参数进行字典序排序
- 将三个参数字符串拼接成一个字符串进行sha1加密
- 开发者获得加密后的字符串可与 signature 对比,标识该请求来源于微信
验证 url 有效性成功后即接入生效。
检验 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示例代码下载:
第三步:接收消息和事件
当某些特定的用户操作引发事件推送时(如用户资料变更时),微信服务器会将消息(或事件)的数据包以 post 请求发送到开发者配置的 url,开发者可以依据自身业务逻辑进行响应。事件类型消息推荐使用 fromusername createtime 排重。
服务器收到请求必须做出下述回复,这样微信服务器才不会对此作任何处理,并且不会发起重试。详见下面说明:
- 直接回复success(推荐方式)
- 直接回复空串(指字节长度为0的空字符串,而不是结构体中 content 字段的内容为空)
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/13422/
部分内容来自网络投稿,如有侵权联系立删