昨天我们已经成功的接入了微信公众账号。今天咱们来做一个微信聊天机器人。这个就需要一点点PHP的知识了。如果你不懂PHP呢,没关系,跟着一步一步做也 可以做出来。
这是在昨天的基础上做的,如果你还不会接入微信公众账号的话,请看昨天的博客,ICC微信公众账号开发系列(1)接入微信公众平台

咱们这个机器人有什么功能呢?
1.娱乐
聊天 笑话 故事 成语接龙 吉凶 新闻 星座

2.查询
百科问答 图片天气 菜谱 快递 计算日期

3.出行
飞机 列车

这么牛逼的机器人,咱们能写出来吗?
下面来我们说说聊天机器人实现的原理。
咱们不是真的写一个机器人程序,而是调用别人写好的接口(不重复造轮子嘛,哈哈)。如果你真的对机器人感兴趣,可以自己去研究。废话不多说了。
继续说原理
1.接口是什么?
官方的说法是这么说的,接口:是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。通俗的讲就是一段url地址。
2.怎么调用接口?
这就是这个咱们这个微信机器人实现的关键了。这里用到了PHP的一个神奇的函数file_get_contents。(或者用curl也可以)什么简单咱们用什么,之后的博客我们会讲CURL的应用。CURL在微信开发应用很广泛。
怎么调用呢?
直接在file_get_contens()传入你的API就可以了。具体实现待会说。
好了,原理就是这么简单。

下面开始动手打造咱们的微信智能机器人。

一.申请接口
上面的原理讲到要调用接口,首先我们得有接口啊。所以第一步首先去申请一个接口。去哪里申请呢?现在网上有很多开放的接口,比如小黄鸡啊图灵啊。今天咱们用的是图灵的接口(学计算机的应该都知道图灵,那个牛逼哄哄的人物,但咱们今天说的不是他)。
①注册一个图灵机器人官网的账号
注册地址:图灵机器人官网
点击进入图灵机器人的官网,在右上角找到注册按钮,点击注册,

注册成功之后登陆咱们的邮箱点击验证链接跳转到咱们的个人中心,你会看如下页面:

API KEY:这是我们调用接口需要用到的key。
把它复制下来。
9d208e0c64d9a7b13295b770b932f927
不是复制下面的微信地址哦。注意。
AIP等级:一般用户可以每天调用5000次,如果你玩得不过瘾的话,可以按照下面的方式升级。升级很简单,你只要复制下面的链接,通过下面的链接自己再注册一个就好了。就是给他拉人头嘛。
好,到这里咱们的接口就拿到手了。就是这么简单。
②调用接口
咱们先在电脑上玩一玩这个接口。
这玩意怎么调用呢。咱们新建一个test.php文件。我假设你有PHP基础,没有也没关系。看看就行了。咱们这里主要是原理弄明白。
调用方式:AIP地址+key+info info就是微信发送的消息
具体的url形式是:$url=$apiURL."?key=".$apiKey."&info=".$reqInfo;
以get方式请求.

<?php
$apiKey = "9d208e0c64d9a7b13295b770b932f927"; //这是刚才咱们复制的key
$apiURL = "http://www.tuling123.com/openapi/api";//这个是咱们要之前说的接口,就是一段url地址嘛// 这句话的意思是设置请求的编码,图灵要求用urf-8编码
header("Content-type: text/html; charset=utf-8");
$reqInfo = "你好"; //这是我们模拟微信发的一条信息,跟机器人问个好
//现在咱们把这个请的接口拼接起来
$url=$apiURL."?key=".$apiKey."&info=".$reqInfo;$res =file_get_contents($url);//调用接口echo $res; 

咱们来运行一把,看看它给我们返回的是什么.

看到没,它给咱们返回了下面这一串。
这是一段JSON格式的代码json是一种键值对的数据格式。里面的code是返回的状态码,text是文本信息,这就是咱们想要的东西。
下面这张图是状态码对应的信息:

好,到这里咱们也学会了怎么调用接口了。
咱们把接口调用封装成一个函数,待会给微信调用。
这是咱们的index.php文件。

<?phpfunction tulingAPI($keyword) {$apiURL = "http://www.tuling123.com/openapi/api";//接口地址$apiKey = "9d208e0c64d9a7b13295b770b932f927"; //这是刚才咱们复制的key$api_url =  $apiURL. "?key=" .$apiKey  . "&info=" . $keyword;header("Content-type: text/html; charset=utf-8"); $result = file_get_contents ( $api_url );//调用图灵接口$result = json_decode ( $result, true );//这是PHP解析JSON数据格式的一个函数,得到的是数组return  $result ['text'];}

二.微信调用图灵接口
这一步咱们就把封装好的函数给微信调用
直接上代码

<?php
/*** 微信机器人*///define your token
include "robot.php"//引入咱们的图灵机器人函数
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {$wechatObj->valid();
}else{$wechatObj->responseMsg();
}class wechatCallbackapiTest
{public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($this->checkSignature()){header('content-type:text');echo $echoStr;exit;}}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);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";             if(!empty( $keyword )){$msgType = "text";$contentStr = tulingAPI($keyword);//调用图灵机器人$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;}else{echo "Input something...";}}else {echo "";exit;}}private function checkSignature(){// you must define TOKEN by yourselfif (!defined("TOKEN")) {throw new Exception('TOKEN is not defined!');}$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);// use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}
}?>

