本文仅供技术交流,如果侵犯到了任何组织或个人的权益,请在本文留言,主页君会妥善处理。

前段时间人人网上的小黄鸡着实火了一把,而最近微信收费风波又炒得沸沸扬扬。主页君凑热闹写一篇教程:如何在微信公众平台上面搭建一个“小黄鸡”(自动应答机器人),顺便曝光一下 @江大信使 的原理(不知介意否?)。

在您阅读以下内容之前,需要对PHP语言有基本的了解,还需要有自己的服务器资源。微信官方的开发文档中的例子使用的就是PHP,当然知道原理后使用其他语言实现也是可以的。至于服务器,可以使用新浪、GAE等云平台,相对虚拟主机会便宜,当然记得备案域名,否则后果自负~

首先需要注册开通微信公众平台(废话),此处省略。

微信的公众平台的接口调用原理简而言之就是WebService,形式上有点类似SOAP协议。当用户给公众平台发送一条消息(文本、GPS定位、语音等),微信的服务器将会打开公众平台设定的一个地址,将用户ID、消息内容等信息封装为XML格式,使用HTTP协议发送到公众平台指定的程序中。程序经过自己的处理之后返回内容(可以是文本、音乐、图片、链接等),微信再将内容回馈给用户。

微信在其中的角色有点像电话线,用户和公众平台之间并没有直接的信息交换。

我们先来实现一个简单的功能。下载微信官方提供的例子源代码,打开其中的wx_sample.php。

其中“TOKEN”是可以修改的,接下来我会告诉你他到底做什么用。

前面提到你必须要有服务器资源。将这个wx_sample.php上传到你的服务器,保证他可以用浏览器直接访问。比如:http://www.yourwebite.cn/your-weixin-application/wx_sample.php

下面是公众平台的设定。

登录微信管理后台,选择“高级功能”,可以看到如下选项:

为了进行编程,当然要选择“开发模式”了。

接下来需要设置基本信息。

URL就是刚才上传的地址,而TOKEN对应PHP文件第7行第二对双引号中的字符串。TOKEN相当于一个密码,是为了防止你的微信接口被第三方(除了你和微信官方)恶意调用。

如果你的PHP工作正常,可以直接保存“接口配置信息”。

这时候的微信平台还没有任何功能,粉丝发送任何文字内容都会收到同一条回复:“Welcome to wechat world!”(在源代码的第48行)。

下来是重头戏,小黄鸡的调用。

小黄鸡的大名叫Simsimi,在提供手机APP供用户娱乐的同时,官方还提供了API(应用程序编程接口),也就是,开发者可以使用接入功能获得小黄鸡的数据,实现类似的人机“对话”功能。

程序猿要想使用这个接入功能,必须到官方的开发站点进行注册。

http://developer.simsimi.com/

Simsimi的完整调用文档 http://developer.simsimi.com/api 先不管上面整版的英文,我们只要实现一个最简单的对话效果。Simsimi的调用其实只要一个访问一个地址:

http://sandbox.api.simsimi.com/request.p?key={APPKEY}&lc=ch&ft=1.0&text={文字}

Simsimi就会返回类似的内容

{"response":"{小黄鸡的答复}","id":23514663,"result":100,"msg":"OK."}

直接解析这段文本获取response的内容就知道小黄鸡的答复是什么了。

注意当中的{APPKEY},这是一个需要设置的字段。如果做过Google地图、新浪微博接入等应用的开发者应该知道,要使用这些网站的接口,必须申请一个AppKey。

在Simsimi使用邮箱注册成为开发者。登录之后可以申请一个7天试用版APPKEY。主页君发现这个APPKEY不但只有7天的有效期,而且还限制每天收发消息的最大数。

由于主页君已经申请过试用版key,不能再次申请,这里就不能截图了,抱歉。当然步骤也不麻烦,按照页面的提示填写应用的标题、分类和用途即可。获得的APPKEY是一串字母和数字的组合,将他代入上面地址中,直接在浏览器打开就可以看到效果了。

那么如何用PHP实现消息的自动回复呢?接下来就是对示例代码动刀的时刻了。

腾讯提供的示例代码中包含一个wechatCallbackapiTest类,提供了valid, responseMsg方法。如果是新手,请不要修改、删除原有函数。我们在这个类中添加一个新的方法:getSimsimi。

private function getSimsimi($key) {
$app_key = "这里写上刚才申请到的KEY";
$text = urlencode($key); //编码中文。请确保源代码文件使用UTF-8编码(腾讯的例子默认是这个),否则会出现乱码现象。
$response = file_get_contents("http://sandbox.api.simsimi.com/request.p?".
"key={$app_key}&lc=ch&ft=1.0&text=".$text); //这里需要打开远程地址,如果出错请检查您的服务器是否具有下载远程地址的权限,或者是否禁用了这项功能。
$message = json_decode($response); //Simsimi返回的内容是JSON编码的,这里将其转换成PHP对象以便访问其成员内容
if($message->result=='100' && $message->response != 'hi') {
return $message->response; //返回小黄鸡的答复
} else {
return "哎呀,你说的我听不懂哎 >,<"; //小黄鸡返回出错(比如试用的期限到期、达到当天限额、文字本身有错误等)
}
}

这个成员函数的调用方法就是$this->getSimsimi("给小黄鸡发送的内容");。欲实现自动答复,请找到源代码的第48行:$contentStr = "Welcome to wechat world!";

把这里改成:$contentStr = $this->getSimsimi($keyword); //$keyword就是用户发送过来的文本内容

把原来的wx_sample.php替换掉。如果没有程序或者配置上的错误,这个机器人应该马上就能使用了。在微信里面关注平台,试试跟小黄鸡聊天吧。

