微信公众平台接口开发记录(一)
一、注册微信公众平台账号
注册地址:https://mp.weixin.qq.com/cgi-bin/readtemplate?t=wxm2-realname-reg&lang=zh_CN
登陆地址:https://mp.weixin.qq.com/
二、开启开发模式,接口文件验证代码:
开发模式的验证过程其实就是将GET的参数echostr值返回,最简单的就是
php:
<?php echo $_GET['echostr']; ?>
asp:
<% Response.Write(Request("echostr")) %>
这里需要注意到的是,微信公众平台接口所使用的编码为UTF-8。这种方式与配置的TOKEN无关,即使你随便填写一个TOKEN值也可以成功验证。
完整的验证机制
公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:
参数 | 描述 |
---|---|
signature | 微信加密签名 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。
signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
加密/校验流程: 1. 将token、timestamp、nonce三个参数进行字典序排序 2. 将三个参数字符串拼接成一个字符串进行sha1加密 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
加入微信官方提供的验证机制后,验证代码如下:
/* 方法:checkSignature * 参数:无 * 作用:检测是否来自微信官方服务器 */ function checkSignature(){ $signature = $_GET['signature']; //微信加密签名 $timestamp = $_GET['timestamp']; //时间戳 $nonce = $_GET['nonce']; //随机数 $echostr = $_GET['echostr']; //随机字符串 $token = TOKEN; $tempArr = array($token,$timestamp,$nonce); sort($tempArr); if($signature == sha1(implode($tempArr))){ echo $echostr; }else{ exit(); } }