当前位置:首页 > PHP教程 > php应用 > 列表

微信公共平台开发接口之智能回复开发实例

发布:smiling 来源: PHP粉丝网  添加日期:2016-07-15 15:48:34 浏览: 评论:0 

智能回复是根据用户输入的条件来反馈结果用用户了,这个小编以前有做过信整理了一些例子供各位参考,比较完整主要是介绍在开发端了。

微信自推出后,着实火了一把,而支付功能的推出,又把微信推到了一个无可比拟的高度,然后申请微信订阅号或者服务号的人也开始比肩接踵。下面我将给大家简单讲解下微信公共平台开发接口。

先去 微信公共平台 申请账号,然后按照提示一步步。在选择订阅号和服务号上,个人只能申请订阅号,而且局限于基础功能;而企业两者都可以申请。订阅号和服务号的区别在于:订阅号可以每天群发一条消息,而服务号一个月才能群发一条;订阅号需要微信认证才能自定义菜单(企业才能认证,认证300元一次),而服务号则一开始就有自定义菜单,但是也可以认证,认证后服务号直接升级高级功能。更多差异请百度...

我申请的是订阅号,因为是个人。只要传一张手捧身份证的人头照就可以了,虽然有点傻。然后等待信息登记审核(一天左右时间)。通过后直接进入 微信公共平台 ,点击功能进入高级功能,关闭编辑模式,开启开发模式,然后下载微信提供的demo,解压,就一个文件:wx_sample.php,代码如下:

  1. <?php 
  2. /** 
  3.   * wechat php test 
  4.   */ 
  5.  
  6. //define your token 
  7. define("TOKEN""weixin"); 
  8. $wechatObj = new wechatCallbackapiTest(); 
  9. $wechatObj->valid(); 
  10.  
  11. class wechatCallbackapiTest 
  12.  public function valid() 
  13.     { 
  14.         $echoStr = $_GET["echostr"]; 
  15.  
  16.         //valid signature , option 
  17.         if($this->checkSignature()){ 
  18.          echo $echoStr
  19.          exit
  20.         } 
  21.     } 
  22.  
  23.     public function responseMsg() 
  24.     { 
  25.   //get post data, May be due to the different environments 
  26.   $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 
  27.  
  28.        //extract post data 
  29.   if (!emptyempty($postStr)){ 
  30.                  
  31.                $postObj = simplexml_load_string($postStr'SimpleXMLElement', LIBXML_NOCDATA); 
  32.                 $fromUsername = $postObj->FromUserName; 
  33.                 $toUsername = $postObj->ToUserName; 
  34.                 $keyword = trim($postObj->Content); 
  35.                 $time = time(); 
  36.                 $textTpl = "<xml> 
  37.        <ToUserName><![CDATA[%s]]></ToUserName> 
  38.        <FromUserName><![CDATA[%s]]></FromUserName> 
  39.        <CreateTime>%s</CreateTime> 
  40.        <MsgType><![CDATA[%s]]></MsgType> 
  41.        <Content><![CDATA[%s]]></Content> 
  42.        <FuncFlag>0</FuncFlag> 
  43.        </xml>";              
  44.     if(!emptyempty$keyword )) 
  45.                 { 
  46.                 $msgType = "text"
  47.                  $contentStr = "Welcome to wechat world!"
  48.                  $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr); 
  49.                  echo $resultStr
  50.                 }else
  51.                  echo "Input something..."
  52.                 } 
  53.  
  54.         }else { 
  55.          echo ""
  56.          exit
  57.         } 
  58.     } 
  59.    
  60.  private function checkSignature() 
  61.  { 
  62.         $signature = $_GET["signature"]; 
  63.         $timestamp = $_GET["timestamp"]; 
  64.         $nonce = $_GET["nonce"];  
  65.            
  66.   $token = TOKEN; 
  67.   $tmpArr = array($token$timestamp$nonce); 
  68.   sort($tmpArr, SORT_STRING); 
  69.   $tmpStr = implode( $tmpArr ); 
  70.   $tmpStr = sha1( $tmpStr ); 
  71.    
  72.   if$tmpStr == $signature ){ 
  73.    return true; 
  74.   }else
  75.    return false; 
  76.   } 
  77.  } 
  78.  
  79. ?> 

其实就是认证,然后发送消息。将文件传到你的服务器上,我放在根目录下,然后修改开发模式下的url和token值。我的url就是http://www.phpfensi.com /wx_sample.php,token就是上面define的token,这个可以改的,只要两边保持一致,默认是weixin。然后点提交,就会提示你成功了。然后扫下你申请的号码,发个消息,你会发现没反应,这个时候我们需要小调整一下,关闭接口文档中调用认证的方法,开启调用处理回复信息的方法:

  1. //$wechatObj->valid(); 
  2. $wechatObj->responseMsg(); 