对了,前面主页君无节操地提到了要曝光一下 @江大信使 的原理。其实到这里已经说的差不多了,但是江大信使使用的并不是小黄鸡,而是 虫洞API ,国内一个类似Siri的云服务。

但是云服务显然不会包含我们需要额外添加的个性化回复内容(比如我们需要做江苏大学本地的一些查询,但是小黄鸡、虫洞甚至Siri肯定不会给我们满意的答复),那么我们可以在处理关键字的时候先做一个自己的规则名单,如果检测到预定关键字(比如“江大外卖”)就可以直接返回事先写好的内容。这在php里面很容易实现,有兴趣的读者可以尝试自行开发应用~

原文地址:http://page.renren.com/601154651/note/899878628

【教程】教你写一个简单的微信小黄鸡相关推荐

  1. DuiVision开发教程(2)-如何写一个简单的界面程序

    基于DuiVision界面库开发的界面程序主要包括如下几部分内容: 1.资源定义,包括图片资源.各个窗口界面的xml定义文件 2.事件处理类代码,用于处理界面响应消息 3.其他业务逻辑代码 下面举例说 ...

  2. 微信小黄鸡智能陪聊功能实现

    本文一共使用了两个机器人:小黄鸡,小逗比机器人,二者相互调用避免程序出现异常.已经本人调试,完全能用! 第一个(小黄鸡机器人): package com.web; import java.io.Buf ...

  3. C语言能干什么?手把手教你写一个简单的聊天软件

    一.服务端代码 因为端口号容易被占用的原因,所以IP地址和端口号采用参数传递的方法,即 int main(int argc,char **argv) 1.头文件 #include <stdio. ...

  4. Python爬虫不会?戳一下,小编一步步教你写一个简单的爬虫

    写在前面 网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序.众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容. 优先申明:我们使用的py ...

  5. python 某个数是不是在某个范围内_教写一个简单的python小程序(04)

    点击蓝字 关注我们 会酸的柚子 Python爱好者 搞机少年 七夕结束了~ 酸柚也是被强塞了满嘴的狗粮 在这样充满恋爱腐朽气息的一天 酸柚也是马不停蹄的在赶稿子 兄弟们,给我顶起来呀~ 我们来看看今日 ...

  6. 教你写一个简单的网页(html网页开发入门)

    网页的组成 HTML 网页的具体内容和结构 CSS 网页的样式(美化网页最重要的一块) JavaScript 网页的交互效果,比如对用户鼠标事件作出响应 HTML 什么是HTML HTML的全称是Hy ...

  7. samp服务器信息获取,手把手教你写一个简单的服务器

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //第八步,玩家杀人得分得金钱,死亡扣分扣金钱 public OnPlayerDeath(playerid, killerid, reason)//玩家被 ...

  8. 用C语言easyx库来写一个简单的翻翻乐小游戏(附源码素材)

    简明目录 写在前面 easyx库 准备工作 新建项目文件 分析 素材分析 上代码吧 地图表示 开始界面 地图初始化(打乱) 游戏过程实现 主函数的实现 测试 优化 1.游戏分数 2.游戏时间 3.nu ...

  9. 小程序服务器搭建前后端交互,手把手带你搭一个简单的微信小程序(包括前后端)...

    开发小程序除了大家能看到的客户端,前端小程序是如何与后端服务器进行数据交互的呢? 本文将通俗易懂的讲一下.这里以nodejs为例来进行讲解 1.首先要在服务器上安装nodejs服务器: ​ wget ...

最新文章

  1. xbmc-12.0稳定版代码初探 (2) —— XBMC_HOME
  2. 第三次学JAVA再学不好就吃翔(part58)--String和StringBuffer分别作为参数传递
  3. 将 Observable.pipe 的输入参数手动分解
  4. 「Luogu5395」【模板】第二类斯特林数·行
  5. Inceptor导出建表语句、存储过程
  6. php tp框架,tp框架是什么意思
  7. 运用Python实现猜数字游戏
  8. ⭐App爬虫系列⭐:获取王者荣耀全英雄的名称、类型、热度、胜率、登场率、Ban率
  9. 链家北京二手房交易数据分析
  10. 华为LTC流程再造(BPR)的来龙去脉,看一篇文就够了!管理变革专家许浩明老师
  11. 数据中心空调系统基础知识-制冷量与热量计算
  12. android学习笔记1
  13. 51nod 1535 深海探险【思维+并查集】
  14. Linux发行版之间有什么区别?
  15. 合并的表格怎么加横线_word怎么合并表格边框
  16. TensorFlow 使用 slim 模块搭建复杂网络
  17. 银行使用计算机和网络实现个人存款,观察值与算术平均数的差数称为离均差,其总和为( )。...
  18. SpringBoot2 hikari 关于 Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl处理
  19. UWB测距 方法,双向双边测距法(DS-TWR)(四)
  20. springboot 集成 ELK 示例

热门文章

  1. 面试中常被问到的(23)协议解析中http与https
  2. 史上最全的iOS各种设备信息获取总结(iPhone X 详细信息已更新)
  3. Dalvik虚拟机ART虚拟机
  4. P1609 最小回文数
  5. 比肩犀牛书的《JavaScript编程精》原书第3版(中文版)重磅来袭!文末福利
  6. java servlet项目源码下载_java网上商城项目源码(jsp.servlet+javabean+mysql+jdbc)
  7. 使用LaTeX制作PPT
  8. java 获取wifi强度_Android如何获得wifi信号强度和连接子类型
  9. 大厚度耐磨钢NM450和NM500钢板技术条件
  10. cdr圆形渐变填充怎么设置_cdrX7怎么手绘蝴蝶插画?cdr蝴蝶的画法