微信公众号验证token+关注回复+关键字回复+单图文回复

1. 首先登陆微信公众号开启开发者模式,配置基本信息

这里写图片描述

2. 验证token

public function validToken()
{
        $timestamp = $_GET['timestamp'];

        $nonce = $_GET['nonce'];

        $token = 'weixin';//要和上面配置的token令牌一样

        $signature = $_GET['signature'];

        $echostr = $_GET['echostr'];

        $array = array($timestamp,$nonce,$token);

        sort($array);

        $tmpstr = implode('',$array);

        $tmpstr = sha1($tmpstr);
        //如果是第一次访问验证token 否则是接受事件是否关注
        if ($tmpstr == $signature && $echostr) {
            echo $echostr;
            exit;
        } else {
            $this->responseMsg();
        }
  }

3. 验证通过之后可以写几种消息回复方式

public function responseMsg()
{
        //获取微信推送过来的数据(xml格式)
        $postArr = $GLOBALS["HTTP_RAW_POST_DATA"];

        $tmpstr  = $postArr;

        //处理消息,并设置回复类型
        $postObj = simplexml_load_string($postArr);

        //关注回复
        if (strtolower($postObj->MsgType) =="event"{
              //如果是关注事件
              if(strtolower($postObj->Event) == "subscribe"){
                  //回复用户消息
                  $toUser    =  $postObj->FromUserName;

                  $fromUser  =  $postObj->ToUserName;

                  $time      =  time();

                  $msgType   =  "text";

                  $content   =  "欢迎关注我的公众号:\n 我的公众号"."\n\n微信用户的openid:\n".$postObj->FromUserName."\n\n如需关键字测试请输入:\n(  你好 || phone || composer  )\n\n图文测试请输入:\n(  单图文  ||  多图文  )";


                  $template  =  " <xml>
                                  <ToUserName><![CDATA[%s]]></ToUserName>
                                  <FromUserName><![CDATA[%s]]></FromUserName>
                                  <CreateTime>%s</CreateTime>
                                  <MsgType><![CDATA[%s]]></MsgType>
                                  <Content><![CDATA[%s]]></Content>
                                  </xml> ";

                  $info      =  sprintf( $template,$toUser,$fromUser,$time,$msgType,$content);

                  echo  $info;

              }
        }

        //回复图文消息
        if (strtolower($postObj->MsgType) == "text" && trim($postObj->Content == "单图文")){

              $toUser    =  $postObj->FromUserName;

              $fromUser  =  $postObj->ToUserName;

              $array = array(
                  array(
                    "title"=>"微博",
                    "description"=>"微博首页!",
                    "picUrl"=>"url地址",
                    "url"=>"http://weibo.com/",
                  ),
              );

              $template  =  "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <ArticleCount>".count($array)."</ArticleCount>
                            <Articles>";

              foreach ($array as $key => $v) {
                  $template  .= "<item>
                                <Title><![CDATA[".$v['title']."]]></Title>
                                <Description><![CDATA[".$v['description']."]]></Description>
                                <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl>
                                <Url><![CDATA[".$v['url']."]]></Url>
                                </item>";
              }


              $template.= "</Articles></xml>";

              $time     = time();

              echo  sprintf( $template,$toUser,$fromUser,$time,"news");
     }elseif (strtolower($postObj->MsgType) == "text" && trim($postObj->Content == "多图文")) {
       $toUser    =  $postObj->FromUserName;

       $fromUser  =  $postObj->ToUserName;

       $array = array(
           array(
             "title"=>"腾讯网",
             "description"=>"腾讯首页!",
             "picUrl"=>"图片url地址",
             "url"=>"地址自己填写",
           ),
           array(
             "title"=>"easywechat文档",
             "description"=>"微信文档!",
             "picUrl"=>"图片url地址",
             "url"=>"地址自己填写",
           ),
           array(
             "title"=>"laravel学院",
             "description"=>"学院君!",
             "picUrl"=>"图片url地址",
              "url"=>"地址自己填写",
           ),
       );

       $template  =  "<xml>
                     <ToUserName><![CDATA[%s]]></ToUserName>
                     <FromUserName><![CDATA[%s]]></FromUserName>
                     <CreateTime>%s</CreateTime>
                     <MsgType><![CDATA[%s]]></MsgType>
                     <ArticleCount>".count($array)."</ArticleCount>
                     <Articles>";

       foreach ($array as $key => $v) {
           $template  .= "<item>
                         <Title><![CDATA[".$v['title']."]]></Title>
                         <Description><![CDATA[".$v['description']."]]></Description>
                         <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl>
                         <Url><![CDATA[".$v['url']."]]></Url>
                         </item>";
       }


       $template.= "</Articles></xml>";

       $time     = time();

       echo  sprintf( $template,$toUser,$fromUser,$time,"news");
     }else{
         switch ($postObj->Content) {

           case '你好':
             $content  = "hello 你好!";
             break;
           case 'phone':
             $content  = "我的手机号码:\n12339475";
             break;
           case 'php':
             $content  = "我是php";
             break;
           case 'composer':
             $content  = "<a href='链接地址";
             break;
         }
         $template = "<xml>
                     <ToUserName><![CDATA[%s]]></ToUserName>
                     <FromUserName><![CDATA[%s]]></FromUserName>
                     <CreateTime>%s</CreateTime>
                     <MsgType><![CDATA[%s]]></MsgType>
                     <Content><![CDATA[%s]]></Content>
                     </xml>";


         $toUser    =  $postObj->FromUserName;

         $fromUser  =  $postObj->ToUserName;

         $time     = time();

         $msgType  = "text";

         echo  sprintf( $template,$toUser,$fromUser,$time,$msgType,$content);
     }

}

微信文档地址:https://mp.weixin.qq.com/wiki

如果对你有帮助,记得点赞!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值