xhWxMenuService.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <?php
  2. namespace common\services;
  3. use biz\message\services\TMessageService;
  4. use biz\wx\services\WxOpenService;
  5. use Yii;
  6. use common\components\wxUtil;
  7. use common\components\configDict;
  8. use common\models\xhWxMenu;
  9. class xhWxMenuService
  10. {
  11. /**
  12. * 初始化菜单
  13. */
  14. public static function applyInit($merchant, $isOpen = 0)
  15. {
  16. $merchantId = isset($merchant['id']) ? $merchant['id'] : 0;
  17. //删除之前存在的菜单
  18. self::delMenuList($merchantId);
  19. $menuOption = configDict::getConfig('wxMenuOption');
  20. $mallDomain = Yii::$app->params['mallDomain'];
  21. $shopDomain = Yii::$app->params['shopDomain'];
  22. //强制转成https方式
  23. if (strpos($mallDomain, 'https') === false) {
  24. $mallDomain = str_replace('http', 'https', $mallDomain);
  25. $shopDomain = str_replace('http', 'https', $shopDomain);
  26. }
  27. if ($isOpen == 0) {
  28. // $button = [
  29. // ["type" => 'view', "name" => "鲜花速递", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => $mallDomain . '/#/?account=' . $merchantId,],
  30. // ["type" => 'view', "name" => "会员服务", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => $mallDomain . '/#/?account=' . $merchantId,],
  31. // ["type" => 'view', "name" => "我的订单", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => $mallDomain . '/#/?account=' . $merchantId,],
  32. // ];
  33. $button = [
  34. ["type" => 'miniprogram', "name" => "鲜花速递", "appid" => $merchant['miniAppId'], "pagepath" => "pages/home/index", "url" => $mallDomain . '/#/?account=' . $merchantId,],
  35. ["type" => 'miniprogram', "name" => "会员服务", "appid" => $merchant['miniAppId'], "pagepath" => "pages/home/user", "url" => $mallDomain . '/#/?account=' . $merchantId,],
  36. ["type" => 'miniprogram', "name" => "我的订单", "appid" => $merchant['miniAppId'], "pagepath" => "pages/order/list", "url" => $mallDomain . '/#/?account=' . $merchantId,],
  37. ];
  38. if ($merchantId == 12358) {
  39. $menuOption = configDict::getConfig('wxMenuOption');
  40. $button = [
  41. ["type" => 'miniprogram', "name" => "鲜花速递", "appid" => $merchant['miniAppId'], "pagepath" => "pages/home/index", "url" => $mallDomain . '/#/?account=' . $merchantId,],
  42. ["type" => "view", "name" => "国兰花尚", "keyName" => "glhsSchool", "menuOption" => $menuOption['redirectToCommonUseUrl'], "sub_button" => [
  43. ["type" => "view", "name" => "联系我们", "keyName" => "callUs", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => 'https://mp.weixin.qq.com/s/-jFCr2TcmMc0SDflSqZKCA',],
  44. ["type" => "view", "name" => "品牌介绍", "keyName" => "aboutUs", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => 'https://mp.weixin.qq.com/s/C_Vv9Cq48i8vNRK-P8VegQ',],
  45. ["type" => 'miniprogram', "name" => "我的会员", "appid" => $merchant['miniAppId'], "pagepath" => "pages/home/user", "url" => $mallDomain . '/#/?account=' . $merchantId,],
  46. ]],
  47. ["type" => "view", "name" => "花艺培训", "keyName" => "hyTrain", "menuOption" => $menuOption['redirectToCommonUseUrl'], "sub_button" => [
  48. ["type" => "view", "name" => "名师风采", "keyName" => "teacher", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => 'http://m.fjglhs.com/main/teacher',],
  49. ["type" => "view", "name" => "培训课程", "keyName" => "course", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => 'http://m.fjglhs.com/main/course',],
  50. ["type" => "view", "name" => "学员天地", "keyName" => "student", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => 'http://m.fjglhs.com/main/student',],
  51. ["type" => "view", "name" => "首页", "keyName" => "index", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => 'http://m.fjglhs.com',],
  52. ]],
  53. ];
  54. }
  55. } else {
  56. // $button = [
  57. // ["type" => "view", "name" => "官网", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => $mallDomain . '/#/?account=' . $merchantId,],
  58. // ["type" => "view", "name" => "后台", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => $mallDomain . '/#/?account=' . $merchantId,],
  59. // ];
  60. $button = [
  61. ["type" => 'miniprogram', "name" => "官网", "appid" => $merchant['miniAppId'], "pagepath" => "admin/official/index", "url" => $mallDomain . '/#/?account=' . $merchantId,],
  62. ["type" => 'miniprogram', "name" => "后台", "appid" => $merchant['miniAppId'], "pagepath" => "admin/home/console", "url" => $mallDomain . '/#/?account=' . $merchantId,],
  63. ];
  64. }
  65. $wxUtil = new wxUtil($merchant);
  66. $menuList = $button;
  67. foreach ($button as $key => $val) {
  68. unset($button[$key]['keyName']);
  69. }
  70. $menu['button'] = $button;
  71. $info = $wxUtil->userMenuToWeiXin($menu);
  72. $info = json_decode($info, true);
  73. print_r($info);
  74. die;
  75. xhMerchantExtendService::updateByMerchantId($merchantId, ['wxMenuInit' => 1]);
  76. $now = time();
  77. $date = date("Y-m-d H:i:s", $now);
  78. $mapped = configDict::getConfig('commonUseUrlMapped');
  79. $redirectUrl = configDict::getConfig('replyType', 'redirectUrl');//回复类型 跳转链接
  80. if ($info['errcode'] != 0) {
  81. return false;
  82. }
  83. foreach ($menuList as $key => $val) {
  84. $addData = [];
  85. $addData['parentId'] = 0;
  86. $addData['merchantId'] = $merchantId;
  87. $addData['menuOrder'] = $key;
  88. $addData['menuOption'] = $val['menuOption'];
  89. $addData['hasSonMenu'] = isset($val['sub_button']) && !empty($val['sub_button']) ? 1 : 0;
  90. $addData['name'] = $val['name'];
  91. $addData['menuKey'] = $merchantId . '_' . $key;
  92. $addData['createTime'] = $date;
  93. $addData['replyType'] = $redirectUrl;//回复类型:常用链接、自定义网址、文字、报名类活动
  94. $addData['targetId'] = isset($val['keyName']) ? $mapped[$val['keyName']] : 0;//常用链接的链接选项id;活动id等
  95. $addData['replyUrl'] = isset($val['url']) ? $val['url'] : '';
  96. $parentMenu = self::add($addData);
  97. if (isset($val['sub_button']) && !empty($val['sub_button'])) {
  98. foreach ($val['sub_button'] as $sonKey => $sonVal) {
  99. $sonAddData = [];
  100. $sonAddData['parentId'] = $parentMenu['id'];
  101. $sonAddData['merchantId'] = $merchantId;
  102. $sonAddData['menuOrder'] = $sonKey;
  103. $sonAddData['menuOption'] = $sonVal['menuOption'];//回复类型
  104. $sonAddData['hasSonMenu'] = 0;
  105. $sonAddData['name'] = $sonVal['name'];
  106. $sonAddData['menuKey'] = $merchantId . '_' . $key . '_' . $sonKey;
  107. $sonAddData['createTime'] = $date;
  108. $sonAddData['replyType'] = $redirectUrl;//回复类型:常用链接、自定义网址、文字、报名类活动
  109. $sonAddData['targetId'] = isset($sonVal['keyName']) ? $mapped[$sonVal['keyName']] : 0;//常用链接选项id、活动id
  110. $sonAddData['replyUrl'] = isset($sonVal['url']) ? $sonVal['url'] : '';
  111. self::add($sonAddData);
  112. }
  113. }
  114. }
  115. return true;
  116. }
  117. public static function getByMenuKey($menuKey)
  118. {
  119. return xhWxMenu::find()->where(['menuKey' => $menuKey])->asArray()->one();
  120. }
  121. public static function getMenuList($merchantId)
  122. {
  123. $list = self::getAllMenu($merchantId);
  124. return $list;
  125. }
  126. /**
  127. * 取出商家所有菜单
  128. */
  129. public static function getAllMenu($merchantId, $getKeyName = false)
  130. {
  131. $list = self::getMenuById(0, $merchantId, $getKeyName);
  132. return $list;
  133. }
  134. /**
  135. * 根据菜单id取子菜单
  136. * $getKeyName false 默认不带键名 true 返回带键名的
  137. */
  138. public static function getMenuById($parentId, $merchantId, $getKeyName = false)
  139. {
  140. $condition = ['parentId' => $parentId, 'merchantId' => $merchantId];
  141. $wxMenu = xhWxMenu::getAllByCondition($condition, 'menuOrder asc');
  142. $data = [];
  143. if (empty($wxMenu)) {
  144. return $data;
  145. }
  146. foreach ($wxMenu as $k => $v) {
  147. $id = $v['id'];
  148. $cate = [
  149. 'id' => $id,
  150. 'name' => $v['name'],
  151. 'menuKey' => $v['menuKey'],
  152. 'menuOption' => $v['menuOption'],
  153. 'parentId' => $v['parentId'],
  154. 'merchantId' => $v['merchantId'],
  155. 'replyType' => $v['replyType'],
  156. 'replyUrl' => $v['replyUrl'],
  157. 'replyText' => $v['replyText'],
  158. 'replyNews' => $v['replyNews'],
  159. 'replyMultiNews' => $v['replyMultiNews'],
  160. 'hasSonMenu' => $v['hasSonMenu'],
  161. 'menuOrder' => $v['menuOrder'],
  162. 'createTime' => $v['createTime'],
  163. 'updateTime' => $v['updateTime'],
  164. 'child' => self::getMenuById($id, $merchantId, $getKeyName),
  165. ];
  166. if ($getKeyName) {
  167. $data[$id] = $cate;
  168. } else {
  169. $data[] = $cate;
  170. }
  171. }
  172. return $data;
  173. }
  174. public static function delMenuList($merchantId)
  175. {
  176. xhWxMenu::deleteByCondition(['merchantId' => $merchantId]);
  177. }
  178. public static function add($data)
  179. {
  180. return xhWxMenu::add($data);
  181. }
  182. public static function getFormatData($wxMenuContent, $wxMenuOption, $merchant)
  183. {
  184. $addData = [];
  185. $wxMenuOptionList = configDict::getConfig('wxMenuOption');
  186. $commonUseUrl = configDict::getConfig('commonUseUrl');
  187. switch ($wxMenuOption) {
  188. case $wxMenuOptionList['redirectToCommonUseUrl']://跳转到常用链接
  189. foreach ($commonUseUrl as $comKey => $comVal) {
  190. if ($comKey == $wxMenuContent) {
  191. $addData['replyUrl'] = Yii::$app->params['frontUrl'] . $comVal['url'] . '?account=' . $merchant['id'];
  192. $addData['targetId'] = $wxMenuContent;
  193. }
  194. }
  195. break;
  196. case $wxMenuOptionList['redirectToCustomUrl']://跳转到自定义网址
  197. $addData['replyUrl'] = urldecode($wxMenuContent);
  198. break;
  199. case $wxMenuOptionList['showText']://回复文字
  200. $addData['replyText'] = $wxMenuContent;
  201. break;
  202. default:
  203. }
  204. return $addData;
  205. }
  206. }