这个时候你再发个消息,你就会收到:Welcome to wechat world!

是不是在关注了有些订阅号或者服务号之后,马上会收到一条消息。什么回复1,怎样怎样;回复2,怎样怎样之类的。

拿我自己的博客举例,我的关注语是:

感谢您关注AndyYang个人博客微信小助手。

回复【1】返回两篇最新文章

回复【2】返回两篇人气文章

回复【3】返回两篇热评文章

回复【4】返回两篇最新技术文章

回复【5】返回两篇最新写作文章

回复其他返回搜索关键字的两篇文章

更多精彩内容,尽在:www.phpfensi.com。亲们,请多多支持哦,谢谢~

那这个怎么实现呢?直接上代码:

  1. <?php 
  2. /** 
  3.  * wechat php test 
  4.  */ 
  5.  
  6. //define your token 
  7. define("TOKEN""weixin"); 
  8. $wechatObj = new wechatCallbackapiTest(); 
  9. //$wechatObj->valid(); 
  10. $wechatObj->responseMsg(); 
  11.  
  12. class wechatCallbackapiTest 
  13.  
  14.     public function valid() 
  15.     { 
  16.         $echoStr = $_GET["echostr"]; 
  17.  
  18.         //valid signature , option 
  19.         if($this->checkSignature()){ 
  20.             echo $echoStr; 
  21.             exit; 
  22.         } 
  23.     } 
  24.  
  25.     public function responseMsg() 
  26.     { 
  27.         //get post data, May be due to the different environments 
  28.         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 
  29.  
  30.         //extract post data 
  31.         if (!empty($postStr)){ 
  32.             $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 
  33.             $fromUsername = $postObj->FromUserName; 
  34.             $toUsername = $postObj->ToUserName; 
  35.             $keyword = trim($postObj->Content); 
  36.             $time = time(); 
  37.             $MsgType = $postObj->MsgType; //add 
  38.             $textTpl = "<xml> 
  39.                 <ToUserName><![CDATA[%s]]></ToUserName> 
  40.                 <FromUserName><![CDATA[%s]]></FromUserName> 
  41.                 <CreateTime>%s</CreateTime> 
  42.                 <MsgType><![CDATA[%s]]></MsgType> 
  43.                 <Content><![CDATA[%s]]></Content> 
  44.                 <FuncFlag>0</FuncFlag> 
  45.                 </xml>"; 
  46.  
  47.             if($MsgType != 'event') { 
  48.                 if(!empty( $keyword )) 
  49.                 { 
  50.                     $msgType = "text"
  51.                     $contentStr = "Welcome to wechat world!"
  52.                 }else
  53.                     echo "Input something..."
  54.                 } 
  55.             } else { 
  56.                 $msgType = "text"
  57.                 $contentStr = "感谢您关注AndyYang个人博客微信小助手。\r\n"
  58.                     "回复【1】返回两篇最新文章\r\n"
  59.                     "回复【2】返回两篇人气文章\r\n"
  60.                     "回复【3】返回两篇热评文章\r\n"
  61.                     "回复【4】返回两篇最新技术文章\r\n"
  62.                     "回复【5】返回两篇最新写作文章\r\n"
  63.                     "回复其他返回搜索关键字的两篇文章\r\n"
  64.                     "更多精彩内容,尽在:<a href='http://www.phpfensi.com'>www.phpfensi.com</a>。亲们,请多多支持哦,谢谢~"
  65.                 ; 
  66.             } 
  67.             $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); 
  68.             echo $resultStr; 
  69.  
  70.         }else { 
  71.             echo ""
  72.             exit; 
  73.         } 
  74.     } 
  75.  
  76.     private function checkSignature() 
  77.     { 
  78.         $signature = $_GET["signature"]; 
  79.         $timestamp = $_GET["timestamp"]; 
  80.         $nonce = $_GET["nonce"];  
  81.         $token = TOKEN; 
  82.         $tmpArr = array($token, $timestamp, $nonce); 
  83.         sort($tmpArr, SORT_STRING); //这个在新的sdk中添加了第二个参数(compare items as strings) 
  84.         $tmpStr = implode( $tmpArr ); 
  85.         $tmpStr = sha1( $tmpStr ); 
  86.         if( $tmpStr == $signature ){ 
  87.             return true
  88.         }else
  89.             return false
  90.         } 
  91.     } 
  92.  

