微信公共平台开发接口之智能回复开发实例
发布:smiling 来源: PHP粉丝网 添加日期:2016-07-15 15:48:34 浏览: 评论:0
智能回复是根据用户输入的条件来反馈结果用用户了,这个小编以前有做过信整理了一些例子供各位参考,比较完整主要是介绍在开发端了。
微信自推出后,着实火了一把,而支付功能的推出,又把微信推到了一个无可比拟的高度,然后申请微信订阅号或者服务号的人也开始比肩接踵。下面我将给大家简单讲解下微信公共平台开发接口。
先去 微信公共平台 申请账号,然后按照提示一步步。在选择订阅号和服务号上,个人只能申请订阅号,而且局限于基础功能;而企业两者都可以申请。订阅号和服务号的区别在于:订阅号可以每天群发一条消息,而服务号一个月才能群发一条;订阅号需要微信认证才能自定义菜单(企业才能认证,认证300元一次),而服务号则一开始就有自定义菜单,但是也可以认证,认证后服务号直接升级高级功能。更多差异请百度...
我申请的是订阅号,因为是个人。只要传一张手捧身份证的人头照就可以了,虽然有点傻。然后等待信息登记审核(一天左右时间)。通过后直接进入 微信公共平台 ,点击功能进入高级功能,关闭编辑模式,开启开发模式,然后下载微信提供的demo,解压,就一个文件:wx_sample.php,代码如下:
- <?php
- /**
- * wechat php test
- */
- //define your token
- define("TOKEN", "weixin");
- $wechatObj = new wechatCallbackapiTest();
- $wechatObj->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 = "<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(!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;
- }
- }
- }
- ?>
其实就是认证,然后发送消息。将文件传到你的服务器上,我放在根目录下,然后修改开发模式下的url和token值。我的url就是http://www.phpfensi.com /wx_sample.php,token就是上面define的token,这个可以改的,只要两边保持一致,默认是weixin。然后点提交,就会提示你成功了。然后扫下你申请的号码,发个消息,你会发现没反应,这个时候我们需要小调整一下,关闭接口文档中调用认证的方法,开启调用处理回复信息的方法:
- //$wechatObj->valid();
- $wechatObj->responseMsg();
这个时候你再发个消息,你就会收到:Welcome to wechat world!
是不是在关注了有些订阅号或者服务号之后,马上会收到一条消息。什么回复1,怎样怎样;回复2,怎样怎样之类的。
拿我自己的博客举例,我的关注语是:
感谢您关注AndyYang个人博客微信小助手。
回复【1】返回两篇最新文章
回复【2】返回两篇人气文章
回复【3】返回两篇热评文章
回复【4】返回两篇最新技术文章
回复【5】返回两篇最新写作文章
回复其他返回搜索关键字的两篇文章
更多精彩内容,尽在:www.phpfensi.com。亲们,请多多支持哦,谢谢~
那这个怎么实现呢?直接上代码:
- <?php
- /**
- * wechat php test
- */
- //define your token
- define("TOKEN", "weixin");
- $wechatObj = new wechatCallbackapiTest();
- //$wechatObj->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 = "<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($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".
- "更多精彩内容,尽在:<a href='http://www.phpfensi.com'>www.phpfensi.com</a>。亲们,请多多支持哦,谢谢~";
- ;
- }
- $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;
- }
- }
- }
当然这里只是简单的实现下,在微信公共平台提供的sdk上做简单的修改,实际上msgtype类型很多,就算消息类型为event的,它里面也有subscribe、LOCATION等,而如果细化的话,就用Event为subscribe来处理初次关注的事件,代码如下:
- <?php
- define("TOKEN", "weixin");
- $wechatObj = new wechatCallbackapiTest();
- $wechatObj->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 <a href='http://{$_SERVER['HTTP_HOST']}'>http://{$_SERVER['HTTP_HOST']}</a>,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="<xml>
- <ToUserName><![CDATA[{$this->fromUsername}]]></ToUserName>
- <FromUserName><![CDATA[{$this->toUsername}]]></FromUserName>
- <CreateTime>{$this->times}</CreateTime>
- <MsgType><![CDATA[{$type}]]></MsgType>";
- switch($type) {
- case "text" :
- $con.="<Content><![CDATA[$value_arr]]></Content>";
- break;
- case "news" :
- $con.="<ArticleCount>{$count}</ArticleCount>
- <Articles>";
- foreach($value_arr as $key => $v) {
- $con.="<item>
- <Title><![CDATA[{$v[0]}]]></Title>
- <Description><![CDATA[{$v[1]}]]></Description>
- <PicUrl><![CDATA[{$v[2]}]]></PicUrl>
- <Url><![CDATA[{$v[3]}]]></Url>
- </item>";
- }
- $con.="</Articles>";
- break;
- }
- echo $con."</xml>";
- }
- 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".
- "更多精彩内容,尽在:<a href='http://m.phpfensi.com/'>www.phpfensi.com</a>。亲们,请多多支持哦,谢谢~";
- ;
- return $data;
- }
- }
老实说很想弄个服务号玩玩,自定义菜单是没什么技术含量的,但是后面的微信支付之类,服务号仅有的服务,还是挺值得去尝试下的.
Tags: 开发实例 接口 智能
相关文章
- ·php SimpleXML读写XML接口文件例子分析(2014-08-20)
- ·php常用的IP地址查询接口及调用方法(2015-04-08)
- ·php 微信发红包接口测试实例(2015-12-24)
- ·接口返回数据用xml好还是json理解(2016-01-20)
- ·超简单的php获取ip地址信息的接口范例(2016-01-20)
- ·php调用新浪微博短链接api接口地址例子(2016-07-27)
- ·PHP中抽象类和接口的区别与例子(2016-07-27)
- ·PHP接口开发数据签名程序代码(2017-03-23)
- ·php怎么写api接口?php写api接口的实例代码(2018-07-01)
- ·php怎么写api接口 代码怎么写(2018-07-12)
- ·PHP中抽象类、接口的区别与选择分析(2019-11-05)
- ·接口隔离原则是什么?(2020-02-17)
- ·PHP接口--curl请求导致接收到报文不完整解决办法(2020-03-05)
- ·PHP调用百度天气接口API实现查询实时天气(2020-03-28)
- ·免费手机号码归属地API查询接口和PHP使用实例分享(2020-11-08)
- ·php版淘宝网查询商品接口代码示例(2021-02-21)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)