微信公共账号之php开发接口示例

发布时间:2020-11-12编辑:脚本学堂
本文介绍了微信公共账号的php开发接口的例子,php接口开发微信公共账号功能,有需要的朋友参考下。

例子,微信公共账号之php开发接口
 

复制代码 代码示例:
<?php 
define("TOKEN","你的TOKEN"); 
class wechatCallBackApi{ 
    //public $signature;    //加密签名 
    //public $timestamp;    //时间戳 
    //public $nonce;        //随机数 
    //public $echostr;    //随机字符串,返回标志 
    public $fromUserName;  //发信人ID 
    public $toUserName;    //收信人ID(本公共号) 
    public $keyWords;      //文本信息 
    public $msgId;        //消息ID 
    public $welcomeMsg; //欢迎消息 
    public $msgType;    //消息类型 
    public $event;      //事件名 
    public $mediaId;    //语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体 
    public $format;      //语音格式:amr 
    public $recognition; //语音识别结果 
 
    public function __construct(){ 
        $this->welcomeMsg="HELLO,欢迎订阅!"; 
        //$this->main();    //*****第一次验证时打开,随后可关闭****** 
    } 
 
    //首次TOKEN验证 
    public function main(){ 
        $echoStr=$_GET['echostr']; 
        if($this->checkRes()){ 
            echo $echoStr; 
        }else{ 
            exit(); 
        } 
    } 
     
    //验证权限 
    private function checkRes(){ 
        $signature=$_GET['signature'];    //获取微信服务发送过来的参数 
        $timestamp=$_GET['timestamp']; 
        $nonce=$_GET['nonce']; 
 
        $token = TOKEN; 
        $tmpArr = array($token,$timestamp,$nonce); 
        sort($tmpArr);    //进行字典排序 
        $strWaitCheck = implode($tmpArr);    //进行字符串组合 
        $strWaitCheck = sha1($strWaitCheck); //对字符串进行sha1加密 
 
        if($strWaitCheck==$signature){ 
            return true; 
        }else{ 
            return false; 
        } 
    } 
 
