<?php /** * 微信公众号自定义菜单 * @file:WechatMenuController.php * @Date: 2023/7/5 * @Time: 15:01 */ namespace Modules\WechatPlatform\Http\Controllers; use Catch\Base\CatchController; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Modules\Channel\Services\WechatOpenPlatform\WechatOpenPlatformService; use Modules\Manage\Enmus\MiniprogramType; use Modules\User\Http\Controllers\UserTrait; use Modules\WechatPlatform\Http\Requests\WechatMenuRequest; use Modules\WechatPlatform\Services\WechatMenuService; class WechatMenuController extends CatchController { use UserTrait; /** * 关键词列表 * name: List * @param Request $request * date 2023/07/05 15:10 */ public function List(Request $request) { $param = $request->all(); $userContext = $this->getUserContext(null); $param['user_id'] = $userContext['loginUser']->id; $param['puser_id'] = $userContext['loginUser']->pid; } public function add(WechatMenuRequest $request) { $param = $this->handelParam($request->validated()); } // 处理参数 private function handelParam($param) { $info = DB::table('miniprogram')->where('id', $param['miniprogram_id'])->first(); if (empty($info)) { WechatMenuService::throwErrMsg("小程序不正确"); } if ($info->status != 1) { WechatMenuService::throwErrMsg("此小程序暂不提供使用"); } if ($info->type != MiniprogramType::WEIXIN->value()) { WechatMenuService::throwErrMsg("关键词回复设置仅支持微信小程序"); } $param['miniprogram_appid'] = $info->appid; $info = DB::table('user_has_miniprograms')->where('uid', $this->getLoginUserId())->where('miniprogram_id', $param['miniprogram_id'])->where('is_enabled', 1)->value('id'); if (empty($info)) { WechatMenuService::throwErrMsg("没有此小程序的使用权限"); } $errs = ""; if (count($param['content']) >3){ WechatMenuService::throwErrMsg("底部菜单不能超过3个"); } $menus = []; foreach ($param['content'] as $val){ $temp = ['name' => $val['name']]; if (getProp($val,'sub_button')){ // 有二级菜单 if (count($val['sub_button']) > 5){ $errs .= getProp($val,'name')."的二级菜单超过5个"; continue ; } foreach ($val['sub_button'] as $sub){ $res = $this->checkMenuItem($sub); } }else{ // 一级菜单 $res = $this->checkMenuItem($sub); } } } private function checkMenuItem($sub) { $type = getProp($sub,'type'); if (!in_array($type,["click",'miniprogram','scancode_waitmsg'])){ return ['status' => 0,'msg' => "类型非法"]; } } public function test(){ $info = WechatOpenPlatformService::getAppInfoById(8); $componentInfo = WechatOpenPlatformService::getComponentInfoByAppid($info->component_appid); $openPlatform = WechatOpenPlatformService::buildApplication($componentInfo); $app = $openPlatform->officialAccount($info->authorizer_appid, getProp($info,'authorizer_refresh_token')); unset($appInfo); return $app->menu->list(); } }