我已将博客放到csdn平台了,后面也是打算在csdn上编写博客,本文在csdn博客的地址:http://blog.csdn.net/wsa518/article/details/51112020

上一篇博客我介绍了如何申请一个新浪云,并创建一个云应用,应用的开发语言为PHP。这篇博客将详细介绍编码实现微信公众号智能聊天功能。

大家先打开微信公众号的开发文档:https://mp.weixin.qq.com/wiki,找到“接入指南”

将官方的PHP代码文件下载下来:

解压缩后修改文件名并拷贝到我们的项目(从新浪云svn上Check Out下来的项目)中,如下图所示(这里我删除了“config.yaml”文件和替换了“index.php”文件):

紧接着修改下代码中的TOKEN值:

现在我们通过svn将代码提交到新浪云上,去微信公众号后台的“开发” -> “基本配置”中修改下配置:

修改配置中的URL就是新浪云应用的地址,Token就是代码中定义的TOKEN常量,EncodingAESKey随机生成就行了(主要用来加密使用,这篇博客不讲解),点击“提交”按钮,正常情况下应该是配置成功的,如果有人没有配置成功可以尝试网上搜索下解决方案,实在没辙,发邮箱wsa518@yeah.net或者博客私聊我都行:

好了,和微信对接上后,我们要开始写代码咯:

先创建一个名叫TuringRobot类,用来处理图灵机器人的逻辑,这里我暂时只实现了图灵机器人的文本、链接、新闻和菜谱消息的处理,有兴趣的可以再深入研究下其他类型的回复:

