素材管理
在微信里的圖片、音樂、視頻等等都需要先上傳到微信服務器作為素材才可以在消息中使用。
上傳圖片
注意:微信圖片上傳服務有敏感檢測系統,圖片內容如果含有敏感內容,如色情,商品推廣,虛假信息等,上傳可能失敗。
$result = $officialAccount->material->uploadImage("/path/to/your/image.jpg");
// 運行結果:
{
"media_id": MEDIA_ID,
"url": URL
}
url
只有上傳圖片素材有返回值。
上傳語音
語音 大小不超過 5M,長度不超過 60 秒,支持 mp3/wma/wav/amr
格式。
$result = $officialAccount->material->uploadVoice("/path/to/your/voice.mp3");
// 運行結果:
{
"media_id": MEDIA_ID,
}
上傳視頻
$result = $officialAccount->material->uploadVideo("/path/to/your/video.mp4", "視頻標題", "視頻描述");
// 運行結果:
{
"media_id": MEDIA_ID,
}
上傳縮略圖
用于視頻封面或者音樂封面。
$result = $officialAccount->material->uploadThumb("/path/to/your/thumb.jpg");
// 運行結果:
{
"media_id": MEDIA_ID,
}
上傳圖文消息
<?php
use EasySwoole\WeChat\Kernel\Messages\Article;
// 上傳單篇圖文
$article = new Article([
'title' => 'xxx',
'thumb_media_id' => $mediaId,
// ...
]);
$officialAccount->material->uploadArticle($article);
// 或者上傳多篇圖文
$officialAccount->material->uploadArticle([$article, $article2, ...]);
// 運行結果:
/*
{
"media_id": MEDIA_ID,
"url": URL
}
*/
修改圖文消息
有三個參數:
$mediaId
要更新的文章的mediaId
$article
文章內容,Article
實例或者全字段數組
$index
要更新的文章在圖文消息中的位置(多圖文消息時,此字段才有意義,單圖片忽略此參數),第一篇為0
;
<?php
use EasySwoole\WeChat\Kernel\Messages\Article;
$result = $officialAccount->material->updateArticle($mediaId, new Article(...));
// or
$result = $officialAccount->material->updateArticle($mediaId, [
'title' => 'EasySwoole WeChat 2.0 發布了!',
'thumb_media_id' => 'qQFxUQGO21Li4YrSn3MhnrqtRp9Zi3cbM9uBsepvDmE', // 封面圖片 mediaId
'author' => 'overtrue', // 作者
'show_cover' => 1, // 是否在文章內容顯示封面圖片
'digest' => '這里是文章摘要',
'content' => '這里是文章內容,你可以放很長的內容',
'source_url' => 'https://www.easyswoolewechat.com',
]);
// 指定更新多圖文中的第 2 篇
$result = $officialAccount->material->updateArticle($mediaId, new Article(...), 1); // 第 2 篇
上傳圖文消息圖片
返回值中 url
就是上傳圖片的 URL
,可用于后續群發中,放置到圖文消息中。
$result = $officialAccount->material->uploadArticleImage($path);
// 運行結果:
{
"url": "http://mmbiz.qpic.cn/mmbiz/gLO17UPS6FS2xsypf378iaNhWacZ1G1UplZYWEYfwvuU6Ont96b1roYsCNFwaRrSaKTPCUdBK9DgEHicsKwWCBRQ/0"
}
獲取永久素材
$resource = $officialAccount->material->get($mediaId);
如果請求的素材為圖文消息,則響應如下:
{
"news_item": [
{
"title": TITLE,
"thumb_media_id": THUMB_MEDIA_ID,
"show_cover_pic": SHOW_COVER_PIC(0/1),
"author": AUTHOR,
"digest": DIGEST,
"content": CONTENT,
"url": URL,
"content_source_url": CONTENT_SOURCE_URL
},
// 多圖文消息有多篇文章
]
}
如果返回的是視頻消息素材,則內容如下:
{
"title": TITLE,
"description": DESCRIPTION,
"down_url": DOWN_URL,
}
其他類型的素材消息,則響應為 \EasySwoole\WeChat\Kernel\Psr\StreamResponse
實例,開發者可以自行保存為文件。例如
<?php
$stream = $officialAccount->material->get($mediaId);
if ($stream instanceof StreamResponse) {
// 以內容 md5 為文件名
$stream->save('保存目錄');
// 自定義文件名,不需要帶后綴
$stream->saveAs('保存目錄', '文件名');
}
獲取永久素材列表
$type
素材的類型,圖片(image)、視頻(video)、語音 (voice)、圖文(news)$offset
從全部素材的該偏移位置開始返回,可選,默認0
,0
表示從第一個素材 返回$count
返回素材的數量,可選,默認20
, 取值在1
到20
之間
$officialAccount->material->list($type, $offset, $count);
使用示例:
$list = $officialAccount->material->list('image', 0, 10);
圖片、語音、視頻 等類型的返回如下:
{
"total_count": TOTAL_COUNT,
"item_count": ITEM_COUNT,
"item": [
{
"media_id": MEDIA_ID,
"name": NAME,
"update_time": UPDATE_TIME,
"url": URL
},
// 可能會有多個素材
]
}
永久圖文消息素材列表的響應如下:
{
"total_count": TOTAL_COUNT,
"item_count": ITEM_COUNT,
"item": [
{
"media_id": MEDIA_ID,
"content": {
"news_item": [
{
"title": TITLE,
"thumb_media_id": THUMB_MEDIA_ID,
"show_cover_pic": SHOW_COVER_PIC(0 / 1),
"author": AUTHOR,
"digest": DIGEST,
"content": CONTENT,
"url": URL,
"content_source_url": CONTETN_SOURCE_URL
}
// 多圖文消息會在此處有多篇文章
]
},
"update_time": UPDATE_TIME
}
// 可能有多個圖文消息item結構
]
}
獲取素材計數
$stats = $officialAccount->material->stats();
// 運行結果:
{
"voice_count": COUNT,
"video_count": COUNT,
"image_count": COUNT,
"news_count": COUNT
}
刪除永久素材
$officialAccount->material->delete($mediaId);
文章預覽
文章預覽請參閱 “消息群發” 章節。