本文主要介绍PHP版微信公众平台接口中智能回复的开发,结合实例比较详细地分析了唯一回复功能的原理以及通过微信接口调用的具体实现技巧,有需要的朋友可以参考一下。
本文讲述了PHP版微信公众平台接口开发之智能回复功能的实现方法,分享给大家,供大家参考,具体如下:
智能回复就是根据用户输入的条件,将结果反馈给用户。小编之前做过这个,整理了一些例子,供大家参考。比较全的那个主要介绍开发端。
微信自从上线之后就非常受欢迎,而支付功能的推出更是将微信推向了无与伦比的高度,随后申请微信订阅号或者服务号的人也开始蜂拥而至。下面我就简单讲解一下微信公众平台开发接口。
首先去微信公众平台申请一个账号,然后按照提示一步步操作就可以了。在选择订阅号和服务号的时候,个人只能申请订阅号,而且仅限于基础功能;而企业则可以两者同时申请。订阅号和服务号的区别在于,订阅号每天可以发一条群消息,而服务号每个月只能发一条群消息;订阅号需要微信认证才能自定义菜单(只有企业才能认证,认证费用300元/次),而服务号一开始就有自定义菜单,但是也可以认证,认证后服务号会直接升级为高级功能。更多区别请百度...
我申请了订阅号,因为我是个人,只需要上传一张自己拿着身份证的头像照片就行了,虽然有点傻逼。然后就等着信息登记审核(大概一天左右)。通过之后直接进入微信公众平台,点击功能进入高级功能,关闭编辑模式,开启开发模式,然后下载微信提供的demo,解压,只有一个文件:.php,代码如下:
valid(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!emptyempty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = ""; if(!emptyempty( $keyword )) { $msgType = "text"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?> %s 0
登录并复制
其实就是认证,然后发消息。把文件上传到你的服务器,我放在根目录下,然后在开发模式中修改url和token值。假设这里用的url是,token就是上面的token。这个可以改,只要双方一致就可以。默认就是。然后点击提交,会提示你成功了。然后扫描你申请的号码,发消息,你会发现没有任何回应。这时候我们需要做一个小小的调整,在接口文档中关闭调用认证的方法,开启调用回复消息的方法:
//$wechatObj->valid(); $wechatObj->responseMsg();
登录并复制
如果你此时发送消息,你将收到:致世界!
关注一些订阅号或者服务号之后,你会立刻收到一条消息,比如回复1,某某;回复2,某某。
那么我们该如何实现呢?代码如下:
valid(); $wechatObj->responseMsg(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract 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(); $MsgType = $postObj->MsgType; //add $textTpl = ""; if($MsgType != 'event') { if(!empty( $keyword )) { $msgType = "text"; $contentStr = "Welcome to wechat world!"; }else{ echo "Input something..."; } } else { $msgType = "text"; $contentStr = "感谢您关注AndyYang个人博客微信小助手。\r\n". "回复【1】返回两篇最新文章\r\n". "回复【2】返回两篇人气文章\r\n". "回复【3】返回两篇热评文章\r\n". "回复【4】返回两篇最新技术文章\r\n". "回复【5】返回两篇最新写作文章\r\n". "回复其他返回搜索关键字的两篇文章\r\n". "更多精彩内容,尽在:www.jb51.net。亲们,请多多支持哦,谢谢~"; ; } $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else { echo ""; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); //这个在新的sdk中添加了第二个参数(compare items as strings) $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } %s 0
登录并复制
当然这只是简单的实现,我们对微信公众平台提供的SDK进行简单的修改,其实类型有很多,即使消息类型是event,还包含等等,如果细化一下,Event就是用来处理初始关注的事件,代码如下:
weixin_run(); class wechatCallbackapiTest { private $fromUsername; private $toUsername; private $times; private $keyword; private $MsgType; public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!emptyempty($postStr)) { $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $this->fromUsername = $postObj->FromUserName; $this->toUsername = $postObj->ToUserName; $this->keyword = trim($postObj->Content); $this->time = time(); $this->MsgType = $postObj->MsgType; } else { echo "Pay attention to http://{$_SERVER['HTTP_HOST']},thanks!"; exit; } } public function weixin_run() { $this->responseMsg(); if($this->MsgType != 'event') { //attention $data = $this->getData(); $this->fun_xml("news", $data, count($data)); } else { $data = $this->getWelData(); $this->fun_xml("text", $data, 1); } } //type: text 文本类型, news 图文类型 //text,array(内容),array(ID) //news,array(array(标题,介绍,图片,超链接),...小于10条),条数 private function fun_xml($type, $value_arr, $count) { $con=""; } private function getData() { //数据库通过关键字查询文章 //。。。。。。。。。。。。 //。。。。。。。。。。。。 //返回文章结果的数组 return $data; } private function getWelData() { $data = "感谢您关注AndyYang个人博客微信小助手。\r\n". "回复【1】返回两篇最新文章\r\n". "回复【2】返回两篇人气文章\r\n". "回复【3】返回两篇热评文章\r\n". "回复【4】返回两篇最新技术文章\r\n". "回复【5】返回两篇最新写作文章\r\n". "回复其他返回搜索关键字的两篇文章\r\n". "更多精彩内容,尽在:www.jb51.net。亲们,请多多支持哦,谢谢~"; ; return $data; } } fromUsername}]]> toUsername}]]> {$this->times} "; switch($type) { case "text" : $con.=" "; break; case "news" : $con.=" {$count} "; foreach($value_arr as $key => $v) { $con.=" "; break; } echo $con."- "; } $con.="
登录并复制
说实话,我还挺想弄个服务号来玩玩的,自定义菜单其实不需要太多技术含量,但后续的微信支付等服务号独有的服务还是值得尝试的。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。