xhWxMenuService.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. namespace common\services;
  3. use Yii;
  4. use common\components\wxUtil;
  5. use common\components\util;
  6. use common\components\configDict;
  7. use common\models\xhWxMenu;
  8. class xhWxMenuService
  9. {
  10. /**
  11. * 初始化菜单
  12. */
  13. public static function applyInit($merchant)
  14. {
  15. $merchantId = $merchant['id'];
  16. self::delMenuList($merchantId);//删除之前存在的菜单
  17. $menuOption = configDict::getConfig('wxMenuOption');
  18. $button = [
  19. ["type" => 'view', "name" => "鲜花速递", "keyName" => "mall", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['frontUrl']],
  20. ["type" => 'view', "name" => "会员服务", "keyName" => "mall", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['frontUrl']],
  21. ["type" => 'view', "name" => "我的订单", "keyName" => "myOrder", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['frontUrl']],
  22. ];
  23. $merchantName = $merchant['merchantName'];
  24. if (in_array($merchantName, ['花美灵', '中花汇', '花卉宝', '花汇宝'])) {
  25. $button = [
  26. ["type" => 'view', "name" => "申请接入", "keyName" => "mall", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => Yii::$app->params['adminUrl']],
  27. ["type" => "view", "name" => "申请接入", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => Yii::$app->params['openUrl']],
  28. ["type" => "view", "name" => "申请公众号", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => Yii::$app->params['openUrl']],
  29. ];
  30. }
  31. $wxUtil = new wxUtil($merchant);
  32. $menuList = $button;
  33. foreach ($button as $key => $val) {
  34. unset($button[$key]['keyName']);
  35. }
  36. $menu['button'] = $button;
  37. $info = $wxUtil->userMenuToWeiXin($menu);
  38. $info = json_decode($info, true);
  39. xhMerchantExtendService::updateByMerchantId($merchantId, ['wxMenuInit' => 1]);
  40. $now = time();
  41. $date = date("Y-m-d H:i:s", $now);
  42. $mapped = configDict::getConfig('commonUseUrlMapped');
  43. $redirectUrl = configDict::getConfig('replyType', 'redirectUrl');//回复类型 跳转链接
  44. if ($info['errcode'] == 0) {
  45. foreach ($menuList as $key => $val) {
  46. $addData = [];
  47. $addData['parentId'] = 0;
  48. $addData['merchantId'] = $merchantId;
  49. $addData['menuOrder'] = $key;
  50. $addData['menuOption'] = $val['menuOption'];
  51. $addData['hasSonMenu'] = isset($val['sub_button']) && !empty($val['sub_button']) ? 1 : 0;
  52. $addData['name'] = $val['name'];
  53. $addData['menuKey'] = $merchantId . '_' . $key;
  54. $addData['createTime'] = $date;
  55. $addData['replyType'] = $redirectUrl;//回复类型:常用链接、自定义网址、文字、报名类活动
  56. $addData['targetId'] = isset($val['keyName']) ? $mapped[$val['keyName']] : 0;//常用链接的链接选项id;活动id等
  57. $addData['replyUrl'] = isset($val['url']) ? $val['url'] : '';
  58. $parentMenu = self::add($addData);
  59. if (isset($val['sub_button']) && !empty($val['sub_button'])) {
  60. foreach ($val['sub_button'] as $sonKey => $sonVal) {
  61. $sonAddData = [];
  62. $sonAddData['parentId'] = $parentMenu['id'];
  63. $sonAddData['merchantId'] = $merchantId;
  64. $sonAddData['menuOrder'] = $sonKey;
  65. $sonAddData['menuOption'] = $sonVal['menuOption'];//回复类型
  66. $sonAddData['hasSonMenu'] = 0;
  67. $sonAddData['name'] = $sonVal['name'];
  68. $sonAddData['menuKey'] = $merchantId . '_' . $key . '_' . $sonKey;
  69. $sonAddData['createTime'] = $date;
  70. $sonAddData['replyType'] = $redirectUrl;//回复类型:常用链接、自定义网址、文字、报名类活动
  71. $sonAddData['targetId'] = isset($sonVal['keyName']) ? $mapped[$sonVal['keyName']] : 0;//常用链接的链接选项id;活动id等
  72. $sonAddData['replyUrl'] = isset($sonVal['url']) ? $sonVal['url'] : '';
  73. self::add($sonAddData);
  74. }
  75. }
  76. }
  77. return true;
  78. }
  79. return false;
  80. }
  81. public static function getByMenuKey($menuKey)
  82. {
  83. return xhWxMenu::find()->where(['menuKey' => $menuKey])->asArray()->one();
  84. }
  85. public static function getMenuList($merchantId)
  86. {
  87. $list = self::getAllMenu($merchantId);
  88. return $list;
  89. }
  90. /**
  91. * 取出商家所有菜单
  92. */
  93. public static function getAllMenu($merchantId, $getKeyName = false)
  94. {
  95. $list = self::getMenuById(0, $merchantId, $getKeyName);
  96. return $list;
  97. }
  98. /**
  99. * 根据菜单id取子菜单
  100. * @return $getKeyName false 默认不带键名 true 返回带键名的
  101. */
  102. public static function getMenuById($parentId, $merchantId, $getKeyName = false)
  103. {
  104. $condition = ['parentId' => $parentId, 'merchantId' => $merchantId];
  105. $wxMenu = xhWxMenu::getAllByCondition($condition, 'menuOrder asc');
  106. $data = [];
  107. if (empty($wxMenu)) {
  108. return $data;
  109. }
  110. foreach ($wxMenu as $k => $v) {
  111. $id = $v['id'];
  112. $cate = [
  113. 'id' => $id,
  114. 'name' => $v['name'],
  115. 'menuKey' => $v['menuKey'],
  116. 'menuOption' => $v['menuOption'],
  117. 'parentId' => $v['parentId'],
  118. 'merchantId' => $v['merchantId'],
  119. 'replyType' => $v['replyType'],
  120. 'replyUrl' => $v['replyUrl'],
  121. 'replyText' => $v['replyText'],
  122. 'replyNews' => $v['replyNews'],
  123. 'replyMultiNews' => $v['replyMultiNews'],
  124. 'hasSonMenu' => $v['hasSonMenu'],
  125. 'menuOrder' => $v['menuOrder'],
  126. 'createTime' => $v['createTime'],
  127. 'updateTime' => $v['updateTime'],
  128. 'child' => self::getMenuById($id, $merchantId, $getKeyName),
  129. ];
  130. if ($getKeyName) {
  131. $data[$id] = $cate;
  132. } else {
  133. $data[] = $cate;
  134. }
  135. }
  136. return $data;
  137. }
  138. public static function delMenuList($merchantId)
  139. {
  140. xhWxMenu::deleteByCondition(['merchantId' => $merchantId]);
  141. }
  142. public static function add($data)
  143. {
  144. return xhWxMenu::add($data);
  145. }
  146. public static function getFormatData($wxMenuContent, $wxMenuOption, $merchant)
  147. {
  148. $addData = [];
  149. $wxMenuOptionList = configDict::getConfig('wxMenuOption');
  150. $commonUseUrl = configDict::getConfig('commonUseUrl');
  151. switch ($wxMenuOption) {
  152. case $wxMenuOptionList['redirectToCommonUseUrl']://跳转到常用链接
  153. foreach ($commonUseUrl as $comKey => $comVal) {
  154. if ($comKey == $wxMenuContent) {
  155. $addData['replyUrl'] = Yii::$app->params['frontUrl'] . $comVal['url'] . '?account=' . $merchant['id'];
  156. $addData['targetId'] = $wxMenuContent;
  157. }
  158. }
  159. break;
  160. case $wxMenuOptionList['redirectToCustomUrl']://跳转到自定义网址
  161. $addData['replyUrl'] = urldecode($wxMenuContent);
  162. break;
  163. case $wxMenuOptionList['showText']://回复文字
  164. $addData['replyText'] = $wxMenuContent;
  165. break;
  166. default:
  167. }
  168. return $addData;
  169. }
  170. }