'view', "name" => "这里买花", "keyName" => "mall", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['frontUrl'] . "/mobile/index?account=" . $merchant['id']], ["type" => "view", "name" => "会员服务", "keyName" => "memberCenter", "menuOption" => $menuOption['redirectToCommonUseUrl'], "sub_button" => [ ["type" => "view", "name" => "注册会员", "keyName" => "myMemberCard", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['frontUrl'] . "/center/info?account=" . $merchantId], ["type" => "view", "name" => "我的会员卡", "keyName" => "myMemberCard", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['frontUrl'] . "/center/qr-code?account=" . $merchantId], ["type" => "view", "name" => "快速下单", "keyName" => "quickOrder", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['frontUrl'] . "/payment/quick-order?account=" . $merchantId], ],], ["type" => 'view', "name" => "我的订单", "keyName" => "myOrder", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['frontUrl'] . "/center/order?account=" . $merchantId], ]; $merchantName = $merchant['merchantName']; if (in_array($merchantName, ['花美灵', '中花汇', '花卉宝', '花汇宝'])) { $button = [ ["type" => 'view', "name" => "登陆后台", "keyName" => "mall", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['adminUrl']], ["type" => "view", "name" => "申请接入", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => Yii::$app->params['openUrl'] . "/join/apply"], ["type" => "view", "name" => "申请公众号", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => Yii::$app->params['openUrl'] . "/main/apply"], ]; } $account = $merchant['id']; $trainDemo = configDict::getConfig('trainDemo'); $demoPlatformAccount = $trainDemo['platform']['account']; if ($account == $demoPlatformAccount) { $button = [ ["type" => 'view', "name" => "登陆后台", "keyName" => "mall", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['adminUrl']], ["type" => "view", "name" => "申请接入", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => Yii::$app->params['openUrl'] . "/join/apply"], ["type" => "view", "name" => "更多", "keyName" => "memberCenter", "menuOption" => $menuOption['redirectToCommonUseUrl'], "sub_button" => [ ["type" => "view", "name" => "申请公众号", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => Yii::$app->params['openUrl'] . "/main/apply"], ["type" => "view", "name" => "清空数据", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => Yii::$app->params['adminUrl'] . "/init/clear"], ],], ]; } $weixinUtil = new weixinUtil($merchant); $menuList = $button; foreach ($button as $key => $val) { unset($button[$key]['keyName']); } $menu['button'] = $button; $info = $weixinUtil->userMenuToWeiXin($menu); $info = json_decode($info, true); xhMerchantExtendService::updateByMerchantId($merchantId, ['wxMenuInit' => 1]); $now = time(); $date = date("Y-m-d H:i:s", $now); $mapped = configDict::getConfig('commonUseUrlMapped'); $redirectUrl = configDict::getConfig('replyType', 'redirectUrl');//回复类型 跳转链接 if ($info['errcode'] == 0) { foreach ($menuList as $key => $val) { $addData = []; $addData['parentId'] = 0; $addData['merchantId'] = $merchantId; $addData['menuOrder'] = $key; $addData['menuOption'] = $val['menuOption']; $addData['hasSonMenu'] = isset($val['sub_button']) && !empty($val['sub_button']) ? 1 : 0; $addData['name'] = $val['name']; $addData['menuKey'] = $merchantId . '_' . $key; $addData['createTime'] = $date; $addData['replyType'] = $redirectUrl;//回复类型:常用链接、自定义网址、文字、报名类活动 $addData['targetId'] = isset($val['keyName']) ? $mapped[$val['keyName']] : 0;//常用链接的链接选项id;活动id等 $addData['replyUrl'] = isset($val['url']) ? $val['url'] : ''; $parentMenu = self::add($addData); if (isset($val['sub_button']) && !empty($val['sub_button'])) { foreach ($val['sub_button'] as $sonKey => $sonVal) { $sonAddData = []; $sonAddData['parentId'] = $parentMenu['id']; $sonAddData['merchantId'] = $merchantId; $sonAddData['menuOrder'] = $sonKey; $sonAddData['menuOption'] = $sonVal['menuOption'];//回复类型 $sonAddData['hasSonMenu'] = 0; $sonAddData['name'] = $sonVal['name']; $sonAddData['menuKey'] = $merchantId . '_' . $key . '_' . $sonKey; $sonAddData['createTime'] = $date; $sonAddData['replyType'] = $redirectUrl;//回复类型:常用链接、自定义网址、文字、报名类活动 $sonAddData['targetId'] = isset($sonVal['keyName']) ? $mapped[$sonVal['keyName']] : 0;//常用链接的链接选项id;活动id等 $sonAddData['replyUrl'] = isset($sonVal['url']) ? $sonVal['url'] : ''; self::add($sonAddData); } } } return true; } return false; } public static function getByMenuKey($menuKey) { $cacheKey = configDict::getCacheKey('xhWxMenuKey') . $menuKey; $menu = Yii::$app->redis->executeCommand('HGETALL', [$cacheKey]); if (!empty($menu)) { $arr = []; $i = 0; $x = 0; foreach ($menu as $key => $val) { $i++; if ($i % 2 == 0) { $arr[$x]['value'] = $val; $x++; } else { $arr[$x]['key'] = $val; } } $menuArr = []; foreach ($arr as $key => $val) { $menuArr[$val['key']] = $val['value']; } unset($menuArr['info_already_get_by_sql']); return $menuArr; } $menu = xhWxMenu::find()->where(['menuKey' => $menuKey])->asArray()->one(); $params = [$cacheKey]; $params[] = 'info_already_get_by_sql'; $params[] = 'ok';//redis没有办法设置带空值的键,加此可以数据空时表示取过 if (!empty($menu)) { foreach ($menu as $key => $val) { $params[] = $key; $params[] = $val; } } Yii::$app->redis->executeCommand('HMSET', $params); return $menu; } public static function getMenuList($merchantId) { $cacheKey = configDict::getCacheKey('xhWxMenuList') . $merchantId; $menuString = Yii::$app->redis->executeCommand('GET', [$cacheKey]); if (empty($menuString)) { $list = self::getAllMenu($merchantId); $menuString = json_encode($list); Yii::$app->redis->executeCommand('SET', [$cacheKey, $menuString]); } else { $list = json_decode($menuString, true); } return $list; } /** * 取出商家所有菜单 */ public static function getAllMenu($merchantId, $getKeyName = false) { $list = self::getMenuById(0, $merchantId, $getKeyName); return $list; } /** * 根据菜单id取子菜单 * @return $getKeyName false 默认不带键名 true 返回带键名的 */ public static function getMenuById($parentId, $merchantId, $getKeyName = false) { $condition = ['parentId' => $parentId, 'merchantId' => $merchantId]; $wxMenu = xhWxMenu::getAllByCondition($condition, 'menuOrder asc'); $data = []; if (empty($wxMenu)) { return $data; } foreach ($wxMenu as $k => $v) { $id = $v['id']; $cate = [ 'id' => $id, 'name' => $v['name'], 'menuKey' => $v['menuKey'], 'menuOption' => $v['menuOption'], 'parentId' => $v['parentId'], 'merchantId' => $v['merchantId'], 'replyType' => $v['replyType'], 'replyUrl' => $v['replyUrl'], 'replyText' => $v['replyText'], 'targetId' => $v['targetId'], 'replyNews' => $v['replyNews'], 'replyMultiNews' => $v['replyMultiNews'], 'hasSonMenu' => $v['hasSonMenu'], 'menuOrder' => $v['menuOrder'], 'createTime' => $v['createTime'], 'updateTime' => $v['updateTime'], 'child' => self::getMenuById($id, $merchantId, $getKeyName), ]; if ($getKeyName) { $data[$id] = $cate; } else { $data[] = $cate; } } return $data; } public static function delMenuList($merchantId) { $menu = xhWxMenu::getAllByCondition(['merchantId' => $merchantId]); if (!empty($menu)) { foreach ($menu as $val) { $id = $val['id']; $menuKey = $val['menuKey']; xhWxMenu::deleteById($id); $cacheKey = configDict::getCacheKey('xhWxMenuKey') . $menuKey; Yii::$app->redis->executeCommand('DEL', [$cacheKey]); } } $cacheKey = configDict::getCacheKey('xhWxMenuList') . $merchantId; Yii::$app->redis->executeCommand('DEL', [$cacheKey]); } public static function add($data) { return xhWxMenu::add($data); } public static function getFormatData($wxMenuContent, $wxMenuOption, $merchant) { $addData = []; $wxMenuOptionList = configDict::getConfig('wxMenuOption'); $commonUseUrl = configDict::getConfig('commonUseUrl'); switch ($wxMenuOption) { case $wxMenuOptionList['redirectToCommonUseUrl']://链接到 常用链接 foreach ($commonUseUrl as $comKey => $comVal) { if ($comKey == $wxMenuContent) { $addData['replyUrl'] = Yii::$app->params['frontUrl'] . $comVal['url'] . '?account=' . $merchant['id']; $addData['targetId'] = $wxMenuContent; } } break; case $wxMenuOptionList['redirectToCustomUrl']://链接到-自定义网址 $addData['replyUrl'] = urldecode($wxMenuContent); break; case $wxMenuOptionList['showText']://链接到-文字 $addData['replyText'] = $wxMenuContent; break; case $wxMenuOptionList['redirectToActive']://链接到-报名类活动 $addData['targetId'] = $wxMenuContent; $addData['replyUrl'] = Yii::$app->params['frontUrl'] . '/pay/active?id=' . $wxMenuContent . '&account=' . $merchant['id']; break; default: } return $addData; } }