公众号开发第二篇--开发服务器配置
一旦订阅号开启了开发模式,用户在订阅号中的所有操作,如向订阅号发送文本、图片、音频等信息,或者点击菜单等事件,都会被微信服务器推送给开发服务器
因为开发模式的作用就是由开发者开发的程序处理订阅号收到的消息,所以微信服务器才会将这些消息转发给开发者服务器
这就需要满足如下几点要求:
- 必须有一台外网服务器,否则微信服务器无法访问
- 此服务器可以没有域名,只需要使用公网IP即可
- 服务器上必须有程序,能够进行消息的处理
但是,并不是你说自己有可以使用的服务器就可以的,微信需要进行验证,验证通过之后,才允许在订阅号中开启开发模式。
1.填写配置
在“开发”->"基本配置中",点击“修改配置”
然后填入如下配置信息
填写完毕后点击“提交”,如果成功,会提示通过,否则会提示token验证失败
但是先等等,我们还没编写URL处填写的验证文件,所以提交一定会报错的
2. 编写验证文件
2.1 验证流程
在用户提交验证时,微信服务器会向url中填写的验证文件发送一些数据,包括
还有一个就是上面填写的 token 的值
我们需要在验证文件中编写代码进行验证,具体的验证规则为:
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
4)如果相等,返回上面截图中的微信服务器发送过来的 echostr 的值
微信服务器接收到返回的 echostr 的值,就会认为验证通过,你的开发服务器就可用了
2.2 验证代码
代码
//接收微信服务器发送过来的数据
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
//这里token的值应该与配置中的token值一致
$token = "weixin";
//1)将token、timestamp、nonce三个参数进行字典序排序
$arr = array($token, $timestamp, $nonce);
sort($arr);
//2)将三个参数字符串拼接成一个字符串进行sha1加密
$tempstr = implode('', $arr);
$tempstr = sha1($tempstr);
//3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if ($tempstr == $signature) {
//一定要加上这行代码,否则可能导致token总是验证失败
ob_clean();
//4) 返回微信服务器发送过来的 echostr 的值
echo $_GET['echostr'];
}
exit();
编写完成并上传到服务器上
比如我使用的是TP框架,新建项目后,在index(模块)/index(控制器)/index(方法)中编写了上面代码
将项目上传到服务器后,设置二级目录为public,再隐藏入口文件后,此验证文件的访问地址如下
http://ip地址/index/index/index
或者
http://ip地址