1. 云栖社区>
  2. PHP教程>
  3. 正文

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

作者:用户 来源:互联网 时间:2017-12-01 15:38:09

thinkphp机器人自动5.0回复实验源码下载

微信实验九、微信ThinkPHP5.0机器人自动回复及源码下载 - 摘要: 本文讲的是微信实验九、微信ThinkPHP5.0机器人自动回复及源码下载, 一、实验目的  1、掌握微信ThinkPHP5.0机器人自动回复; 2、掌握微信ThinkPHP5.0自定义回复内容。  3、掌握ThinkPHP5.0的路由方法。 二、实验内容 1、微信后台ThinkPHP5.0接收用户输入,实现自己的

一、实验目的 

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

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

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

二、实验内容

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

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

三、实验步骤及过程 

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

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

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

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

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

<?php
// [ 应用入口文件 ]
// 定义应用目录
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()方法。

<?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;
}

3ThinkPHP其它路由方法

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,公众号名称为“豆豆咨询”。扫描以下二维码,关注“豆豆咨询”

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

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

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

彩蛋号:1206


以上是微信实验九、微信ThinkPHP5.0机器人自动回复及源码下载的全部内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有其他相关内容,欢迎继续使用右上角搜索按钮进行搜索thinkphp , 机器人 , 自动 , 5.0 , 回复 , 实验 源码下载 ,以便于您获取更多的相关知识。