怎么使用微信?微信PHP开发

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

2017-04-16  本文已影响396人  chenxhjeo

一、实验目的

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。

上一篇下一篇

猜你喜欢

热点阅读