名著阅读 > 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 > 20.1.1 启用回调模式 >

20.1.1 启用回调模式

企业号应用有两种模式:普通模式和回调模式。

普通模式下,开发者可以通过简单的界面编辑,来设置自动回复以及底部的自定义菜单等功能。该模式类似于订阅号或服务号的编辑模式。

回调模式下,开发者可通过企业号提供的接口,实现设置自定义菜单、获取成员状态通知,以及微信消息转发等功能。回调模式类似于订阅号或服务号的开发者接入模式。

开启应用的回调模式时,企业号会要求你填写应用的URL、Token、EncodingAESKey等3个参数。

URL是企业应用接收企业号推送请求的访问协议和地址,支持HTTP或HTTPS协议。

Token可由企业任意填写,用于生成签名。

EncodingAESKey用于消息体的加密,是AES密钥的Base64编码。

当提交以上信息时,企业号将发送GET请求到填写的URL上,GET请求携带4个参数,企业在获取时需要做urldecode处理,否则会验证不成功。参数说明如表20-1所示。

表20-1 GET参数说明

企业号通过参数msg_signature对请求进行校验,如果确认此次GET请求来自企业号,那么企业号应该对echostr参数解密并原样返回echostr明文(不能加引号,不能带bom头,不能带换行符),则接入验证生效,回调模式才能开启。

后续回调企业号接口时都会在请求URL中带上以上参数(echostr除外),校验方式与首次验证URL一致。

企业号应用启用回调模式的代码如下。


 1 require_once("WXBizMsgCrypt.php");
 2 $encodingAesKey = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG";
 3 $token = "FangBei";
 4 $corpId = "wx82e2c31215d9a5a7";
 5 
 6 class wechatCallbackapiTest extends WXBizMsgCrypt
 7 {
 8     // 验证URL有效
 9     public function valid
10     {
11         $sVerifyMsgSig = $_GET["msg_signature"];
12         $sVerifyTimeStamp = $_GET["timestamp"];
13         $sVerifyNonce = $_GET["nonce"];
14         $sVerifyEchoStr = $_GET["echostr"];
15         $sEchoStr = "";
16         $errCode = $this->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, 
           $sVerifyEchoStr, $sEchoStr);
17         if ($errCode == 0) {
18             // 验证URL成功,将sEchoStr返回
19             echo $sEchoStr;
20         }
21     }
22 }
23 
24 $wechatObj = new wechatCallbackapiTest($token, $encodingAesKey, $corpId);
25 if (!isset($_GET['echostr'])) {
26     $wechatObj->valid;
27 }
  

回调模式启用成功之后,界面如图20-2所示。

图20-2 配置回调模式