微信公众号开发之关注事件(订阅事件),当我们启用开发者设置后,微信本身的消息回复将无法使用,那么在用户关注我们公众号的时候就没有任何反馈了, 对用户体验是非常不友好的。下面教大家如果做关注事件,既用户关注公众号,系统给用户一个反馈。
一、公众号要求
1、认证
认证是指每年向腾讯提交认证资质(300元认证费的那个东西);
2、订阅号(企业)、服务号
类型可在登录公众号后右上角查看;
3、具备开发资质
会编写代码,或拥有开发技术人员;
4、拥有服务器
能够运行的服务器(配置无要求);
二、开发步骤
1、配置服务器
登录公众号、点击左侧“开发“->”基本设置”,填写“服务器配置”,填写服务器地址、令牌、加密方式;
2、校验token
关于如何进行token验证,请阅读:微信公众号token验证
3、判断请求类型
三、实例代码
token验证
/**
* 服务器token校验
*/
public function token()
{
//获得参数 signature nonce token timestamp echostr
$nonce = input('get.nonce');
$token = 'shenlin';
$timestamp = input('get.timestamp');
$echostr = input('get.echostr');
$signature = input('get.signature');
//形成数组,然后按字典序排序
$array = [$nonce, $timestamp, $token];
sort($array);
//拼接成字符串,sha1加密 ,然后与signature进行校验
$str = sha1(implode($array));
if($str == $signature && $echostr) {
//第一次接入weixin api接口的时候
echo $echostr;
exit;
}
else {
$this->reponseMsg();
}
}
事件推送代码:
/**
* 接收事件推送并回复
*/
public function reponseMsg()
{
//1.获取到微信推送过来post数据(xml格式)
$postArr = file_get_contents("php://input");
//2.处理消息类型,并设置回复类型和内容
$postObj = simplexml_load_string($postArr);
//判断该数据包是否是订阅的事件推送
if(strtolower($postObj->MsgType) == 'event') {
//如果是关注 subscribe 事件
if(strtolower($postObj->Event == 'subscribe')) {
//回复用户消息(纯文本格式)
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$msgType = 'news';
$ArticleCount = 1;
$Title = '我是图文内容的标题';
$Description = '我是图文内容的简介';
$PicUrl = '我是图文内容的封面路径';
$Url = '我是图文内容的链接地址';
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
</Articles>
</xml>";
$info = sprintf($template, $toUser, $fromUser, $time, $msgType, $ArticleCount, $Title, $Description, $PicUrl, $Url);
echo $info;
}
}
//如果是发送文本消息,则返回此消息
if(strtolower($postObj->MsgType) == 'text') {
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$fromUser = $postObj->ToUserName;
$toUser = $postObj->FromUserName;
$time = time();
$msgType = 'text';
echo sprintf($template, $toUser, $fromUser, $time, $msgType, '发送的信息是:'.$postObj->Content);
}
}
后续将继续更新,敬请期待!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有