<?php
/*** Created by PhpStorm.* User: Ainsworth* Date: 16/4/9* Time: 下午5:20*/define("TURING_API_URL", "http://www.tuling123.com/openapi/api");
define("TURING_API_KEY", "您申请的图灵机器人Api Key");class TuringRobot
{/*** 获取图灵机器人的回复** @param $content* @param $user_id* @return string*/public function getInfo($content, $user_id){$url = TURING_API_URL . "?key=" . TURING_API_KEY . "&info=" . $content . "&userid=" . $user_id;$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);curl_close($ch);return json_decode($output, true);}/*** 回复文本消息** @param $info* @return mixed*/public function textInfo($info){return $info["text"];}/*** 回复链接消息** @param $info* @return string*/public function linkInfo($info){return $info["text"] . "\n" . $info["url"];}/*** 回复新闻消息** @param $info* @return string*/public function newsInfo($info){$news = $info["text"] . "\n\n";$list = $info["list"];foreach ($list as $l) {error_log($l["icon"]);$news .= $l["article"] . "\n" . $l["detailurl"] . "\n";}return $news;}/*** 回复菜谱消息** @param $info* @return array*/public function cookbookInfo($info){$new_list = array();$list = $info["list"];for ($i = 0; $i < count($list); $i++) {// 由于微信图文消息最多发8条, 所以这边限制下if ($i > 8) break;$new_list[$i] = array("title" => $list[$i]["name"],"description" => $list[$i]["info"],"picurl" => $list[$i]["icon"],"url" => $list[$i]["detailurl"]);}error_log(serialize($new_list));return $new_list;}}

接下来我们回到index.php文件中,在wechatCallbackapiTest类中加入文本和图片消息的微信回复格式处理:

/*** 回复文本消息模板** @param $obj* @param $content* @return string*/
private function textTemplate($obj, $content)
{$time = time();return "<xml><ToUserName><![CDATA[$obj->FromUserName]]></ToUserName><FromUserName><![CDATA[$obj->ToUserName]]></FromUserName><CreateTime>$time</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[$content]]></Content></xml>";
}/*** 回复图文消息模板** @param $obj* @param $news* @return string*/
private function newsTemplate($obj, $news)
{$time = time();$num = count($news);$textTpl = "<xml><ToUserName><![CDATA[$obj->FromUserName]]></ToUserName><FromUserName><![CDATA[$obj->ToUserName]]></FromUserName><CreateTime>$time</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>$num</ArticleCount><Articles>";foreach ($news as $new) {$textTpl .= $this->transmitNewItem($new["title"], $new["description"], $new["picurl"], $new["url"]);}$textTpl .= "</Articles></xml>";return $textTpl;
}private function transmitNewItem($title, $description, $picurl, $url)
{return "<item><Title><![CDATA[$title]]></Title><Description><![CDATA[$description]]></Description><PicUrl><![CDATA[$picurl]]></PicUrl><Url><![CDATA[$url]]></Url></item>";
}

写好后,加入一个处理文本消息的函数(即我们在微信公众号里发送聊天的文本内容,根据发送过来的内容做一些处理):

/*** 接受文本消息并处理** @param $obj* @return string*/
private function receiveText($obj)
{$content = $obj->Content;// 图灵机器人消息处理$robot = new TuringRobot();$info = $robot->getInfo($content, $obj->FromUserName);switch ($info["code"]) {case 100000:   // 文本类return $this->textTemplate($obj, $robot->textInfo($info));case 200000:   // 链接类return $this->textTemplate($obj, $robot->linkInfo($info));case 302000:   // 新闻类return $this->textTemplate($obj, $robot->newsInfo($info));case 308000:   // 菜谱类return $this->newsTemplate($obj, $robot->cookbookInfo($info));case 313000:   // 儿歌类(儿童版)case 314000:   // 诗歌类(儿童版)default:return "亲,你能说的再简单点吗?我有点理解不过来啦!";}
}

在responseMsg函数中调用(这里我删除了一些暂时不使用的代码,大家按照我写的来即可),这里我也只处理了文本消息,如果你对公众号发送图片或者语音什么的,我这边默认是统一回复“亲,你说的是啥,我只能理解文字啊!”:

public function responseMsg()
{//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//extract post dataif (!empty($postStr)) {/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,the best way is to check the validity of xml by yourself */libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$result = '';switch ($postObj->MsgType) {case 'event':// 关注后自动回复if ($postObj->Event == 'subscribe') {$result = $this->textTemplate($postObj, 'hi,你怎么才关注我,我都等你一万年了!');}break;case 'text':   // 文本消息$result = $this->receiveText($postObj);break;case 'image':   // 图片消息case 'voice':   // 语言消息case 'video':   // 视频消息case 'shortvideo':   // 小视频消息case 'link':   // 链接消息default:$result = $this->textTemplate($postObj, '亲,你说的是啥,我只能理解文字啊!');break;}echo $result;} else {echo '';exit;}
}

最后,把index.php头部位置的代码改下:

$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();

改为:

$wechat = new wechatCallbackapiTest();
if (isset($_GET["echostr"])) {$wechat->valid();
} else {$wechat->responseMsg();
}

还有别忘了引入TuringRobot.php哦!

include 'TuringRobot.php';

将所有的代码提交至新浪云上,回到微信公众平台点击“启用”:

下面我们来测试一下:

最后的最后呢,我放上我的公众号二维码,大家可以测试看看!(最后我建议如果公众号已经在运营阶段,最好是开发的时候本地测试,可以去看我的这篇博客:http://my.oschina.net/wanggong/blog/648671)

转载于:https://my.oschina.net/wanggong/blog/655891

微信公众号实现智能聊天-接入第三方智能机器人平台相关推荐

  1. 微信公众号天气与聊天机器人小功能

    微信公众号小功能 以下都是借鉴的微信公众平台的文档加老师指点和自行的理解. (1)微信公众号发送地区回复现在和未来五天天气情况 (2)发送语音和智能机器人聊天 一.调用天气预报接口 实现微信公众号发送 ...

  2. 微信公众号之智能绑定实现初始版本

    微信公众号智能绑定实现步骤: 微信公众号智能绑定功能所有的步骤都是以模拟实现的. 1.模拟打开微信公众帐号登录页面:     URL地址:https://mp.weixin.qq.com/ 2.读取自 ...

  3. 如何在微信公众号中添加聊天机器人——我的阿尔法狗1.0领养与使用指南

    最近开了一个公众号弄着玩,之前也在一些群里看到过一些聊天机器人,所以就想将聊天机器人接入微信公众号试试. 现在网上已经有比较成熟的一些产品,有的免费,有的收费,都可以直接接入微信公众号,实现一些基本的 ...

  4. 微信公众号开发之服务器接入指南之Java版本

    微信公众号开发的官方文档: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 其中我们开发好的服务器,在配置到 ...

  5. nodejs微信公众号开发第一步(接入指南)--wechat模块

    用模块接入微信就非常简单了.只用配置好参数,逻辑大神都写好了,站在巨人的肩膀上的感觉就是不错 本文测试用的是微信测试号. -- express生成项目框架 express命令行创建项目 :点击这里, ...

  6. JAVA微信公众号后台开发 接口接入

    前期准备 注册一个公众号,完成认证,阅读开发手册,选取开发工具,配置环境等等. 微信公众号开发标准 通过阅读文档我们了解到微信服务器向开发者提供接口,具体的流程如下 由上图可以看出,开发者需要做的:接 ...

  7. 将微信公众号变为自动聊天机器人(一)引言

    引言 最近申请了一个微信公众号,一方面更方便分享技术文章,另一方面也是为了接触一下微信开发相关知识,进一步拓展自己的知识面. 由于本人之前也并没有微信开发相关知识,本着共同学习原则,有哪里讲的不对希望 ...

  8. 微信公众号开发之实现自定义微信公众号菜单和跳转第三方网页

    自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCE ...

  9. 微信公众号广告平台服务器,微信公众号的与众不同,从第三方平台开始

    "人外有人,天外有天".随着公众平台日益渐火,微信公众号的建设单纯只靠健全他的自定义菜单,完善消息回复体系,稳定高质量更文频率,就能给自己的平台带来源源不断的粉丝了吗 为什么需要创 ...

最新文章

  1. Windows 服务器开机自启动
  2. oracle完全删除实例
  3. Plan with Global Optimization
  4. 必看2021年80后夫妻同时过信息系统项目管理师
  5. asp.net Linux 界面,在 ASP.NET 中实现不同角色的用户使用不同登录界面的方法
  6. mac下Python2运行SparkSQL
  7. 螺旋进刀非法平面选择_进刀方法、刀片类型、术语...螺纹加工重点知识你都知道吗?...
  8. html语言中base,HTML base 标签
  9. 数据集图片批量重命名
  10. 西门子S7-200的PLC,CPU224XP的模拟量接线怎样接
  11. windows XP系统自动关机
  12. 弹幕游戏:Ryan 最近迷上了弹幕游戏。所谓弹幕游戏,指的是玩家操控一位角色对来袭的大量敌人进行攻击,并在过程中升级、强化自我的能力,最终打败 Boss 的一类游戏...
  13. 黑群晖折腾记(二)-为不支持通信的UPS 增加断电自动关 NAS
  14. c语言判断字符是否对称,2020-07-23(C语言)数据结构-试设计算法判断该链表的全部n个字符是否中心对称。...
  15. IllegalArgumentException 介绍
  16. 不错的大数据课程体系(感谢某机构,希望不属于侵权)
  17. sql server 按拼音分类排序的功能
  18. 计算机一级试题库原题吗,全国计算机一级考试试题库(20210207022735)
  19. InfoSphere Guardium在医疗保健行业中对System Z的好处
  20. 第十届蓝桥杯大赛软件类省赛 JAVA 大学 A 组

热门文章

  1. Python 中错误 ConnectionError: Max retries exceeded with url
  2. Android 传感器 II-运动传感器
  3. CKA真题:题目和解析-1
  4. appwidget百度桌面搜索
  5. SEERC 2008 Problem A Stock Exchange
  6. 将app变为桌面程序,开机后不再显示原桌面,而是显示我们的app界面
  7. 微信拼手气红包C语言,微信拼手气红包背后的算法逻辑
  8. 机器算法有哪几种 python_机器学习10种经典算法的Python实现
  9. 索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!
  10. 去掉button按钮原有样式