0 消息的使用
Chao ZHOU edited this page 2015-12-28 14:40:37 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

我把微信的 API 里的所有“消息”都按类型抽象出来了,也就是说,你不用区分它是回复消息还是主动推送消息,免去了你去手动拼装微信那帮 SB 那么恶心的 XML 以及乱七八糟命名不统一的 JSON 了,我替你承受这份苦,不要问是谁,我是雷锋他弟弟,雷管。

请求消息的属性

当你接收到用户发来的消息时,可能会提取消息中的相关属性,那么请参考:

请求消息基本属性:

ToUserName    接收方帐号(该公众号 ID
FromUserName  发送方帐号(代表用户的唯一标识)
CreateTime    消息创建时间(时间戳)
MsgId         消息 ID64位整型

文本消息请求:

MsgType  text
Content  文本消息内容

图片消息请求:

MsgType  image
PicUrl   图片链接

地理位置消息请求:

MsgType     location
Location_X  地理位置纬度
Location_Y  地理位置经度
Scale       地图缩放大小
Label       地理位置信息

链接消息请求:

MsgType      link
Title        消息标题
Description  消息描述
Url          消息链接

回复消息的类型及属性(创建回复时用到)

消息类型 类型名称 属性 除属性自身外提供的方法
文本 text content 内容
图片 image media_id 媒体资源id media($mediaId)
声音 voice media_id 媒体资源id media($mediaId)
音乐 music title 标题
description 描述
url 音乐URL
hq_url 高清URL
thumb_media_id 封面资源id
thumb($mediaId)
视频 video title 标题
description 描述
media_id 媒体资源id
thumb_media_id 封面资源id
media($mediaId)
thumb($mediaId)
位置 location lat 地理位置纬度
lon 地理位置经度
scale 地图缩放大小
label 地理位置信息
链接 link title 标题
description 描述
url 链接URL
图文* news(news_item) 'title' 标题
'description' 描述
'pic_url' 图片链接
'url' 链接URL

注意:图文消息结构与其它不一样,具体请参考下面的示例部分。

注意:当前微信被动回复消息仅支持文本、图片、语音、视频、音乐、图文消息。位置和链接类型的回复消息尚未被支持,此处仅做备用。

创建消息

请注意:消息工厂类的命名空间为 Overtrue\Wechat\Message

<?php

use Overtrue\Wechat\Server;
use Overtrue\Wechat\Message;

$appId          = 'wx3cf0f39249eb0e60';
$token          = 'hellotest';
$encodingAESKey = 'EJThPazwzO4k1cyXJnwQtL60zBdhWvFaHb4emv0dLVN';

$server = new Server($appId, $token, $encodingAESKey);

$server->on('event', 'subscribe', function($event){
  return Message::make('text')->content('您好!欢迎关注 overtrue');
});

这里有一点需要注意,当属性带下划线的时候,方法名是支持两种的:media_id() 或者 mediaId() 都一样。

上传素材文件

<?php
use Overtrue\Wechat\Media;
// $appId = xxxx;
// $appSecret = xxxx;
// ...
$media = new Media($appId, $appSecret);
$image = $media->image(__DIR__ . '/demo.jpg'); // 上传并返回媒体ID

$message = Message::make('image')->media($image['media_id']);

请注意:方法media($mediaId)会直接赋值到media_id属性。不会自动上传文件。1.x 版本是会自动上传的2.x 已经不再提供。

这里有两个方法用于设置素材ID

  • media($mediaId) 对应设置 media_id
  • thumb($mediaId) 对应设置 thumb_media_id

图文消息

图文消息比较不一样的是他是包含多个 item 的结构体,那么这里需要使用 Message::make('news_item') 来得到消息 item

$news = Message::make('news')->items(function(){
    return array(
            Message::make('news_item')->title('测试标题'),
            Message::make('news_item')->title('测试标题2')->description('好不好?'),
            Message::make('news_item')->title('测试标题3')->description('好不好说句话?')->url('http://baidu.com'),
            Message::make('news_item')->title('测试标题4')->url('http://baidu.com/abc.php')->picUrl('http://www.baidu.com/demo.jpg'),
           );
});

关于更多素材管理请参考:素材管理