Table of Contents
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 消息 ID(64位整型)
文本消息请求:
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'),
);
});
关于更多素材管理请参考:素材管理
中文版 English
目录
English 中文版
Table of Contents
Laravel 5 版: overtrue/laravel-wechat
可能由于微信的接口调整导致某些接口不能正常使用,请及时给我反馈,谢谢!https://github.com/overtrue/wechat/issues