mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2025-04-06 03:58:04 +08:00
91 lines
3.7 KiB
PHP
91 lines
3.7 KiB
PHP
<?php
|
||
|
||
// +----------------------------------------------------------------------
|
||
// | Think.Admin
|
||
// +----------------------------------------------------------------------
|
||
// | 版权所有 2016~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
|
||
// +----------------------------------------------------------------------
|
||
// | 官方网站: http://think.ctolog.com
|
||
// +----------------------------------------------------------------------
|
||
// | 开源协议 ( https://mit-license.org )
|
||
// +----------------------------------------------------------------------
|
||
// | github开源项目:https://github.com/zoujingli/Think.Admin
|
||
// +----------------------------------------------------------------------
|
||
|
||
namespace library;
|
||
|
||
use think\Db;
|
||
use think\Log;
|
||
|
||
/**
|
||
* 微信图文处理器
|
||
*
|
||
* @author Anyon <zoujingli@qq.com>
|
||
* @date 2016/03/15 17:28
|
||
*/
|
||
class News {
|
||
|
||
/**
|
||
* 通过图文ID读取图文信息
|
||
* @param int $id 本地图文ID
|
||
* @param array $where 额外的查询条件
|
||
* @return array
|
||
*/
|
||
static public function get($id, $where = []) {
|
||
$data = Db::table('wechat_news')->where('id', $id)->where($where)->find();
|
||
$article_ids = explode(',', $data['article_id']);
|
||
$articles = Db::table('wechat_news_article')->where('id', 'in', $article_ids)->select();
|
||
$data['articles'] = array();
|
||
foreach ($article_ids as $article_id) {
|
||
foreach ($articles as $article) {
|
||
if (intval($article['id']) === intval($article_id)) {
|
||
unset($article['create_by'], $article['create_at']);
|
||
$data['articles'][] = $article;
|
||
}
|
||
}
|
||
}
|
||
unset($articles);
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 上传图片永久素材
|
||
* @param string $appid 公众号APPID
|
||
* @param string $local_url 文件URL地址
|
||
* @param string $type 文件类型
|
||
* @param bool $is_video 是否为视频文件
|
||
* @param array $video_info 视频信息
|
||
* @return string|null
|
||
*/
|
||
static public function uploadMedia($appid, $local_url = '', $type = 'image', $is_video = false, $video_info = array()) {
|
||
# 检测文件上否已经上传过了
|
||
$md5 = md5($local_url);
|
||
$wechat = &load_wechat('media', $appid);
|
||
$map = ['md5' => $md5, 'appid' => $wechat->appid];
|
||
if (($result = Db::table('wechat_news_media')->where($map)->find()) && !empty($result)) {
|
||
return $result['media_id'];
|
||
}
|
||
# 下载临时文件到本地
|
||
$filename = ROOT_PATH . 'public/static/upload/wechat/' . join('/', str_split($md5, 16)) . '.' . pathinfo($local_url, PATHINFO_EXTENSION);
|
||
if (!file_exists($filename) || !is_file($filename)) {
|
||
!is_dir(dirname($filename)) && mkdir(dirname($filename), 0755, TRUE);
|
||
file_put_contents($filename, file_get_contents($local_url));
|
||
}
|
||
# 上传图片素材
|
||
$result = $wechat->uploadForeverMedia(array('media' => "@{$filename}"), $type, $is_video, $video_info);
|
||
unlink($filename);
|
||
if (FALSE !== $result) {
|
||
$data = ['appid' => $wechat->appid, 'md5' => $md5, 'type' => $type];
|
||
$data['media_id'] = $result['media_id'];
|
||
isset($result['url']) && $data['media_url'] = $result['url'];
|
||
$data['local_url'] = $local_url;
|
||
if (false !== Db::table('wechat_news_media')->insert($data)) {
|
||
return $data['media_id'];
|
||
}
|
||
}
|
||
Log::error("素材上传失败,请稍后再试!{$wechat->errMsg}[{$wechat->errCode}]");
|
||
return NULL;
|
||
}
|
||
|
||
}
|