/** * 新增永久素材 媒体文件类型别有图片(image)、语音(voice) 、视频(video)和缩略图(thumb) * * @param string $filename * @param string $type * @param string $title 视频素材的标题 只对类型为video有效 * @param string $introduction 视频素材的描述 只对类型为video有效 * @return array */ public static function uploadFile($filename, $type, $title = null, $introduction = null) { $filename = realpath($filename); if (class_exists('\\CURLFile')) { $data['media'] = new \CURLFile($filename); } else { $data['media'] = '@' . $filename; } $data['type'] = $type; if ($type === 'video') { $data['description'] = Json::encode(array('title' => $title, 'introduction' => $introduction)); } $url = 'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN'; return parent::request($url, $data, false); }
/** * 请求微信平台服务器,并解析返回的json字符串为数组,失败抛异常 * @param $url * @param $data * @return array * @throws \PFinal\Wechat\WechatException */ protected static function request($url, $data = null, $jsonEncode = true) { $executeUrl = str_replace('ACCESS_TOKEN', self::getApi()->getAccessToken(), $url); if ($jsonEncode) { $data = Json::encode($data); } try { return Json::parseOrFail(Curl::execute($executeUrl, is_null($data) ? 'get' : 'post', $data)); } catch (WechatException $ex) { //更新AccessToken再次请求 if ($ex->getCode() == 40001) { $executeUrl = str_replace('ACCESS_TOKEN', self::getApi()->getAccessToken(false), $url); return Json::parseOrFail(Curl::execute($executeUrl, is_null($data) ? 'get' : 'post', $data)); } throw $ex; } }