app = Factory::officialAccount($config); } ################################################################################################################ ###### 代公众号实现业务 公众号相关 ################################################################################################## ################################################################################################################ /** * 获取公众号的基本信息 */ public function getBasicInfo() { try { $info = $this->getOpenPlatform()->getAuthorizer($this->storeInfo['g_authorizer_appid']); } catch (\Exception $e) { return responseMessage(2001, $e->getMessage()); } return responseMessage(1001, 'success', $info); } /** * @return String */ public function getQrCode() { $path = Request::post('path'); if (empty($path)) { return responseMessage(2001, '参数错误,请重试!'); } $qrCode = new QrCode($path); return responseMessage(1001, '', 'data:image/jpeg;base64,' . base64_encode($qrCode->writeString())); } ################################################################################################################ ###### 素材管理 ################################################################################################## ################################################################################################################ /** * 获取永久素材列表 * * @return String * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \GuzzleHttp\Exception\GuzzleException */ public function getMaterialList() { $requestData = Request::all(); $type = $requestData['type'] ?? ''; // 素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news) $page = $requestData['page'] ?? 1; $count = 20; $offset = ($page - 1) * $count; if (empty($type)) { return responseMessage(2001, '请求参数错误!'); } $list = $this->app->material->list($type, $offset, $count); return responseMessage(1001, 'success', $list); } /** * 上传图片 * * @return String */ public function uploadMaterialImage() { return $this->uploadMaterial('image'); } /** * 上传语音 * * @return String */ public function uploadMaterialVoice() { return $this->uploadMaterial('voice'); } /** * 上传视频 * * @return String */ public function uploadMaterialVideo() { return $this->uploadMaterial('video'); } /** * 上传缩略图 * * @return String */ public function uploadMaterialThumb() { return $this->uploadMaterial('thumb'); } /** * 上传文章图片 * * @return String */ public function uploadArticleImage() { return $this->uploadMaterial('articleImage'); } /** * 上传文章 * * @return String */ public function uploadArticle() { $requestData = Request::all(); $data = $requestData['data'] ?? []; if (empty($data)) { return responseMessage(2001, '图文消息内容不完整'); } return $this->uploadMaterial('article', $data); } /** * 获取临时素材详情 * * @return String * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException * @throws \GuzzleHttp\Exception\GuzzleException */ public function getMaterialInfo() { $requestData = Request::all(); $type = $requestData['type'] ?? ''; $mediaId = $requestData['mediaId'] ?? ''; if (empty($mediaId)) { return responseMessage(2001, '参数错误!'); } $stream = $this->app->media->get($mediaId); if ($type == 'img') { $filename = mt_rand(1, 9) . '.jpg'; } elseif ($type == 'voice') { $filename = mt_rand(1, 9) . '.mp3'; } elseif ($type == 'news') { return responseMessage(1001, 'success', $stream); } elseif ($type == 'video') { return responseMessage(1001, 'success', $stream); } $stream->saveAs(public_path('static/upload/tmp/' . $this->storeId), $filename); return responseMessage(1001, 'success!', '/upload/tmp/' . $this->storeId . $filename); } /** * 删除素材 * * @return String * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \GuzzleHttp\Exception\GuzzleException */ public function delMaterial() { $requestData = Request::all(); $mediaId = $requestData['mediaId'] ?? ''; if (empty($mediaId)) { return responseMessage(2001, '参数错误!'); } $result = $this->app->material->delete($mediaId); if ($result['errcode'] == 0) { return responseMessage(1001, '删除成功!'); } else { return responseMessage(2002, '失败 - ' . $result['errmsg']); } } /** * @param $type * @param array $data * @return String * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \GuzzleHttp\Exception\GuzzleException */ private function uploadMaterial($type, $data = []) { if ($type == 'article') { $articleArr = []; foreach ($data as $item) { if (!isset($item['title']) || empty($item['title'])) { return responseMessage(2001, '图文消息,标题不能为空'); } if (!isset($item['thumb_media_id']) || empty($item['thumb_media_id'])) { return responseMessage(2001, '图文消息,封面图片必须填写'); } $article = new Article($item); $articleArr[] = $article; } $result = $this->app->material->uploadArticle($articleArr); if ($result['errcode'] == 0) { return responseMessage(1001, 'success', $result); } else { return responseMessage(3002, '上传失败-' . $result['errmsg']); } } else { $upload = Request::file('file'); if ($upload) { $upload_dir = '/static/upload/wechat/' . $type . '/' . mt_rand(1, 99) . '/'; $disk_dir = public_path($upload_dir); if (!file_exists($disk_dir) || !is_dir($disk_dir)) { @mkdir($disk_dir, 0777, true); } $file_name = md5(microtime()) . '.' . $upload->getClientOriginalExtension(); $upload->move($disk_dir, $file_name); $path = $upload_dir . $file_name; if ($upload->getError()) { return responseMessage(2002, $upload->getErrorMessage()); } $absolutePath = public_path($path); if ($type == 'image') { $result = $this->app->material->uploadImage($absolutePath); } elseif ($type == 'voice') { $result = $this->app->material->uploadVoice($absolutePath); } elseif ($type == 'video') { $title = $data['title']; $desc = $data['desc']; $result = $this->app->material->uploadVideo($absolutePath, $title, $desc); } elseif ($type == 'thumb') { $result = $this->app->material->uploadThumb($absolutePath); } elseif ($type == 'articleImage') { $result = $this->app->material->uploadArticleImage($absolutePath); } else { return responseMessage(3001, '参数错误'); } if (!isset($result['errcode'])) { return responseMessage(1001, 'success', $result); } else { return responseMessage(3002, '上传失败-' . $result['errmsg']); } } else { return responseMessage(2000, '上传的文件不存在,请重试!'); } } } ################################################################################################################ ###### 菜单管理 ################################################################################################## ################################################################################################################ /** * 获取当前菜单 */ public function menuCurrent() { $result = $this->app->menu->list(); return responseMessage(1001, 'success', $result); } /** * 创建普通菜单 */ public function menuCreate() { $requestData = Request::all(); $data = $requestData['data'] ?? []; if (empty($data)) { return responseMessage(2001, '菜单内容不完整'); } // 参数设置 foreach ($data as $key => $row) { if (isset($row['sub_button']) && $row['sub_button']) { foreach ($row['sub_button'] as $skey => $sRow) { if ($sRow['type'] == 'click') { $key_val = getRandNumber(); $this->textMenuData[$key_val] = $sRow['value']; $data[$key]['sub_button'][$skey]['key'] = $key_val; } } } else if ($row['type'] == 'click') { $key_val = getRandNumber(); $this->textMenuData[$key_val] = $row['value']; $data[$key]['key'] = $key_val; } } $result = $this->app->menu->create($data); if ($result['errcode'] == 0) { return responseMessage(1001, '创建成功!'); } else { return responseMessage(2003, '上传失败-' . $result['errmsg']); } } /** * 全部删除 */ public function menuDelete() { $result = $this->app->menu->delete(); return responseMessage(1001, 'success', $result); } }