首頁 後端開發 php教程 微信公众平台消息接口开发(2)-封装weixin.class.php

微信公众平台消息接口开发(2)-封装weixin.class.php

Jun 23, 2016 pm 02:38 PM

一、封装weixin.class.php

由于微信公众平台的通信使用的是特定格式的XML数据,每次接受和回复都要去做一大堆的数据处理。

我们就考虑在这个基础上做一次封装,weixin.class.php,代码如下:

1

<?phpclass Weixin{   public $token = '';//token  public $debug =  false;//是否debug的状态标示,方便我们在调试的时候记录一些中间数据    public $setFlag = false;    public $msgtype = 'text';   //('text','image','location')   public $msg = array();  public function __construct($token,$debug)  {       $this->token = $token;       $this->debug = $debug;   }     //获得用户发过来的消息(消息内容和消息类型  ) public function getMsg()    {       $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];      if ($this->debug) {                        $this->write_log($postStr);        }       if (!empty($postStr)) {         $this->msg = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);         $this->msgtype = strtolower($this->msg['MsgType']);       }   }     //回复文本消息  public function makeText($text='')  {       $CreateTime = time();       $FuncFlag = $this->setFlag ? 1 : 0;      $textTpl = "<xml>         <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>          <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>            <CreateTime>{$CreateTime}</CreateTime>          <MsgType><![CDATA[text]]></MsgType>           <Content><![CDATA[%s]]></Content>         <FuncFlag>%s</FuncFlag>         </xml>";      return sprintf($textTpl,$text,$FuncFlag);   }     //根据数组参数回复图文消息    public function makeNews($newsData=array()) {       $CreateTime = time();       $FuncFlag = $this->setFlag ? 1 : 0;      $newTplHeader = "<xml>            <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>          <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>            <CreateTime>{$CreateTime}</CreateTime>          <MsgType><![CDATA[news]]></MsgType>           <Content><![CDATA[%s]]></Content>         <ArticleCount>%s</ArticleCount><Articles>";       $newTplItem = "<item>         <Title><![CDATA[%s]]></Title>         <Description><![CDATA[%s]]></Description>         <PicUrl><![CDATA[%s]]></PicUrl>           <Url><![CDATA[%s]]></Url>         </item>";     $newTplFoot = "</Articles>            <FuncFlag>%s</FuncFlag>         </xml>";      $Content = '';      $itemsCount = count($newsData['items']);        $itemsCount = $itemsCount < 10 ? $itemsCount : 10;//微信公众平台图文回复的消息一次最多10条     if ($itemsCount) {          foreach ($newsData['items'] as $key => $item) {              if ($key<=9) {                   $Content .= sprintf($newTplItem,$item['title'],$item['description'],$item['picurl'],$item['url']);              }           }       }       $header = sprintf($newTplHeader,$newsData['content'],$itemsCount);      $footer = sprintf($newTplFoot,$FuncFlag);       return $header . $Content . $footer;    }   public function reply($data)    {       if ($this->debug) {                  $this->write_log($data);     }       echo $data; }   public function valid() {       if ($this->checkSignature()) {           if( $_SERVER['REQUEST_METHOD']=='GET' )         {               echo $_GET['echostr'];              exit;           }       }else{          write_log('认证失败');          exit;       }   }   private function checkSignature()   {       $signature = $_GET["signature"];        $timestamp = $_GET["timestamp"];        $nonce = $_GET["nonce"];        $tmpArr = array($this->token, $timestamp, $nonce);       sort($tmpArr);      $tmpStr = implode( $tmpArr );       $tmpStr = sha1( $tmpStr );      if( $tmpStr == $signature ){            return true;        }else{          return false;       }   }    private function write_log($log){       //这里是你记录调试信息的地方  请自行完善   以便中间调试    }}?>

登入後複製

二、调用weixin.class.php

把你的微信公众平台主接口文件(如前面定义的http://www.yourdomain.com/weixin.php)中,修改代码为:

1

include_once('weixin.class.php');//引用刚定义的微信消息处理类define("TOKEN", "mmhelper");define('DEBUG', true);$weixin = new Weixin(TOKEN,DEBUG);//实例化$weixin->getMsg();$type = $weixin->msgtype;//消息类型$username = $weixin->msg['FromUserName'];//哪个用户给你发的消息,这个$username是微信加密之后的,但是每个用户都是一一对应的if ($type==='text') { if ($weixin->msg['Content']=='Hello2BizUser') {//微信用户第一次关注你的账号的时候,你的公众账号就会受到一条内容为'Hello2BizUser'的消息      $reply = $weixin->makeText('欢迎你关注妈妈助手哦,?丝'); }else{//这里就是用户输入了文本信息       $keyword = $weixin->msg['Content'];   //用户的文本消息内容                include_once("chaxun.php");//文本消息 调用查询程序                  $chaxun= new chaxun(DEBUG,$keyword,$username);                $results['items'] =$chaxun->search();//查询的代码                             $reply = $weixin->makeNews($results);    }}elseif ($type==='location') {      //用户发送的是位置信息  稍后的文章中会处理                  }elseif ($type==='image') {      //用户发送的是图片 稍后的文章中会处理}elseif ($type==='voice') {           //用户发送的是声音 稍后的文章中会处理}$weixin->reply($reply);

登入後複製

三、查询代码

还需要将数据库里面的查询结果格式化为特定的形式

1

public function search(){       $record=array();  //定义返回结果的数组       $list = $this->search($this->keyword);//普通的根据关键词查询数据库的操作  代码就不用分享了    if(is_array($list)&&!empty($list)){                                foreach($list as $msg){                 $record[]=array(//以下代码,将数据库中查询返回的数组格式化为微信返回消息能接收的数组形式,即title、description、picurl、url 详见微信官方的文档描述                  'title' =>$msg['title'],                 'description' =>$msg['discription'],                 'picurl' => $msg['pic_url'],                 'url' =>$msg['url']              );        }    }    return $record;}

登入後複製

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

承接微信公众平台消息接口开发、PHP、.NET、javascript、html5程序开发;新浪微博应用、腾讯微博应用等各大开放平台应用开发业务

联系QQ:1433273389 

关注妈妈助手(账号mmhelper)方法:

1. 依次进入以下路径:朋友们?>添加朋友?>搜号码,输入mmhelper,不区分大小写,点击查找,然后点击关注。

2. 扫描二维码:

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

11個最佳PHP URL縮短腳本(免費和高級) 11個最佳PHP URL縮短腳本(免費和高級) Mar 03, 2025 am 10:49 AM

11個最佳PHP URL縮短腳本(免費和高級)

Instagram API簡介 Instagram API簡介 Mar 02, 2025 am 09:32 AM

Instagram API簡介

在Laravel中使用Flash會話數據 在Laravel中使用Flash會話數據 Mar 12, 2025 pm 05:08 PM

在Laravel中使用Flash會話數據

構建具有Laravel後端的React應用程序:第2部分,React 構建具有Laravel後端的React應用程序:第2部分,React Mar 04, 2025 am 09:33 AM

構建具有Laravel後端的React應用程序:第2部分,React

簡化的HTTP響應在Laravel測試中模擬了 簡化的HTTP響應在Laravel測試中模擬了 Mar 12, 2025 pm 05:09 PM

簡化的HTTP響應在Laravel測試中模擬了

php中的捲曲:如何在REST API中使用PHP捲曲擴展 php中的捲曲:如何在REST API中使用PHP捲曲擴展 Mar 14, 2025 am 11:42 AM

php中的捲曲:如何在REST API中使用PHP捲曲擴展

在Codecanyon上的12個最佳PHP聊天腳本 在Codecanyon上的12個最佳PHP聊天腳本 Mar 13, 2025 pm 12:08 PM

在Codecanyon上的12個最佳PHP聊天腳本

宣布 2025 年 PHP 形勢調查 宣布 2025 年 PHP 形勢調查 Mar 03, 2025 pm 04:20 PM

宣布 2025 年 PHP 形勢調查

See all articles