PHP微信开发接口消息代码解析

操作方法

  • 01

    一、写好接口程序 在你的服务器上上传好一个接口程序文件  内容如下: <?php define("TOKEN", "weixin");//自己定义的token 就是个通信的私钥 $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); //$wechatObj->responseMsg(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $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>"; if(!empty( $keyword )) { $msgType = "text"; $contentStr = '你好啊.; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo '说说话吧'; } }else { echo '说说话吧'; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token =TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?> 二、配置微信公众平台回复接口 设置回复接口,填好URL和Token(token必须跟上面程序里面定义的Token一致) 三、验证接口 用自己的个人微信关注下你的公众账号,给这个账号发一条消息过去,收到原样的消息返回,即验证成功了。 四、开始自定义回复 注释掉$wechatObj->valid(); 这行,同时去掉//$wechatObj->responseMsg();这行的注释。 你可以修改responseMsg函数里面的代码,根据用户的消息类型('text','image','location')和消息内容来回复用户不同的内容。 消息接口就可以使用了,发个消息试试看吧? 封装weixin.class.php代码如下: <?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;    }<br>  //获得用户发过来的消息(消息内容和消息类型  )    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']);        }    }<br>  //回复文本消息    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);    }<br>  //根据数组参数回复图文消息    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){<br> //这里是你记录调试信息的地方  请自行完善   以便中间调试<br> }}?> 调用weixin.class.php 把你的微信公众平台主接口文件(如前面定义的http://www.yourdomain.com/weixin.php)中,修改代码为: <?php include_once('weixin.class.php');//引用刚定义的微信消息处理类<br>define("TOKEN", "mmhelper");<br>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); ?> 查询代码 还需要将数据库里面的查询结果格式化为特定的形式 <?php 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;} ?> 请到微市场微信导航提交你的微信公众帐号

(0)

相关推荐

  • 微信开发:微信接口配置详解

    现在微信开展的如火如荼,我们社会中的很多商业都离不开微信,因此能够掌握微信的开发,将是我们工作上的一把利器 万事只要开个头,然后加上自己的努力,就一路披荆斩棘. 下面我就带大家开个头--如何配置开发接 ...

  • 腾讯微信支付接口终于开放,使用指南(2014年)

    操作方法 01 2014年3月4日,腾讯官方已经发布,微信支付接口可以对外了,现在大家可以去申请了 通过这个消息,相信大家一定更想知道如何进行使用.小面我给大家分享下,微信支付接口如何开通和使用: 0 ...

  • 微信支付接口收不到支付通知原因

    微信支付是集成在微信客户端的支付功能,用户可以通过手机完成快速的支付流程. 本文主要介绍在开发过程中,用户下单支付完成后,统一下单API中提交的参数notify_url连接无法接收到微信通知的处理,前 ...

  • 微信支付接口怎么申请

    今日微信支付接口正式开放申请,不过虽然正式开放申请,但是微信支付现在只是针对于 通过认证的服务号,因为服务号的而功能及时为大众而服务的,比如商家,银行,政府机构的公众号,那么此次的微信支付申请主要还是 ...

  • 网站、APP、微信开发有什么区别?

    在移动互联网横行的今天,大量的用户对APP已经不再陌生,但是,也有很多企业分不知如何去区分网站.APP.微信开发.那么网站.APP.微信开发有什么区别? 操作方法 01 1.网站开发 网站其实是已经非 ...

  • Linux使用crontab运行Java程序定时任务代码解析

    简介 Linux中,crontab的功能是十分强大的,能够方便的调度程序的运行,甚至在很多时候能够替代程序中的定时任务. 分析 它的命令格式和主要参数如下: 命令格式 crontab [-u user ...

  • 小程序如何在手机端处理微信客服消息?

    很多朋友小程序上线后,客服消息这块一直没得到解决,只能在电脑端使用官方客服 使用手机端处理微信客服消息操作步骤: 01 第一步:注册 02 第二步:登录后台 - 设置 - 微信小程序 - 接入微信小程 ...

  • 关于appcan调用微信支付接口

    关于app调用微信支付接口 操作方法 01 一:业务流程 1:申请微信公众号 获取微信公众号开发者id及密钥 2:申请开通微信开发者账户 在开发者管理中心,申请相关APP调用ID及密钥 3:申请开通微 ...

  • 微信收不到qq离线消息怎么办 如何设置微信离线接收消息

    目前微信只支持离线消息提醒,不能在微信上看到具体的离线消息.收到离线消息提醒后,需要打开QQ终端才可以查看到具体的离线消息. 如果微信收不到离线消息提醒,小编整理了相关解决方法供参与:原理:只要QQ有 ...