Attach.class.php 6.88 KB
<?php

/**
 * Attach.class.php
 * 附件接口操作类
 *
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
 * @copyright  Copyright (c) 2014 - ? VcySDK (http://www.vchangyi.com/)
 * @author     zhuxun37
 * @version    1.0.0
 */
namespace VcySDK;

use VcySDK\Logger;
use VcySDK\Config;
use VcySDK\Error;
use VcySDK\Exception;

class Attach
{

    /**
     * 接口调用类
     *
     * @var object
     */
    private $serv = null;

    /**
     * SERVICE 类
     *
     * @var null
     */
    private $service = null;

    /**
     * 根据MediaID读取附件
     * %s = {apiDomain}/b/{enumber}
     *
     * @var string
     */
    const GET_MEDIA_URL = '%s/media/get';

    /**
     * 根据附件ID获取附件
     * %s = {apiDomain}/b/{enumber}
     *
     * @var string
     */
    const LIST_URL = '%s/attach/list';

    /**
     * 获取指定附件
     * %s = {apiDomain}/b/{enumber}
     *
     * @var string
     */
    const GET_URL = '%s/attach/get';

    /**
     * 上传附件
     * %s = {apiDomain}/b/{enumber}
     *
     * @var string
     */
    const UPLOAD_URL = '%s/upload';

    /**
     * 附件资源权限令牌
     * %s = {apiDomain}/b/{enumber}
     *
     * @var string
     */
    const TOKEN_URL = '%s/attach/token';

    /**
     * 更新附件资源权限
     * %s = {apiDomain}/b/{enumber}
     *
     * @var string
     */
    const UPDATE_AUTH_URL = '%s/attach/update_auth';

    /**
     * 删除文件
     * %s = {apiDomain}/b/{enumber}
     *
     * @var string
     */
    const DELETE_FILE_URL = '%s/attach/deleteFile';

    /**
     * 更新附件的使用状态
     * %s = {apiDomain}/b/{enumber}
     *
     * @var string
     */
    const MAKE_ACTIVE = '%s/attach/mark-active';


    /**
     * 文件类型-普通文件
     *
     * @var int
     */
    const TYPE_NORMAL = 99;
    
    /**
     * 文件类型-图片
     *
     * @var int
     */
    const TYPE_IMG = 1;
    
    /**
     * 文件类型-音频
     *
     * @var int
     */
    const TYPE_AUDIO = 2;
    
    /**
     * 文件类型-视频
     *
     * @var int
     */
    const TYPE_VIDEO = 3;

    /**
     * 是否需要权限认证:不需要
     *
     * @var int
     */
    const AUTH_REQUIRED_FALSE = 0;

    /**
     * 是否需要权限认证:需要
     *
     * @var int
     */
    const AUTH_REQUIRED_TRUE = 1;

    /**
     * 默认附件资源权限:不可见
     *
     * @var int
     */
    const DEFAULT_AUTH_HIDDEN = 0;

    /**
     * 默认附件资源权限:可见
     *
     * @var int
     */
    const DEFAULT_AUTH_VISIBLE = 1;

    /**
     * 是否插入水印:是
     *
     * @var int
     */
    const INSERT_WATERMARK_TRUE = 1;

    /**
     * 是否插入水印:否
     *
     * @var int
     */
    const INSERT_WATERMARK_FALSE = 2;

    /**
     * 初始化
     *
     * @param object $serv 接口调用类
     */
    public function __construct($serv)
    {

        $this->serv = $serv;
        $this->service = new Service();
    }

    /**
     * 上传附件
     *
     * @param array $params 请求参数;
     *                     + memUid string 用户UID (必填)
     *                     + atMediatype Integer 文件类型99=普通文件(最大5M),1=图片(2M),2=音频(2M),
     *                     3=视频(10M),总文件大小最大30M,支持类型 (xls,xlsx,jpg,jpeg,png,bmp,gif,mp3,amr,avi,mp4) (必填)
     *                     + file File 文件,支持多个 {必填}
     * @param mixed $files 文件
     *
     * @return mixed
     */
    public function upload($params, $files)
    {
        $params['atChannel'] = 2;
        return $this->serv->postSDK(self::UPLOAD_URL, $params, 'generateApiUrlAtt', array(), $files);
    }

    /**
     * 获取微信服务号多媒体信息
     *
     * @param array $params 多媒体文件相关信息
     *                      + memUid string 用户UID(必填)
     *                      + mediaId string 微信公众号媒体文件ID(必填)
     *                      + fileType string 文件类型1=图片,2=音频(必填)
     *                      + callbackUrl string amr语音异步转成mp3,回调地址(文件类型为语音时必填, method: POST)
     *
     * @return boolean
     */
    public function getMedia($params)
    {

        return $this->serv->postSDK(self::GET_MEDIA_URL, $params, 'generateApiUrlA');
    }

    /**
     * 获取指定附件信息
     *
     * @param array $condition 查询条件
     */
    public function fetch($condition)
    {
        return $this->serv->postSDK(self::GET_URL, $condition, 'generateApiUrlAtt');
    }

    /**
     * 获取附件列表
     *
     * @param array $condition 查询条件
     * @param int   $page      页码
     * @param int   $perpage   每页记录数
     * @param array $orders    排序字段
     */
    public function listAll($condition = array(), $page = 1, $perpage = 30, $orders = array())
    {
        // 查询参数
        $this->service->getValue($condition, ['atIds']);
        $condition = $this->serv->mergeListApiParams($condition, $orders, $page, $perpage);

        return $this->serv->postSDK(self::LIST_URL, $condition, 'generateApiUrlAtt');
    }

    /**
     * 获取附件列表
     *
     * @param array $condition 查询条件
     *              + string atId 附件ID
     */
    public function getToken($condition = array())
    {

        return $this->serv->postSDK(self::TOKEN_URL, $condition, 'generateApiUrlAtt');
    }

    /**
     * 更新附件资源权限
     *
     * @param array $condition 查询条件
     *              + string atId 附件ID
     *              + integr atAuthRequired 是否需要权限认证, 0-不需要,1-需要
     *              + string atAuthUrl 业务平台附件资源权限认证地址
     *              + string atDefaultAuth 默认附件资源权限,0-不可见,1-可见; 当atAuthUrl请求不通、超时(例:100ms)等等情况,使用默认权限
     *              + string atFilename 文件名,不需要带后缀名(和atAuthRequired两个参数必须有一个有值)
     */
    public function updateAuth($condition = array())
    {

        return $this->serv->postSDK(self::UPDATE_AUTH_URL, $condition, 'generateApiUrlAtt');
    }

    /**
     * 删除文件
     *
     * @param array $condition 查询条件
     *              + string atId 附件ID
     */
    public function deleteFile($condition = array())
    {

        return $this->serv->postSDK(self::DELETE_FILE_URL, $condition, 'generateApiUrlAtt');
    }


    /**
     * 改变附件的活跃状态
     *
     * @param array $condition 查询条件
     *              + string atId 附件ID
     *              + array atIds 附件ID集合
     *              + int atActive - (0-不活跃,1-活跃)
     * @return bool
     */
    public function makeActive($condition = array())
    {

        return $this->serv->postSDK(self::MAKE_ACTIVE, $condition, 'generateApiUrlAtt');
    }
}