微信 与 微赞 间通信.
AppId
第三方用户唯一凭证. 对应 $_W[‘account’][‘key’].
微信系统的每一个公众号均可被视为一个应用(软件), 应用的标识就是 AppId.
每一个 AppId 都配有一个通信密钥 AppSecret. 对应 $_W[‘account’][‘secret’].
注: AppID 和 AppSecret 可在微信公众平台官网-开发者中心页中获得.
Token
微信平台与微赞系统通信时的密钥,用于身份验证。 对应 $_W[‘account’][‘token’].
ACCESS_TOKEN
access_token 是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。 获取 access_token
注: 公众号可以使用 AppID 和 AppSecret 调用接口来获取 access_token。
注: 调用所有微信接口时均需使用 https 协议。
微赞系统常用变量
$_W
微赞系统程序运行中的全局变量, 里面存放公众号及粉丝用户的基本信息. 参见 $_W
$_GPC
$_GET, $_POST, $_COOKIE 的集合体.
uniacid
微赞系统中 统一公众号 (主公号) 的标识(主键), 对应 $_W[‘uniacid’] .
acid
微赞系统中, 子公号 (微信公众号) 的标识(主键), 对应 $_W[‘acid’].
uid
微赞系统中, 后台(web)管理员或操作员 ID, 对应 $_W[‘uid’].
openid
微赞系统中, 微站(app)中某子公众号对应的粉丝标识, 对应 $_W[‘openid’].
if (!empty($_W[‘fans’][‘follow’])){
echo ‘已关注’;
} else {
echo ‘未关注’;
} fans
微赞系统中, 微站(app)中某子公众号对应的粉丝, 对应 $_W[‘fans’].
member
微赞系统中, 微站(app)中主公众号对应的会员, 对应 $_W[‘member’].
微赞接收消息类型
微赞系统接收粉丝发往微信服务器的消息,对这些消息进行抽象、包装处理成统一的消息结构。
subscribes 接收消息类型 订阅消息时按此处所示类型判断.
普通消息
type event 说明
text 文本消息
image 图片消息
voice 语音消息
video 视频消息
shortvideo 小视频消息
location 地理位置消息
link 链接消息
事件推送消息
type event 说明
event subscribe 关注事件
event unsubscribe 取消关注事件
event qr
event trace 上报地理位置事件
event click 点击菜单(链接)
event view 点击菜单(模拟关键字)
handles 接收消息类型
处理消息时按此处所示类型判断.
普通消息
type
text 文本消息
image 图片消息
voice 音频消息
video 视频消息
location 地理位置消息
link 链接消息
事件推送消息
type
subscribe 关注事件
unsubscribe 取消关注事件
qr 扫描二维码事件
trace 上报地理位置事件
click 点击菜单(链接)
view 点击菜单(模拟关键字)
基本结构 $message = array(
// 此部分数据结构为**全局共有的结构**, 其他消息类型为此结构的扩展.
‘from’ ⇒ , string: 发送消息方, 代表一个粉丝用户(使用OpenID表示) ‘to’ ⇒ , string: 消息接收方, 对应当前的公众号
‘time’ ⇒ , int : 消息发送时间, 使用Unix时间戳表示 ‘type’ ⇒ , string: 消息类型, 用于区分不同类型的消息, 请参阅下文
‘event’ ⇒ string: 事件类型, ‘msgid’ ⇒ long : 消息编号
// 扩展结构
…
);
普通消息 文本消息
$text_message = array(
‘from’ ⇒ ‘fromUser’,
‘to’ ⇒ ‘toUser’,
‘time’ ⇒ ‘123456789’,
‘type’ ⇒ ‘text’, string: 消息类型 ‘event’ ⇒ , ‘redirection’ ⇒ false, bool: 是否是重定向
‘source’ ⇒ null string: 消息来源, 消息二次分析(目前来源:qr,click, 将扫码等事件转换为 text 事件.) ); 图片消息 $image_message = array( ‘from’ ⇒ ‘fromUser’, ‘to’ ⇒ ‘toUser’, ‘time’ ⇒ ‘123456789’, ‘type’ ⇒ ‘image’, string: 消息类型
‘event’ ⇒ ,
‘url’ ⇒ $url, string: 图片URL ); 语音消息 $voice_message = array( ‘from’ ⇒ ‘fromUser’, ‘to’ ⇒ ‘toUser’, ‘time’ ⇒ ‘123456789’, ‘type’ ⇒ ‘voice’, string: 消息类型
‘event’ ⇒ ,
‘media’ ⇒ , string: 语音消息媒体 ‘format’ ⇒ , string: 语音格式,如 amr,speex 等
);
视频消息
$video_message = array(
‘from’ ⇒ ‘fromUser’,
‘to’ ⇒ ‘toUser’,
‘time’ ⇒ ‘123456789’,
‘type’ ⇒ ‘video’, string: 消息类型 ‘event’ ⇒ , ‘media’ ⇒ , string: 视频消息媒体
‘thumb’ ⇒ , string: 视频消息缩略图的媒体 ); 小视频消息(待定) $video_message = array( ‘from’ ⇒ ‘fromUser’, ‘to’ ⇒ ‘toUser’, ‘time’ ⇒ ‘123456789’, ‘type’ ⇒ ‘shortvideo’, string: 消息类型
‘event’ ⇒ ,
‘media’ ⇒ , string: 小视频消息媒体 ‘thumbmediaId’ ⇒ , string: 小视频消息缩略图的媒体
);
地理位置消息
$location_message = array(
‘from’ ⇒ ‘fromUser’,
‘to’ ⇒ ‘toUser’,
‘time’ ⇒ ‘123456789’,
‘type’ ⇒ ‘location’, string: 消息类型 ‘event’ ⇒ , ‘location_x’ ⇒ , float: 地理位置纬度
‘location_y’ ⇒ , float: 地理位置经度 ‘scale’ ⇒ , float: 地图缩放大小
‘label’ ⇒ , string: 地理位置信息 ); 链接消息 $link_message = array( ‘from’ ⇒ ‘fromUser’, ‘to’ ⇒ ‘toUser’, ‘time’ ⇒ ‘123456789’, ‘type’ ⇒ ‘link’, string: 消息类型
‘event’ ⇒ ,
‘title’ ⇒ , string: 消息标题 ‘description’ ⇒ , string: 消息描述
‘url’ ⇒ , string: 消息链接 ); 事件推送消息 关注消息 $trace = array( ‘from’ ⇒ ‘fromUser’, ‘to’ ⇒ ‘toUser’, ‘time’ ⇒ ‘123456789’, ‘type’ ⇒ ‘event’, ‘event’ ⇒ ‘subscribe’, ); 取消关注消息 $unsubscribe_message = array( ‘from’ ⇒ ‘fromUser’, ‘to’ ⇒ ‘toUser’, ‘time’ ⇒ ‘123456789’, ‘type’ ⇒ ‘event’, ‘event’ ⇒ ‘unsubscribe’, string: 消息类型
);
扫描二维码
1. 用户未关注时,进行关注后的事件推送
$trace = array(
‘from’ ⇒ ‘fromUser’,
‘to’ ⇒ ‘toUser’,
‘time’ ⇒ ‘123456789’,
‘type’ ⇒ ‘event’,
‘event’ ⇒ ‘subscribe’,
‘scene’ ⇒ ‘123’, int : 事件KEY值,二维码的参数值,已去除’qrscene_’前缀 ‘ticket’ ⇒ …, string: 二维码的ticket,可用来换取二维码图片
);
2. 用户已关注时的事件推送
$qr_message = array(
‘from’ ⇒ ‘fromUser’,
‘to’ ⇒ ‘toUser’,
‘time’ ⇒ ‘123456789’,
‘type’ ⇒ ‘qr’,
‘event’ ⇒ ‘SCAN’,
‘scene’ ⇒ ‘123’, int: 事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id ‘ticket’ ⇒ …, string: 二维码的ticket,可用来换取二维码图片
);
上报地理位置事件
$trace_message = array(
‘from’ ⇒ ‘fromUser’,
‘to’ ⇒ ‘toUser’,
‘time’ ⇒ ‘123456789’,
‘type’ ⇒ ‘trace’, string: 消息类型 ‘event’ ⇒ ‘LOCATION’, ‘location_x’ ⇒ , string: 地理位置纬度
‘location_y’ ⇒ , string: 地理位置经度 ‘precision’ ⇒ , string: 地理位置精度
‘latitude’ ⇒ ? ⇔ location_x 原始值 ‘longitude’ ⇒ ? ⇔ location_y 原始值
);
点击菜单事件
☞ 1. click
点击推事件
$click_message = array(
‘from’ ⇒ ‘fromUser’,
‘to’ ⇒ ‘toUser’,
‘time’ ⇒ ‘123456789’,
‘type’ ⇒ ‘event’,
‘event’ ⇒ ‘click’,
‘eventkey’ ⇒ ‘EVENTKEY’ string: 模拟的关键字 ); ☞ 2. view 跳转 URL $view_message = array( ‘from’ ⇒ ‘fromUser’, ‘to’ ⇒ ‘toUser’, ‘time’ ⇒ ‘123456789’, ‘type’ ⇒ ‘event’, ‘event’ ⇒ ‘view’, ‘eventkey’ ⇒ ‘www.qq.com’ string: 设置的跳转URL
);
☞ 3. scancode_push
扫码推事件
$view_message = array(
‘from’ ⇒ ‘fromUser’,
‘to’ ⇒ ‘toUser’,
‘time’ ⇒ ‘123456789’,
‘type’ ⇒ ‘event’,
‘event’ ⇒ ‘scancode_push | scancode_waitmsg’,
‘scancodeinfo’ ⇒ array(
‘scanresult’ ⇒ ?,
‘scantype’ ⇒ ?,
‘eventkey’ ⇒ ?,
)
);
☞ 4. scancode_waitmsg
扫码推事件且弹出“消息接收中”提示框
参阅 ☞ 3. scancode_push
☞ 5. pic_sysphoto
弹出系统拍照发图
$view_message = array(
‘from’ ⇒ ‘fromUser’,
‘to’ ⇒ ‘toUser’,
‘time’ ⇒ ‘123456789’,
‘type’ ⇒ ‘event’,
‘event’ ⇒ ‘pic_photo_or_album | pic_weixin | pic_sysphoto’,
‘sendpicsinfo’ ⇒ array(
‘count’ ⇒ ?,
‘piclist’ ⇒ array(
…,
…
)
)
);
☞ 6. pic_photo_or_album
弹出拍照或者相册发图
参阅 ☞ 5. pic_sysphoto
☞ 7. pic_weixin
弹出微信相册发图器 参阅 ☞ 5. pic_sysphoto
☞ 8. location_select 弹出地理位置选择器 $view_message = array(
‘from’ ⇒ ‘fromUser’,
‘to’ ⇒ ‘toUser’,
‘time’ ⇒ ‘123456789’,
‘type’ ⇒ ‘event’,
‘event’ ⇒ ‘location_select’,
‘sendlocationinfo’ ⇒ array(
‘location_x’ ⇒ ?,
‘location_y’ ⇒ ?,
‘scale’ ⇒ ?,
‘label’ ⇒ ?,
‘poiname’ ⇒ ?,
‘eventkey’ ⇒ ?
)
);
统一发送消息结构 微信结构, 请参阅 微信发送消息介绍
发送消息统一经由 processor.php 中的 respond() 分析处理, 调用 return $this→respXxx($returnMessage); 来包装并返回消息.
文本消息 参见 $this→respText($content)
12345678
图片消息 参见 $this→respImage($mid)
12345678
语音消息 参见 $this→respVoice($mid)
12345678
视频消息 参见 $this→respVideo($video)
12345678
音乐消息 参见 $this→respMusic($music)
12345678
图文消息 参见 $this→respNews($news)
12345678
2
规则与关键字 微赞系统会在微信用户的 对话内容 符合 一定的条件 时对用户进行回答反馈。
为描述以上过程,微赞系统定义了两个术语:关键字 和 规则。
关键字 用户对话内容的部分、全部或抽象。
规则 关键字的集合以及对指定内容的处理方式。
规则定义中包括处理此消息所使用的模块和此模块处理消息时所需要的其他附加数据
规则分类
完全匹配 用户对话与关键字完全相同 包含匹配 用户对话含有关键字 高级匹配(正则匹配) 用户兑换符合一定的规则(高级模式) 直接接管 没有其他规则匹配,将使用直接托管 默认回复、欢迎回复 用户对话不符合任何已定义规则 消息路由 消息路由是指粉丝用户经公众平台发送消息内容至微赞时, 微赞系统查找对应的规则记录, 并将消息分配至合适的模块处理的过程. 微赞系统按照不同的消息类型, 进行不同的处理.