123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- <?php
- /**
- * [WeEngine System] Copyright (c) 2014 WE7.CC
- * WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
- */
-
- defined('IN_IA') or exit('Access Denied');
- error_reporting(0);
- global $_W;
- load()->func('file');
- load()->func('communication');
- load()->model('account');
- $limit = array();
- $limit['temp'] = array(
- 'image' => array(
- 'ext' => array('jpg', 'logo'),
- 'size' => 1024 * 1024,
- 'errmsg' => '临时图片只支持jpg/logo格式,大小不超过为1M',
- ),
- 'voice' => array(
- 'ext' => array('amr', 'mp3'),
- 'size' => 2048 * 1024,
- 'errmsg' => '临时语音只支持amr/mp3格式,大小不超过为2M',
- ),
- 'video' => array(
- 'ext' => array('mp4'),
- 'size' => 10240 * 1024,
- 'errmsg' => '临时视频只支持mp4格式,大小不超过为10M',
- ),
- 'thumb' => array(
- 'ext' => array('jpg', 'logo'),
- 'size' => 64 * 1024,
- 'errmsg' => '临时缩略图只支持jpg/logo格式,大小不超过为64K',
- ),
- );
- $limit['perm'] = array(
- 'image' => array(
- 'ext' => array('bmp', 'png', 'jpeg', 'jpg', 'gif'),
- 'size' => 2048 * 1024,
- 'max' => 5000,
- 'errmsg' => '永久图片只支持bmp/png/jpeg/jpg/gif格式,大小不超过为2M',
- ),
- 'voice' => array(
- 'ext' => array('amr', 'mp3', 'wma', 'wav', 'amr'),
- 'size' => 5120 * 1024,
- 'max' => 1000,
- 'errmsg' => '永久语音只支持mp3/wma/wav/amr格式,大小不超过为5M,长度不超过60秒',
- ),
- 'video' => array(
- 'ext' => array('rm', 'rmvb', 'wmv', 'avi', 'mpg', 'mpeg', 'mp4'),
- 'size' => 10240 * 1024 * 2,
- 'max' => 1000,
- 'errmsg' => '永久视频只支持rm/rmvb/wmv/avi/mpg/mpeg/mp4格式,大小不超过为20M',
- ),
- 'thumb' => array(
- 'ext' => array('bmp', 'png', 'jpeg', 'jpg', 'gif'),
- 'size' => 2048 * 1024,
- 'max' => 5000,
- 'errmsg' => '永久缩略图只支持bmp/png/jpeg/jpg/gif格式,大小不超过为2M',
- ),
-
- );
-
- $limit['file_upload'] = array(
- 'image' => array(
- 'ext' => array('jpg'),
- 'size' => 1024 * 1024,
- 'max' => -1,
- 'errmsg' => '图片只支持jpg格式,大小不超过为1M',
- )
- );
-
- $apis = array();
- $apis['temp'] = array(
- 'add' => 'https://api.weixin.qq.com/cgi-bin/media/upload',
- 'get' => 'https://api.weixin.qq.com/cgi-bin/media/get',
- 'post_key' => 'media'
- );
- $apis['perm'] = array(
- 'add' => 'https://api.weixin.qq.com/cgi-bin/material/add_material',
- 'get' => 'https://api.weixin.qq.com/cgi-bin/material/get_material',
- 'del' => 'https://api.weixin.qq.com/cgi-bin/material/del_material',
- 'count' => 'https://api.weixin.qq.com/cgi-bin/material/get_materialcount',
- 'batchget' => 'https://api.weixin.qq.com/cgi-bin/material/batchget_material',
- 'post_key' => 'media',
- );
-
- $apis['file_upload'] = array(
- 'add' => 'https://api.weixin.qq.com/cgi-bin/media/uploadimg',
- 'post_key' => 'buffer',
- );
-
- $result = array(
- 'error' => 1,
- 'message' => '',
- 'data' => ''
- );
-
- $type = trim($_GPC['types']);
- if($type == 'image' || $type == 'thumb') {
- $type = 'image';
- }
- if($type == 'voice' || $type == 'video') {
- $type = 'audio';
- }
-
- $setting['folder'] = "{$type}s/{$_W['uniacid']}" . '/'.date('Y/m/');
-
-
- if ($do == 'upload') {
- $type = trim($_GPC['types']);
- $mode = trim($_GPC['mode']);
- $acid = $_W['acid'];
- if($mode == 'perm') {
- $now_count = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename('wechat_attachment') . ' WHERE uniacid = :aid AND acid = :acid AND model = :model AND type = :type', array(':aid' => $_W['uniacid'], ':acid' => $acid, ':model' => $mode, ':type' => $type));
- if($now_count >= $limit['perm'][$type]['max']) {
- $result['message'] = '文件数量超过限制,请先删除部分文件再上传';
- die(json_encode($result));
- }
- }
-
- if(empty($mode) || empty($type) || !$_W['acid']) {
- $result['message'] = '上传配置出错';
- die(json_encode($result));
- }
-
- if (empty($_FILES['file']['name'])) {
- $result['message'] = '上传失败, 请选择要上传的文件!';
- die(json_encode($result));
- }
-
- if ($_FILES['file']['error'] != 0) {
- $result['message'] = '上传失败, 请重试.';
- die(json_encode($result));
- }
-
- $ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
- $ext = strtolower($ext);
- $size = intval($_FILES['file']['size']);
- $originname = $_FILES['file']['name'];
-
- if(!in_array($ext, $limit[$mode][$type]['ext']) || ($size > $limit[$mode][$type]['size'])) {
- $result['message'] = $limit[$mode][$type]['errmsg'];
- die(json_encode($result));
- }
-
- $filename = file_random_name(ATTACHMENT_ROOT .'/'. $setting['folder'], $ext);
- $file = file_wechat_upload($_FILES['file'], $type, $setting['folder'] . $filename);
- if (is_error($file)) {
- $result['message'] = $file['message'];
- die(json_encode($result));
- }
-
- $pathname = $file['path'];
- $fullname = ATTACHMENT_ROOT . '/' . $pathname;
-
- $acc = WeAccount::create($acid);
- $token = $acc->getAccessToken();
- if (is_error($token)) {
- $result['message'] = $token['message'];
- die(json_encode($result));
- }
- if($mode == 'perm' || $mode == 'temp') {
- $sendapi = $apis[$mode]['add'] . "?access_token={$token}&type={$type}";
- $media = '@'.$fullname;
- $data = array(
- 'media' => $media
- );
- if($type == 'video') {
- $description = array(
- 'title' => $filename,
- 'introduction' => $filename,
- );
- $data['description'] = urldecode(json_encode($description));
- }
- } elseif($mode == 'file_upload') {
- $sendapi = $apis[$mode]['add'] . "?access_token={$token}";
- $data = array(
- 'buffer' => '@'.$fullname
- );
- $type = 'image';
- }
- $resp = ihttp_request($sendapi, $data);
- if(is_error($resp)) {
- $result['error'] = 0;
- $result['message'] = $resp['message'];
- die(json_encode($result));
- }
- $content = @json_decode($resp['content'], true);
- if(empty($content)) {
- $result['error'] = 0;
- $result['message'] = "接口调用失败, 元数据: {$resp['meta']}";
- die(json_encode($result));
- }
- if(!empty($content['errcode'])) {
- $result['error'] = 0;
- $result['message'] = "访问微信接口错误, 错误代码: {$content['errcode']}, 错误信息: {$content['errmsg']},错误详情:{$acc->error_code($content['errcode'])}";
- die(json_encode($result));
- }
- if($mode == 'perm' || $mode == 'temp') {
- if(!empty($content['media_id'])){
- $result['media_id'] = $content['media_id'];
- }
- if(!empty($content['thumb_media_id'])){
- $result['media_id'] = $content['thumb_media_id'];
- }
- } elseif($mode == 'file_upload') {
- $result['media_id'] = $content['url'];
- }
-
- if ($type == 'image' || $type == 'thumb' ) {
- $file['path'] = file_image_thumb($fullname, '', 300);
- }
- if (!empty($_W['setting']['remote']['type']) && !empty($file['path'])) {
- $remotestatus = file_remote_upload($file['path']);
- if (is_error($remotestatus)) {
- file_delete($pathname);
- if($type == 'image' || $type == 'thumb'){
- file_delete($file['path']);
- }
- $result['error'] = 0;
- $result['message'] = '远程附件上传失败,请检查配置并重新上传';
- die(json_encode($result));
- } else {
- file_delete($pathname);
- if($type == 'image' || $type == 'thumb'){
- file_delete($file['path']);
- }
- }
- }
- $insert = array(
- 'uniacid' => $_W['uniacid'],
- 'acid' => $acid,
- 'uid' => $_W['uid'],
- 'filename' => $originname,
- 'attachment' => $file['path'],
- 'media_id' => $result['media_id'],
- 'type' => $type,
- 'model' => $mode,
- 'createtime' => TIMESTAMP
- );
- if($type == 'image' || $type == 'thumb') {
- $size = getimagesize($fullname);
- $insert['width'] = $size[0];
- $insert['height'] = $size[1];
- if($mode == 'perm') {
- $insert['tag'] = $content['url'];
- }
- if(!empty($insert['tag'])) {
- $insert['attachment'] = $content['url'];
- }
- $result['width'] = $size[0];
- $result['hieght'] = $size[1];
- }
- if($type == 'video') {
- $insert['tag'] = iserializer($description);
- }
- pdo_insert('wechat_attachment', $insert);
- $result['type'] = $type;
- $result['url'] = tomedia($file['path']);
-
- if($type == 'image' || $type == 'thumb') {
- @unlink($fullname);
- }
- if($type == 'video') {
- $result['title'] = $description['title'];
- $result['introduction'] = $description['introduction'];
- }
- $result['mode'] = $mode;
- die(json_encode($result));
- }
-
- if ($do == 'browser') {
- $types = array('image', 'thumb', 'voice', 'video');
- $type = in_array($_GPC['type'], $types) ? $_GPC['type'] : 'image';
- $mode = trim($_GPC['mode']);
- $acid = $_W['acid'];
- $condition = ' WHERE uniacid = :uniacid AND acid = :acid';
- $param = array(':uniacid' => $_W['uniacid'], ':acid' => $_W['acid']);
- if(empty($mode)) {
- $condition .= ' AND type = :type AND model = :model';
- $param[':type'] = $type;
- $param[':model'] = 'perm';
- } else {
- $condition .= ' AND model = :model';
- $param[':model'] = $mode;
- }
- $page = intval($_GPC['page']);
- $page = max(1, $page);
- $size = intval($_GPC['psize']) ? intval($_GPC['psize']) : 10;
- $sql = 'SELECT * FROM '.tablename('wechat_attachment')."{$condition} ORDER BY id DESC LIMIT ".(($page-1) * $size).','.$size;
- $list = pdo_fetchall($sql, $param, 'id');
- foreach ($list as &$item) {
- $item['url'] = tomedia($item['attachment']);
- $item['createtime'] = date('Y-m-d H:i', $item['createtime']);
- if($item['type'] == 'video') {
- $item['tag'] = iunserializer($item['tag']);
- }
- unset($item['uid']);
- }
- $total = pdo_fetchcolumn('SELECT count(*) FROM '.tablename('wechat_attachment') . $condition, $param);
- iajax(0, array('page'=> pagination($total, $page, $size, '', array('before' => '2', 'after' => '3', 'ajaxcallback'=>'null')), 'items' => $list));
- }
-
- if ($do == 'delete') {
- $id = intval($_GPC['id']);
- $acid = $_W['acid'];
- $data = pdo_fetch('SELECT * FROM ' . tablename('wechat_attachment') . ' WHERE acid = :acid AND id = :id', array(':acid' => $acid, ':id' => $id));
- if(empty($data)) {
- $result['error'] = 0;
- $result['message'] = '素材不存在';
- die(json_encode($result));
- }
- $acc = WeAccount::create($acid);
- $token = $acc->getAccessToken();
- if (is_error($token)) {
- $result['error'] = 0;
- $result['message'] = $token['message'];
- die(json_encode($result));
- }
- $sendapi = $apis[$data['model']]['del'] . "?access_token={$token}";
- $post = array(
- 'media_id' => $data['media_id']
- );
- $resp = ihttp_request($sendapi, json_encode($post));
- if(is_error($resp)) {
- $result['error'] = 0;
- $result['message'] = $resp['message'];
- die(json_encode($result));
- }
- $content = @json_decode($resp['content'], true);
- if(empty($content)) {
- $result['error'] = 0;
- $result['message'] = "接口调用失败, 元数据: {$resp['meta']}";
- die(json_encode($result));
- }
- if(!empty($content['errcode'])) {
- $result['error'] = 0;
- $result['message'] = "访问微信接口错误, 错误代码: {$content['errcode']}, 错误信息: {$content['errmsg']},错误详情:{$acc->error_code($content['errcode'])}";
- die(json_encode($result));
- }
- pdo_delete('wechat_attachment', array('acid' => $acid, 'id' => $id));
- die(json_encode($result));
- }
-
- function delete_temp(){
- pdo_query('DELETE FROM ' . tablename('wechat_attachment') . ' WHERE createtime + 259200 < :time', array(':time' => time()));
- }
|