好,把这两个文件上传到SAE。到这里咱们微信聊天的机器人就打造好了。打开微信咱们的微信玩一把。

如果你觉得你的机器人不够聪明的话,你可以在这里调教它。

今天就写到这里了。有什么问题留言或者QQ:309062037|备注iccmo,交流QQ群:429207338
完整代码下载包:点击下载

ICCMO微信公众账号开发系列(2)打造微信聊天机器人相关推荐

  1. 微信公众号开发系列-玩转微信开发-目录汇总

    引言 最遗憾的不是把理想丢在路上,而是理想从未上路. 每一个将想法变成现实的人,都值得称赞和学习.致正在奔跑的您! 在现在这个无处不在的互联网背景下,各种应用已不再仅仅局限于网页或桌面应用了,IOS. ...

  2. 微信公众号开发系列-12、微信前端开发利器:WeUI

    1.前言 通过前面系列文章的学习与讲解,相信大家已经对微信的开发有了一个全新的认识.后端基本能够基于盛派的第三方sdk搞定大部分事宜,剩下的就是前端了.关于手机端的浏览器的兼容性问题相信一直是开发者们 ...

  3. 微信公众号开发系列-13、基于RDIFramework.NET框架整合微信开发应用效果展示

    微信公众号开发系列-13.基于RDIFramework.NET框架整合微信开发应用效果展示 1.前言 通过前面一系列文章的学习,我们对微信公众号开发已经有了一个比较深入和全面的了解. 微信公众号开发为 ...

  4. C#微信公众号开发系列教程三(消息体签名及加解密)

    http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...

  5. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    C#微信公众号开发系列教程五(接收事件推送与消息排重) 原文:C#微信公众号开发系列教程五(接收事件推送与消息排重) 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续 ...

  6. 微信公众号开发系列教程一(调试环境部署)

    http://www.cnblogs.com/zskbll/p/4074855.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

  7. C#微信公众号开发系列教程二(新手接入指南)

    此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教 ...

  8. .NET微信公众号开发系列 - 项目介绍

    由于业务需要,需要开发微信公众号.不过没有查询到比较有用的信息,只能自己摸索前进. 写这个微信公众号开发系列,希望能提供一些帮助. 需要的功能有创建订单.查看订单.还有基本的用户管理. 由于团队人员有 ...

  9. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

最新文章

  1. AFN 切换BaseUrl
  2. Struts2新特性
  3. poj 3678 Katu Puzzle(2-sat)
  4. c语言switch为什么要加break,c语言学习笔记 switch case语句为什么要加break
  5. 我就是不敢的openeim002
  6. (王道408考研操作系统)第二章进程管理-第三节4:信号量机制(整型、记录型信号量和P、V操作)
  7. Leetcode 410.分割数组的最大值(最优解是二分法)
  8. OpenResity + nginx + mysq配置
  9. 用python实现自动化办公------爬取小说天堂所有小说
  10. linux ps -ang,PS顶级一键人像修图插件-DeliciousRetouchPlus
  11. c#中PROCESS的用法
  12. 尾气冒黑烟是什么问题_尾气冒黑烟是坏了?教你通过尾气辨别爱车是否故障!...
  13. STM32多通道DMA—ADC采样
  14. Ogre引擎渲染系列之Normal Specular Mapping
  15. 【第16章】 网络安全风险评估技术原理与应用 (软考:信息安全工程师)-- 学习笔记
  16. Spooling技术简单熟悉
  17. Linux常用命令以及vim的使用
  18. 照片转化成二维图片怎么做?图片内容如何生成二维码?
  19. TP-link WR703N v1.17固件不拆机绕过RSA验证强刷openwrt
  20. 【Nginx】Nginx配置实例-反向代理

热门文章

  1. 编写10个线程,第一个线程从1加到10,第二个线程从11加到20…第十个线程从91加到100, 最后再把10个线程结果相加。
  2. html+css完成腾讯页面
  3. cf 665E - Beautiful Subarrays
  4. OpenStack的使用场合,架构,核心服务及工作流程
  5. 使用React,Redux,redux-sage构建图片库(翻译)
  6. python显示文字框_python-Tkinter画布文本添加边框(轮廓)
  7. SDL Trados Studio 的秘密 - 命令行参数
  8. 数据库建表语句改成数据字典到word
  9. [已解决]微信小程序 canvas 文字样式错乱问题
  10. SpringBoot项目main方法详解