申请地址

https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

需要微信扫码登录即可申请到测试号
如果我们现在已经拥有认证的服务号或者已经申请到测试号,接下来需要在后台设置服务器信息(需要告诉微信平台开发者的服务器地址)

下面是交互顺序

微信用户主动请求 开发者服务器被动回复


微信用户微信服务器开发者服务器①请求②请求③响应④响应微信用户微信服务器开发者服务器

开发者服务器主动推送


微信用户微信服务器开发者服务器保持在线①请求②推送③响应微信用户微信服务器开发者服务器

填写服务器配置

如果使用测试号可以在界面上直接填写URL和TOKEN


如果是认证服务号后台需要在开发->服务器配置中填写


但是填写好后点击提交时会提示配置失效或者token验证失败,这是因为提交时微信服务器会像对应的URL地址发送请求但是服务器没有正确响应。要解决这个问题需要编写代码实现,正常流程是验证微信服务器请求信息的正确性并按规则返回信息。
大致看下微信的接口规则
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

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

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

  1. 将token、timestamp、nonce三个参数进行字典序排序
  2. 将三个参数字符串拼接成一个字符串进行sha1加密
  3. 开发者获得加密后的字符串可与signature对比
    最简单的代码,一行即可(忽略验证,直接响应)
    echo $_GET['echostr'];
    增加验证(不过实际意义不大)
$token = '公众平台后台设置的token值';
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];

$tmpArr = [$timestamp,$nonce,$token];
sort($tmpArr, SORT_STRING);  //排序
$tmpStr = implode( $tmpArr ); //拼接
$tmpStr = sha1( $tmpStr );  //sha1加密

if($tmpStr == $signature){ //对比
    echo $_GET['echostr'];
}

设置完毕后服务器配置成功,可以进行后续接口开发。

本文档由黎明互联官方发布