当然这里只是简单的实现下,在微信公共平台提供的sdk上做简单的修改,实际上msgtype类型很多,就算消息类型为event的,它里面也有subscribe、LOCATION等,而如果细化的话,就用Event为subscribe来处理初次关注的事件,代码如下:

  1. <?php 
  2. define("TOKEN""weixin"); 
  3. $wechatObj = new wechatCallbackapiTest(); 
  4. $wechatObj->weixin_run(); 
  5.  
  6. class wechatCallbackapiTest { 
  7.  
  8.     private $fromUsername
  9.     private $toUsername
  10.     private $times
  11.     private $keyword
  12.     private $MsgType
  13.  
  14.     public function responseMsg() { 
  15.   $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 
  16.   if (!emptyempty($postStr)) {  
  17.             $postObj = simplexml_load_string($postStr'SimpleXMLElement', LIBXML_NOCDATA); 
  18.             $this->fromUsername = $postObj->FromUserName; 
  19.             $this->toUsername   = $postObj->ToUserName; 
  20.             $this->keyword      = trim($postObj->Content); 
  21.             $this->time         = time(); 
  22.             $this->MsgType      = $postObj->MsgType; 
  23.         } else { 
  24.          echo "Pay attention to <a href='http://{$_SERVER['HTTP_HOST']}'>http://{$_SERVER['HTTP_HOST']}</a>,thanks!"
  25.          exit
  26.         } 
  27.     } 
  28.  
  29.     public function weixin_run() { 
  30.         $this->responseMsg(); 
  31.         if($this->MsgType != 'event') { //attention 
  32.             $data = $this->getData(); 
  33.          $this->fun_xml("news"$datacount($data));  
  34.         } else { 
  35.             $data = $this->getWelData(); 
  36.          $this->fun_xml("text"$data, 1);  
  37.         } 
  38.     } 
  39.  
  40.  //type: text 文本类型, news 图文类型 
  41.  //text,array(内容),array(ID) 
  42.  //news,array(array(标题,介绍,图片,超链接),...小于10条),条数 
  43.  private function fun_xml($type$value_arr$count) { 
  44.      $con="<xml> 
  45.      <ToUserName><![CDATA[{$this->fromUsername}]]></ToUserName> 
  46.      <FromUserName><![CDATA[{$this->toUsername}]]></FromUserName> 
  47.      <CreateTime>{$this->times}</CreateTime> 
  48.      <MsgType><![CDATA[{$type}]]></MsgType>"; 
  49.      
  50.         switch($type) { 
  51.          case "text" :  
  52.       $con.="<Content><![CDATA[$value_arr]]></Content>"
  53.           break
  54.       case "news" :  
  55.       $con.="<ArticleCount>{$count}</ArticleCount> 
  56.        <Articles>"; 
  57.       foreach($value_arr as $key => $v) { 
  58.             $con.="<item> 
  59.              <Title><![CDATA[{$v[0]}]]></Title>  
  60.              <Description><![CDATA[{$v[1]}]]></Description> 
  61.              <PicUrl><![CDATA[{$v[2]}]]></PicUrl> 
  62.              <Url><![CDATA[{$v[3]}]]></Url> 
  63.              </item>"; 
  64.       } 
  65.       $con.="</Articles>"
  66.           break
  67.      } 
  68.      echo $con."</xml>"
  69.  } 
  70.  
  71.     private function getData() { 
  72.         //数据库通过关键字查询文章 
  73.  
  74.         //。。。。。。。。。。。。 
  75.         //。。。。。。。。。。。。 
  76.  
  77.         //返回文章结果的数组 
  78.         return $data;  
  79.     } 
  80.  
  81.     private function getWelData() { 
  82.         $data = "感谢您关注AndyYang个人博客微信小助手。\r\n"
  83.                     "回复【1】返回两篇最新文章\r\n"
  84.                     "回复【2】返回两篇人气文章\r\n"
  85.                     "回复【3】返回两篇热评文章\r\n"
  86.                     "回复【4】返回两篇最新技术文章\r\n"
  87.                     "回复【5】返回两篇最新写作文章\r\n"
  88.                     "回复其他返回搜索关键字的两篇文章\r\n"
  89.                     "更多精彩内容,尽在:<a href='http://m.phpfensi.com/'>www.phpfensi.com</a>。亲们,请多多支持哦,谢谢~"
  90.                 ; 
  91.         return $data
  92.     } 
  93.    

老实说很想弄个服务号玩玩,自定义菜单是没什么技术含量的,但是后面的微信支付之类,服务号仅有的服务,还是挺值得去尝试下的.

Tags: 开发实例 接口 智能

分享到: