这两天学习了一下微信公共平台和易信公共平台的开发 (易信与微信协议是基本一样的)(PS:没听说过易信?你out了?)
公共平台开发原理这里就不讲了,如果是初次接触的同学,建议先看 David_Tang 的系列文章 微信公众平台开发 (写的不错!)
我看了腾讯的例程和网上几个例程,觉得这些例程都有一个问题: 代码复杂,不能重用,不容易维护。这主要是因为这些例程都是将微信平台协议与处理过程耦合在一起。
于是产生一个想法,写一个通用的类, 将微信平台通信协议全部封装起来,可重用。
以后写一个公众号,写几句完成处理过程,就搞定了!
结果如下:
开发语言: PHP 5.X
源码下载地址: http://download.csdn.net/detail/c80486/6357467
类名:WeChat
WeChat类定义在文件jostudio.wechat.php中, 此处只讲其使用。(感兴趣的同学,可以看源代码注释)
用这个类实现的一个公众号,例程文件 wx.php
//包含类文件
include_once 'jostudio.wechat.php';
//创建一个WeChat类的实例,TOKEN为 "XXXXXX", 回调函数名称为"onMessage",回调函数是用于处理消息的函数
$object = new WeChat("XXXXXX", "onMessage");
$object->process(); //处理消息
//处理消息的回调函数
function onMessage(WeChat $object, $messageType, $content, $arg1, $arg2) {
//根据不同的消息类型,分别处理
switch ($messageType) {
case "subscribe": //当用户关注
$object->sendText("欢迎您! 请输入任意文字,输入news则返回图文信息 "); //发送欢迎文字
break;
case "unsubscribe": //当用户取消关注
break;
case "text": //当收到一个文本消息
if (trim($content)=="news") { //如果收到的文字是 "news",则返回图文信息
$baseUrl = 'http://www.jostudio.org/wx/news/';
$url = $baseUrl.'news.php?id=1';
$pictureUrl = $baseUrl.'img1.jpg';
$object->addNews('标题1','描述1', $url, $pictureUrl); //添加一条图文信息
$url = $baseUrl.'news.php?id=2';
$pictureUrl = $baseUrl.'img2.jpg';
$object->addNews('标题1','描述1', $url, $pictureUrl); //再添加一条图文信息
$object->sendNews(); //发送图文信息
} else
$object->sendText("您输入的是:".$content); //发送文字
break;
case "image": //当收到一个图片
$object->sendText("您发了一张图:".$content);
break;
case "location": //当收到一个地理位置信息
$object->sendText($content."\r\n纬度:".$arg1."\r\n经度".$arg2);
break;
case "click": //当用户点击菜单
$object->sendText("菜单Key:".$content);
break;
default:
break;
}
}
?>
主程序只有二行.
第一行,创建一个WeChat类的实例,创建时需要两个参数:第一个是TOKEN值(开通公众号时,你输入的TOKEN值);第二个是回调函数名称,当有消息到来时,这个回调函数会被调用。
第二行,执行process()方法处理消息: $object->process();
最后,需要定义一个回调函数,形如:
function onMessage(WeChat $object, $messageType, $content, $arg1, $arg2)
当有消息到来时,这个回调函数会被调用,接收和处理消息的过程就写在这个函数中。
回调函数必须有五个参数,均在调用时由WeChat类传入参数值。
第一个参数是WeChat的实例$object
第二个参数messageType, 是消息类型(文本型), 不同的消息类型取值如下:
subscribe 当有用户关注时
unsubscribe 当用户取消关注时
text 用户发来文本
click 用户点击了菜单 (指公众号的自定义菜单)
image 用户发来图片
location 用户发来地理位置
后三个参数$content, $arg1, $arg2, 是消息的内容。 不同的消息类型,有不同的内容。
subscribe,unsubscribe消息: $content 为用户的OpenID(不同于微信号)
text消息: $content 为文本内容
click消息: $content 为菜单项的key值
image消息: $content 为图片的URL
location消息: $content 为地理位置名称,$arg1为地理位置纬度, $arg2为地理位置经度
上述例程onMessage()函数,演示了接收和处理各种消息类型
根据目前微信平台的定义,公众号只能向用户发送两类信息:
一类是文字(使用WeChat类的 sendText()方法)
例如:当有用户关注时(subscribe事件), 向用户发送欢迎文字
$object->sendText("欢迎您! 请输入任意文字,输入news则返回图文信息 ");
另一类是图文信息(使用WeChat类的 sendNews()方法)
图文信息可以是一条或多条新闻形式的信息。
上述例程中,当用户发送文字 "news“”时,向用户回发图文信息
使用sendNews()方法前,需先使用addNews()方法逐条添加信息
$object->addNews($title, $description, $url, $pictureUrl);
$title 是标题,$description是内容, $url是链接地址, $pictureUrl是图片的URL
上述例程把各类型的信息交互过程均演示了一次:用户发来文字则回复文字,发来“news”则回复图文信息, 发来图片则显示图片URL, 发来位置信息则显示经度纬度。
由于使用了WeChat类,封装了平台通信,开发者可以更专注内容互动,代码更清晰、好维护,甚至不需要了解平台,就可以开发公众号了.
WeChat类和例程, 不仅支持微信公众平台,也支持易信公众平台.
OK, 介绍到这里了,看看效果。
我用这个例程分别建立了一个微信公众号和一个易信公众号,名称均为“智能科技”, 分别扫描以下二维码可以加一下。
微信公众号:智能科技
易信公众号:智能科技
界面效果1:欢迎信息、图文信息
界面效果2:发送图片信息、位置信息及其响应
小结: 使用WeChat类, 让公共平台开发变得更简单、易行
最后说一下易信与微信的一些区别:
经测试,易信公共平台比微信更开放一些。易信允许开发者接收音频、音乐、视频信息,下发音乐信息。
微信区分订阅号和服务号,订阅号不能自定义菜单。目前易信不区分订阅号和服务号,均能自定义菜单。(有关菜单的操作下篇文章说明)