xhWxMenuService.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. namespace common\services;
  3. use biz\message\services\TMessageService;
  4. use biz\weixin\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)
  15. {
  16. $merchantId = $merchant['id'];
  17. //删除之前存在的菜单
  18. self::delMenuList($merchantId);
  19. $menuOption = configDict::getConfig('wxMenuOption');
  20. $mDomain = Yii::$app->params['mDomain'];
  21. $wDomain = Yii::$app->params['wDomain'];
  22. $bDomain = Yii::$app->params['bDomain'];
  23. //强制使用https方式
  24. if (strpos($mDomain, 'https') === false) {
  25. $mDomain = str_replace('http', 'https', $mDomain);
  26. $wDomain = str_replace('http', 'https', $wDomain);
  27. $bDomain = str_replace('http', 'https', $bDomain);
  28. }
  29. $button = [
  30. ["type" => 'view', "name" => "鲜花速递", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => $mDomain . '/#/?account=' . $merchantId,],
  31. ["type" => 'view', "name" => "会员服务", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => $mDomain . '/#/?account=' . $merchantId,],
  32. ["type" => 'view', "name" => "我的订单", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => $mDomain . '/#/?account=' . $merchantId,],
  33. ];
  34. $open = WxOpenService::getById(1);
  35. //平台使用的公众号菜单与花店公众号菜单不一样
  36. if (isset($open['merchantId']) && $open['merchantId'] == $merchantId) {
  37. $button = [
  38. ["type" => 'view', "name" => "官网", "menuOption" => $menuOption['redirectToCommonUseUrl'], "url" => $wDomain],
  39. ["type" => "view", "name" => "商城", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => $mDomain . '/#/?account=' . $merchantId,],
  40. ["type" => "view", "name" => "更多", "menuOption" => $menuOption['redirectToCommonUseUrl'], "sub_button" => [
  41. ["type" => "view", "name" => "快速付款", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => $mDomain . '/#/pages/pay/index?account=' . $merchantId],
  42. ["type" => "view", "name" => "后台", "menuOption" => $menuOption['redirectToCustomUrl'], "url" => $bDomain . '/#/?account=' . $merchantId],
  43. ],],
  44. ];
  45. }
  46. $wxUtil = new wxUtil($merchant);
  47. $menuList = $button;
  48. foreach ($button as $key => $val) {
  49. unset($button[$key]['keyName']);
  50. }
  51. $menu['button'] = $button;
  52. $info = $wxUtil->userMenuToWeiXin($menu);
  53. $info = json_decode($info, true);
  54. xhMerchantExtendService::updateByMerchantId($merchantId, ['wxMenuInit' => 1]);
  55. $now = time();
  56. $date = date("Y-m-d H:i:s", $now);
  57. $mapped = configDict::getConfig('commonUseUrlMapped');
  58. $redirectUrl = configDict::getConfig('replyType', 'redirectUrl');//回复类型 跳转链接
  59. if ($info['errcode'] != 0) {
  60. return false;
  61. }
  62. foreach ($menuList as $key => $val) {
  63. $addData = [];
  64. $addData['parentId'] = 0;
  65. $addData['merchantId'] = $merchantId;
  66. $addData['menuOrder'] = $key;
  67. $addData['menuOption'] = $val['menuOption'];
  68. $addData['hasSonMenu'] = isset($val['sub_button']) && !empty($val['sub_button']) ? 1 : 0;
  69. $addData['name'] = $val['name'];
  70. $addData['menuKey'] = $merchantId . '_' . $key;
  71. $addData['createTime'] = $date;
  72. $addData['replyType'] = $redirectUrl;//回复类型:常用链接、自定义网址、文字、报名类活动
  73. $addData['targetId'] = isset($val['keyName']) ? $mapped[$val['keyName']] : 0;//常用链接的链接选项id;活动id等
  74. $addData['replyUrl'] = isset($val['url']) ? $val['url'] : '';
  75. $parentMenu = self::add($addData);
  76. if (isset($val['sub_button']) && !empty($val['sub_button'])) {
  77. foreach ($val['sub_button'] as $sonKey => $sonVal) {
  78. $sonAddData = [];
  79. $sonAddData['parentId'] = $parentMenu['id'];
  80. $sonAddData['merchantId'] = $merchantId;
  81. $sonAddData['menuOrder'] = $sonKey;
  82. $sonAddData['menuOption'] = $sonVal['menuOption'];//回复类型
  83. $sonAddData['hasSonMenu'] = 0;
  84. $sonAddData['name'] = $sonVal['name'];
  85. $sonAddData['menuKey'] = $merchantId . '_' . $key . '_' . $sonKey;
  86. $sonAddData['createTime'] = $date;
  87. $sonAddData['replyType'] = $redirectUrl;//回复类型:常用链接、自定义网址、文字、报名类活动
  88. $sonAddData['targetId'] = isset($sonVal['keyName']) ? $mapped[$sonVal['keyName']] : 0;//常用链接的链接选项id;活动id等
  89. $sonAddData['replyUrl'] = isset($sonVal['url']) ? $sonVal['url'] : '';
  90. self::add($sonAddData);
  91. }
  92. }
  93. }
  94. return true;
  95. }
  96. public static function getByMenuKey($menuKey)
  97. {
  98. return xhWxMenu::find()->where(['menuKey' => $menuKey])->asArray()->one();
  99. }
  100. public static function getMenuList($merchantId)
  101. {
  102. $list = self::getAllMenu($merchantId);
  103. return $list;
  104. }
  105. /**
  106. * 取出商家所有菜单
  107. */
  108. public static function getAllMenu($merchantId, $getKeyName = false)
  109. {
  110. $list = self::getMenuById(0, $merchantId, $getKeyName);
  111. return $list;
  112. }
  113. /**
  114. * 根据菜单id取子菜单
  115. * $getKeyName false 默认不带键名 true 返回带键名的
  116. */
  117. public static function getMenuById($parentId, $merchantId, $getKeyName = false)
  118. {
  119. $condition = ['parentId' => $parentId, 'merchantId' => $merchantId];
  120. $wxMenu = xhWxMenu::getAllByCondition($condition, 'menuOrder asc');
  121. $data = [];
  122. if (empty($wxMenu)) {
  123. return $data;
  124. }
  125. foreach ($wxMenu as $k => $v) {
  126. $id = $v['id'];
  127. $cate = [
  128. 'id' => $id,
  129. 'name' => $v['name'],
  130. 'menuKey' => $v['menuKey'],
  131. 'menuOption' => $v['menuOption'],
  132. 'parentId' => $v['parentId'],
  133. 'merchantId' => $v['merchantId'],
  134. 'replyType' => $v['replyType'],
  135. 'replyUrl' => $v['replyUrl'],
  136. 'replyText' => $v['replyText'],
  137. 'replyNews' => $v['replyNews'],
  138. 'replyMultiNews' => $v['replyMultiNews'],
  139. 'hasSonMenu' => $v['hasSonMenu'],
  140. 'menuOrder' => $v['menuOrder'],
  141. 'createTime' => $v['createTime'],
  142. 'updateTime' => $v['updateTime'],
  143. 'child' => self::getMenuById($id, $merchantId, $getKeyName),
  144. ];
  145. if ($getKeyName) {
  146. $data[$id] = $cate;
  147. } else {
  148. $data[] = $cate;
  149. }
  150. }
  151. return $data;
  152. }
  153. public static function delMenuList($merchantId)
  154. {
  155. xhWxMenu::deleteByCondition(['merchantId' => $merchantId]);
  156. }
  157. public static function add($data)
  158. {
  159. return xhWxMenu::add($data);
  160. }
  161. public static function getFormatData($wxMenuContent, $wxMenuOption, $merchant)
  162. {
  163. $addData = [];
  164. $wxMenuOptionList = configDict::getConfig('wxMenuOption');
  165. $commonUseUrl = configDict::getConfig('commonUseUrl');
  166. switch ($wxMenuOption) {
  167. case $wxMenuOptionList['redirectToCommonUseUrl']://跳转到常用链接
  168. foreach ($commonUseUrl as $comKey => $comVal) {
  169. if ($comKey == $wxMenuContent) {
  170. $addData['replyUrl'] = Yii::$app->params['frontUrl'] . $comVal['url'] . '?account=' . $merchant['id'];
  171. $addData['targetId'] = $wxMenuContent;
  172. }
  173. }
  174. break;
  175. case $wxMenuOptionList['redirectToCustomUrl']://跳转到自定义网址
  176. $addData['replyUrl'] = urldecode($wxMenuContent);
  177. break;
  178. case $wxMenuOptionList['showText']://回复文字
  179. $addData['replyText'] = $wxMenuContent;
  180. break;
  181. default:
  182. }
  183. return $addData;
  184. }
  185. }