    public function getWhatWeChatServerPost(){ 
            $huntPostContent = $GLOBALS["HTTP_RAW_POST_DATA"];    //获取微信服务post过来的内容 
            $newXmlObj =simplexml_load_string($huntPostContent,'SimpleXMLElement', LIBXML_NOCDATA);    //把post过的字符串载入对象 
            $this->fromUserName = $newXmlObj->FromUserName;    //向公共账号发信息的用户名 
            $this->toUserName = $newXmlObj->ToUserName;    //公共账号名 
            $this->keyWords = trim($newXmlObj->Content);    //消息内容 
            $this->msgId = trim($newXmlObj->MsgId);        //读取当前消息msgId 
            $this->msgType = trim($newXmlObj->MsgType);        //读取当前消息类型 
            $this->event = trim($newXmlObj->Event);        //读取当前事件名 
            $this->format = trim($newXmlObj->Format);    //语音格式:amr 
            $this->mediaId = trim($newXmlObj->MediaID);    //语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体 
            $this->recognition = trim($newXmlObj->Recognition);    //语音识别结果,UTF8编码 
        } 
    //消息响应 
    public function responseMsg(){ 
            $this->getWhatWeChatServerPost();    //执行接收微信服务器POST过来的东西 
 //当消息类型为text的时候处理 
 if(!emptyempty($this->keyWords)&& $this->msgType == "text"){ 
         $para = $this->keyWords; 
         switch($para){ 
                 case "1": 
                 $tmp_item = $this->textPicMaxTmp( 
                 "this is a test!!", 
                 "各位大叔大妈别太大较真,这就一测试滴", 
                 "http://www.baidu.com/img/bdlogo.gif", 
                 "http://www.baidu.com/"); 
                 $re_global = $this->resTextPicMax($this->fromUserName,$this->toUserName,1,$tmp_item); 
                 echo $re_global; 
                 break
 
             case "2": 
                 $contentResText = "Hello,buddy,you send me a "2"[玫瑰]"; 
                 $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$contentResText); 
                 echo $re_global; 
                 break; 
                  
             case "000":     
                 $contentResText = "你想返回的字符串"; 
                 $this->longStrHandleExtendfunc($contentResText); 
                 break;
 
             default: 
                 //调用功能判断函数处理 
                 $this->longStrHandle($para); 
                    break; 
             } 
     }else if($this->msgType == "event" && !emptyempty($this->event)){        //获取事件类型 
                 if($this->event=='subscribe'){ 
      $contentResText = $this->welcomeMsg;    //初次关注的时候推送欢迎消息 
      $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$contentResText); 
  }else if($this->event == "unsubscribe"){///这个地方好像没有作用!!! 
      $contentResText = "我擦,你咋跑了"; 
      $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$contentResText); 
      } 
         }else if($this->msgType == "voice"){ 
  if($this->recognition == ""){  www.jb200.com
          $contentResText ="亲,你说的火星文么,听不懂,建议您还是文字查询吧..[呲牙]";//语音无返回结果的时候给用记返回一条错误 
          $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$contentResText); 
      }else{ 
          $contentResText =$this->recognition; //其它情况下返回欢迎语 
          $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$contentResText); 
               
          } 
                  
             }else{ 
         //如果在text情况意外得到一条空消息的处理 
         echo ""; 
         exit(); 
         } 
 echo $re_global;    //返回值给微信服务器 
        } 
             
            //多次用到的几句话就定义了一个小方法 
            public function longStrHandleExtendfunc($conText){ 
 $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$conText); 
 echo $re_global; 
                } 
                 
            //收到除特定字符外的其它字符的处理方法,这个要根据你需要的具体逻辑处理     
            public function longStrHandle($waitHandleStr){ 
 
 /* 
     your code 
 */ 
         } 
 
        //回复文本信息方法 
        public function resTextMsg($tu,$fu,$textContent){ 
                //文本消息模板 
 $textTpl = "<xml> 
         <ToUserName><![CDATA[%s]]></ToUserName> 
         <FromUserName><![CDATA[%s]]></FromUserName> 
         <CreateTime>%s</CreateTime> 
         <MsgType><![CDATA[%s]]></MsgType> 
         <Content><![CDATA[%s]]></Content> 
         <FuncFlag>0</FuncFlag> 
         </xml>"; 
 $msgType = "text";    //消息类型 
 $time = time();        //时间戳 
 $resServerStr = sprintf($textTpl,$tu,$fu,$time,$msgType,$textContent);    //替换模板里的内容 
 return $resServerStr; 
 
            } 
 
        //回复图文 
        public function resTextPicMax($tu,$fu,$itemNum,$totalItemStr){ 
                //图片模板 
 $picTpl = "<xml> 
                  <ToUserName><![CDATA[%s]]></ToUserName> 
                  <FromUserName><![CDATA[%s]]></FromUserName> 
                  <CreateTime>%s</CreateTime> 
                  <MsgType><![CDATA[%s]]></MsgType> 
                  <ArticleCount>%s</ArticleCount> 
                  <Articles>" 
                 .$totalItemStr. 
                  "</Articles> 
              </xml>"; 
 
 $msgType = "news";    //消息类型 
 $time = time();        //时间戳 
 $resServerStr = sprintf($picTpl,$this->fromUserName,$this->toUserName,$time,$msgType,$itemNum);    //替换模板里的内容 
 return $resServerStr; 
            } 
 
 
            //图文模板处理 
            public function textPicMaxTmp($title,$des,$picUrl,$jumpUrl){ 
 //图文消息条目模板 
                $itemTpl=" 
      <item> 
                  <Title><![CDATA[%s]]></Title> 
                  <Description><![CDATA[%s]]></Description> 
                  <PicUrl><![CDATA[%s]]></PicUrl> 
                  <Url><![CDATA[%s]]></Url> 
                  </item> 
                "; 
                $resItemStr = sprintf($itemTpl,$title,$des,$picUrl,$jumpUrl);    //替换模板里的内容 
                return $resItemStr; 
                } 
 
            //接下来就是你自己定义的各种方法