阿里云

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

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


微信公众号开发

一、公众号要求


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);
    }
}


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



喜欢就点个赞吧

发表评论

需要先登录,才能发表评论哦!登录

网友评论
暂无评论