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

来源:互联网 发布:知乎可以离线阅读吗 编辑:程序博客网 时间:2024/06/05 15:13

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



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

在您阅读以下内容之前,需要对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

原创粉丝点击