您的位置:首页 > 编程语言 > PHP开发

微信实验九、微信ThinkPHP5.0机器人自动回复及源码下载

2017-04-16 16:11 405 查看

一、实验目的 

1、掌握微信ThinkPHP5.0机器人自动回复;

2、掌握微信ThinkPHP5.0自定义回复内容。 

3、掌握ThinkPHP5.0的路由方法。

二、实验内容

1、微信后台ThinkPHP5.0接收用户输入,实现自己的回复内容。

2、微信后台ThinkPHP5.0调用机器人接口,实现机器人自动回复。

三、实验步骤及过程 

实验八已经实现了微信后台PHP发送智能机器人的消息以及自定义消息,可以接收文本信息和语音信息,但通常系统是基于某种框架开发的,因此,本次实验将基于ThinkPHP5.0框架下,实现智能机器人回复与用户自定义回复。

微信收发文本消息和语音消息过程可以参考实验八,本次实验注重ThinkPHP5.0框架的介绍。微信收发信息流程如实验八(微信ThinkPHP5.0机器人自动回复及源码下载),在“瑞昌快来订”公众号里面可以有如下测试,图示如下:



1、ThinkPHP主程序入口index.php编辑

在ThinkPHP中,按照缺省的设置,编辑应用程序入口文件,包括定义应用程序入口和加载框架引导文件,注意文件的目录结构。当前index.php文件在public目录下,如下所示。

<?php

// [ 应用入口文件 ]

// 定义应用目录

define('APP_PATH', __DIR__ . '/../application/');

// 加载框架引导文件

require __DIR__ . '/../thinkphp/start.php';


如果要放到其它地方,只需要修改对应的目录结构。应用目录文件在application文件夹下,框架引导文件是/thinkphp/start.php。

2、ThinkPHP控制器Index.php验证与回复消息

1)接收微信服务器发送数据的缺省方法index()

接收微信服务器发送数据的缺省方法为index(),说明如下:

ThinkPHP缺省的控制器入口文件为/application/index/Index.php。该文件名必须是大写字母开头,文件名为Index.php,该文件里面的方法index()属性为public,为缺省的控制器入口文件,即通过http://你的域名/ThinkPHP/public/能够直接访问到Index.php文件的index()方法。

<?php

namespace app\index\controller;

use think\Controller;

define("TOKEN", "weixin");      //与服务器设置的要一致

//class Index extends Controller

class Index extends Controller

{

      public function index()

      {

               if (!isset($_GET['echostr'])) {  

                       $this->responseMsg();

               } else {

                       $echoStr = $_GET['echostr'];

                       if($this->checkSignature()){

                               echo $echoStr;

                               exit;

                       }

               }

      }

      

      //名称:valid()

      //功能:验证微信服务器发送的消息,并发送给$echoStr

      //返回:从微信服务器发送过来的echostr

      public function valid()

      {

               $echoStr = $_GET["echostr"];      //从微信服务器得到echostr

               if($this->checkSignature()){      //验证通过,则返回$echoStr

                       echo $echoStr;

                       exit;

               }

      }

      

      //名称:checkSignature()

      //功能:验证微信服务器发送过来的signature与加密数据是否一致

      //返回:true:验证通过;false:验证失败

      private function checkSignature()

      {

               $signature = $_GET["signature"];//从微信服务器得到signature

               $timestamp = $_GET["timestamp"];//从微信服务器得到timestamp

               $nonce = $_GET["nonce"];         //从微信服务器得到nonce

               $token = TOKEN;  //从微信管理员设置的TOKEN

               $tmpArr = array($token, $timestamp, $nonce);//建立数组tmpArr

               sort($tmpArr);   //字典序排序;

               $tmpStr = implode($tmpArr); //将数组的内容连接成一个字符串

               $tmpStr = sha1($tmpStr); // sha1加密;

               

               if($tmpStr == $signature){ //验证

                       return true;

               }else{

                       return false;

               }

      }


2)接收微信服务器发送数据的其它方法index()

index()方法通常作为网页的入口文件,通常可以采用其他的方法来接收微信服务器发送过来的数据,我们只需要增加一个方法即可,例如receiveWeixin(),如下所示。

public function receiveWeixin()

      {

               if (!isset($_GET['echostr'])) {  

                       $this->responseMsg();

               } else {

                       $echoStr = $_GET['echostr'];

                       if($this->checkSignature()){

                               echo $echoStr;

                               exit;

                       }

               }

      }


3)接收和向微信服务器发送数据的其它方法

与微信服务器通信的其它方法,如接收和发送数据,可以参考实验八,主要区别在于,机器人的回复消息:

//名称:receiveVoice()

//功能:接收语音消息

//返回:回发消息

private function receiveVoice($object)

{

      $mystring = (string)$object->Recognition;

      $mystring = ' '.$mystring;

      $findme   = '薛之谦';

      if(($pos = stripos($mystring,$findme))){//播放薛之谦动物世界

               //发送语音消息

               $content = array();

      $content = array("Title"=>"动物世界", "Description"=>"歌手:薛之谦", "MusicUrl"=>"https://你的域名/sinacloud/doud/animalWorld-xuezhiqian.mp3", "HQMusicUrl"=>"https://78976932.pagekite.me/sinacloud/doud/animalWorld-xuezhiqian.mp3");

      $result = $this->transmitMusic($object, $content);

    } else {

      $apiKey="…"; //你的appkey

      $INFO = $object->Recognition;           $apiURL="http://www.tuling123.com/openapi/api?key=$apiKey&info=$INFO";//appkey地址

      $cmd=file_get_contents($apiURL);

      $tmp=json_decode($cmd,1); 

      if(substr($tmp['code'],0,1)!="4")

      {

           $result= $this->transmitText($object, $tmp['text']);

      }else{

           $content = "出错了!";

           $result = "";

      }

     }

return $result;

}


3、ThinkPHP其它路由方法

ThinkPHP5.0可以采用其他的路由方法,即可以采用其他的入口文件,例如我们定义了admin.php入口文件,以及其它的模块test和方法index()。

注意的是admin.php入口文件通常需要做些设置功能,例如定义应用目录、加载框架文件、绑定模块、加载日志文件、关闭缺省路由、执行应用等,内容如下:

<?php

// [ 应用入口文件 ]

// 定义应用目录

define('APP_PATH', __DIR__ . '/../application/');

// 加载框架引导文件

require __DIR__ . '/../thinkphp/base.php';

// 绑定当前入口文件到test模块

\think\Route::bind('test');

require 'phplog.php';//日志文件

// 关闭admin模块的路由

\think\App::route(false);

// 执行应用

\think\App::run()->send();


具体的ThinkPHP5.0源代码见“豆豆咨询”公众号输入彩蛋号1206,即可获得。

四、技术服务

1、如果有疑问或者需要帮助,请加入QQ群(群名称:豆豆咨询,群号:625686304);或者公众号douAsk,公众号名称为“豆豆咨询”。扫描以下二维码,关注“豆豆咨询”



技术QQ群名称:豆豆咨询,群号:625686304

微信公众号名称:豆豆咨询,微信公众号:douAsk

彩蛋号:1206。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息