美文网首页怎么使用微信?微信PHP开发
微信实验九、微信ThinkPHP5.0机器人自动回复及源码下载

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

作者: chenxhjeo | 来源:发表于2017-04-16 16:05 被阅读396次

    一、实验目的

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

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

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

    二、实验内容

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

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

    三、实验步骤及过程

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

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

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

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

    // [应用入口文件]

    //定义应用目录

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

    //加载框架引导文件

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

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

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

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

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

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

    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;

    }

    3ThinkPHP其它路由方法

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

    注意的是admin.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。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/rymaattx.html