博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信公众平台消息接口开发-封装weixin.class.php(转)
阅读量:6670 次
发布时间:2019-06-25

本文共 5071 字,大约阅读时间需要 16 分钟。

一、封装weixin.class.php

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

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

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 = "
            
$this->msg['FromUserName']}]]>
            
$this->msg['ToUserName']}]]>
            
{
$CreateTime}
            
            
            
%s
            
";        return sprintf($textTpl,$text,$FuncFlag);    }
     //根据数组参数回复图文消息    public function makeNews($newsData=array())    {        $CreateTime = time();        $FuncFlag = $this->setFlag ? 1 : 0;        $newTplHeader = "
            
$this->msg['FromUserName']}]]>
            
$this->msg['ToUserName']}]]>
            
{
$CreateTime}
            
            
            
%s
";        $newTplItem = "
            
<![CDATA[%s]]>            
            
            
            
";        $newTplFoot = "
            
%s
            
";        $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)中,修改代码为:

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

 三、查询代码

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

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

 

转载地址:http://kjlxo.baihongyu.com/

你可能感兴趣的文章
Host '192.168.1.21' is not allowed to connect to this MySQL server
查看>>
javascript基础知识
查看>>
LeetCode OJ:Integer to Roman(转换整数到罗马字符)
查看>>
redis在Linux上的安装
查看>>
灵活就业协议影响应届身份吗,档案应该如何处理
查看>>
校招开篇第一次面试——打响校招的第一枪(二)
查看>>
iOS自定义发送消息输入框
查看>>
电动汽车与ADAS
查看>>
.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱
查看>>
正则表达式匹配html标签里面的内容
查看>>
window.open()的具体使用方法
查看>>
数学分析_Tom Apostol_习题 9.1
查看>>
myeclipse删除项目后重新导入
查看>>
在进入新版本 的时候,进行推送引导
查看>>
Django 下载和初识
查看>>
HBase + Solr Cloud实现HBase二级索引
查看>>
移动端bug集合
查看>>
git的使用(本地版本库)
查看>>
[网页游戏开发]Morn简介及使用教程
查看>>
oracle where 条件的执行顺序分析1
查看>>