前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >公众号关注/订阅事件-微信公众号开发

公众号关注/订阅事件-微信公众号开发

作者头像
申霖
发布2019-12-27 17:37:26
7.2K0
发布2019-12-27 17:37:26
举报
文章被收录于专栏:小白程序猿小白程序猿

微信公众号开发之关注事件(订阅事件),当我们启用开发者设置后,微信本身的消息回复将无法使用,那么在用户关注我们公众号的时候就没有任何反馈了, 对用户体验是非常不友好的。下面教大家如果做关注事件,既用户关注公众号,系统给用户一个反馈。

一、公众号要求

1、认证

认证是指每年向腾讯提交认证资质(300元认证费的那个东西);

2、订阅号(企业)、服务号

类型可在登录公众号后右上角查看;

3、具备开发资质

会编写代码,或拥有开发技术人员;

4、拥有服务器

能够运行的服务器(配置无要求);

二、开发步骤

1、配置服务器

登录公众号、点击左侧“开发“->”基本设置”,填写“服务器配置”,填写服务器地址、令牌、加密方式;

2、校验token

关于如何进行token验证,请阅读:微信公众号token验证

3、判断请求类型

三、实例代码

token验证

代码语言:javascript
复制
/**
 * 服务器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();
    }
}

事件推送代码:

代码语言:javascript
复制
/**
 *  接收事件推送并回复
 */
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);
    }
}

后续将继续更新,敬请期待!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档