接入微信服务器是微信公众号开发的第一步,这个过程就相当于在我们自己的服务器与微信服务器之间打通了一条通道,有了这条通道,我们自己的服务器才能与微信的服务器进行交互,接入微信服务器主要为一下几个步骤:
1、填写服务器信息
点击微信公众平台左侧的 开发—>基本配置—>服务器配置(前提是你已经注册成为开发者)
当我们填写完这些信息提交过后,微信服务器向我自己的服务器发送一个GET请求,这个请求附带四个参数,signature(签名),timestamp(时间戳),nonce(随机数),echostr(随机字符串)
2、验证消息来自服务器
当我们服务器接收到请求后,需要验证此请求是否来自微信服务器,具体验证方法如下
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
这个过程就是按照微信自己的加密方式将请求带过来的参数进行加密,如果加密过后的值与微信服务器带过来signature(签名)一致,就代表这个请求是微信服务器发过来的,此时返回$echostr给微信服务器即可接入成功
代码如下:
class Api extends Controller
{
// 此token要与我们微信公众平台填写的token要一致
protected $token='test';
// 服务器接口,微信公众平台填写的url
public function handler(){
$echostr=$_GET['echostr'];
// 验证签名是否正确
if ($this->checksignature()){
echo $echostr;
exit;
}
}
// 验证签名
public function checksignature(){
$signature=$_GET['signature'];
$timestamp=$_GET['timestamp'];
$nonce=$_GET['nonce'];
$token=$this->token;
// 将token,timestamp,nonce字典化排序
$tmparr=[$token,$timestamp,$nonce];
sort($tmparr);
// 将三个参数拼接成字符串
$tmpstr=implode($tmparr);
// 将此字符串通过sha1方法加密
$tmpstr=sha1($tmpstr);
// 将加密过后的字符串与signature进行比对
if ($tmpstr==$signature){
return true;
}else{
return false;
}
}
}
实际开发过程是先有第二步后有第一步,当我们定义好了验证方法后,再到微信公众号中填写服务器配置,当提交过后显示token验证成功,表示接入微信服务器成功