WechatMenuController.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. /**
  3. * 微信公众号自定义菜单
  4. * @file:WechatMenuController.php
  5. * @Date: 2023/7/5
  6. * @Time: 15:01
  7. */
  8. namespace Modules\WechatPlatform\Http\Controllers;
  9. use Catch\Base\CatchController;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\DB;
  12. use Modules\Channel\Services\WechatOpenPlatform\WechatOpenPlatformService;
  13. use Modules\Manage\Enmus\MiniprogramType;
  14. use Modules\User\Http\Controllers\UserTrait;
  15. use Modules\WechatPlatform\Http\Requests\WechatMenuRequest;
  16. use Modules\WechatPlatform\Services\WechatMenuService;
  17. class WechatMenuController extends CatchController
  18. {
  19. use UserTrait;
  20. /**
  21. * 关键词列表
  22. * name: List
  23. * @param Request $request
  24. * date 2023/07/05 15:10
  25. */
  26. public function List(Request $request)
  27. {
  28. $param = $request->all();
  29. if(!getProp($param,'miniprogram_id')){
  30. WechatMenuService::throwErrMsg("没有绑定小程序");
  31. }
  32. $userContext = $this->getUserContext(null);
  33. $param['user_id'] = $userContext['loginUser']->id;
  34. $param['puser_id'] = $userContext['loginUser']->pid;
  35. return WechatMenuService::list($param);
  36. }
  37. public function add(WechatMenuRequest $request)
  38. {
  39. $param = $request->validated();
  40. $param['msg_content'] = $request->input('msg_content');
  41. $param = $this->handleParam($param);
  42. $userContext = $this->getUserContext(null);
  43. $param['user_id'] = $userContext['loginUser']->id;
  44. $param['puser_id'] = $userContext['loginUser']->pid;
  45. $param['wechat_accounts'] = [];
  46. return WechatMenuService::addMenu($param);
  47. }
  48. public function edit($id, WechatMenuRequest $request)
  49. {
  50. $param = $request->validated();
  51. $param['msg_content'] = $request->input('msg_content');
  52. $param = $this->handleParam($param);
  53. return WechatMenuService::updateMenu($id, $param);
  54. }
  55. public function detail($id)
  56. {
  57. return WechatMenuService::detail($id);
  58. }
  59. public function authList($id)
  60. {
  61. $userId = $this->getLoginUserId();
  62. return WechatMenuService::authList($id, $userId);
  63. }
  64. public function del(Request $request)
  65. {
  66. $ids = $request->input('ids');
  67. if (empty($ids)) {
  68. WechatMenuService::throwErrMsg('要删除的数据参数错误');
  69. }
  70. $ids = explode(',', $ids);
  71. return WechatMenuService::del($ids);
  72. }
  73. /**
  74. * 分配
  75. * name: allocation
  76. * @param $id
  77. * date 2023/07/12 07:18
  78. */
  79. public function allocation($id, Request $request)
  80. {
  81. if (!$request->has('wx_auth_ids')) {
  82. WechatMenuService::throwErrMsg("参数错误");
  83. }
  84. if (!empty($request->input('wx_auth_ids'))) {
  85. $wxAuthIds = explode(',', $request->input('wx_auth_ids'));
  86. } else {
  87. $wxAuthIds = [];
  88. }
  89. return WechatMenuService::allocation($id, $wxAuthIds);
  90. }
  91. // 处理参数
  92. private function handleParam($param)
  93. {
  94. $info = DB::table('miniprogram')->where('id', $param['miniprogram_id'])->first();
  95. if (empty($info)) {
  96. WechatMenuService::throwErrMsg("小程序不正确");
  97. }
  98. if ($info->status != 1) {
  99. WechatMenuService::throwErrMsg("此小程序暂不提供使用");
  100. }
  101. if ($info->type != MiniprogramType::WEIXIN->value()) {
  102. WechatMenuService::throwErrMsg("关键词回复设置仅支持微信小程序");
  103. }
  104. $param['miniprogram_appid'] = $info->appid;
  105. $info = DB::table('user_has_miniprograms')->where('uid', $this->getLoginUserId())->where('miniprogram_id', $param['miniprogram_id'])->where('is_enabled', 1)->value('id');
  106. if (empty($info)) {
  107. WechatMenuService::throwErrMsg("没有此小程序的使用权限");
  108. }
  109. if (count($param['content']) > 3) {
  110. WechatMenuService::throwErrMsg("底部菜单不能超过3个");
  111. }
  112. // $clicks = [];
  113. $msgContent = [];
  114. foreach ($param['content'] as &$val) {
  115. if (!empty(getProp($val, 'sub_button'))) {
  116. foreach ($val['sub_button'] as &$sub) {
  117. if (getProp($sub, 'type') == 'miniprogram') {
  118. $sub['appid'] = $param['miniprogram_appid'];
  119. $sub['pagepath'] = $sub['url'];
  120. }
  121. if (getProp($sub, 'type') == 'click') {
  122. // $clicks[] = $sub['key'];
  123. $msgContent[] = [$sub['key'] => $sub['content']];
  124. }
  125. }
  126. } else {
  127. if (getProp($val, 'type') == 'miniprogram') {
  128. $val['appid'] = $param['miniprogram_appid'];
  129. $val['pagepath'] = $val['url'];
  130. }
  131. if (getProp($val, 'type') == 'click') {
  132. // $clicks[] = $val['key'];
  133. $msgContent[] = [$val['key'] => $val['content']];
  134. }
  135. if (getProp($val, 'type') == 'view') {
  136. unset($val['url']);
  137. }
  138. }
  139. }
  140. $param['msg_content'] = $msgContent;
  141. // unset($val,$sub,$info);
  142. // // 有点击事件
  143. // if (!empty($clicks)){
  144. // $msgContent = [];
  145. // $msg = getProp($param,'msg_content');
  146. // if (empty($msg) || !is_array($msg)){
  147. // WechatMenuService::throwErrMsg("发送的文本信息不能为空");
  148. // }
  149. // foreach ($clicks as $val){
  150. // $temp = getProp($msg,$val);
  151. // if (empty($temp) || !is_array($temp)){
  152. // WechatMenuService::throwErrMsg("发送的文本信息格式不正确");
  153. // }
  154. // $contents = "";
  155. // foreach ($temp as & $item){
  156. // if (getProp($item,'url')){
  157. // $item['content'] = "<a href=\"\" data-miniprogram-appid=\"{$param['miniprogram_appid']}\" data-miniprogram-path=\"{$item['url']}\">{$item['title']}</a>";
  158. // }else{
  159. // $item['content'] = $item['title'];
  160. // }
  161. // $contents = $contents.$item['content']."\n";
  162. // }
  163. //
  164. // rtrim($contents, "\n");
  165. // $temp['content'] = $contents;
  166. // $msgContent = [$val => $temp];
  167. // }
  168. // $param['msg_content'] = $msgContent;
  169. // unset($msgContent);
  170. // unset($temp,$val,$item);
  171. // }else{
  172. // $param['msg_content']= [];
  173. // }
  174. return $param;
  175. }
  176. public function test()
  177. {
  178. // return WechatMenuService::getClickInfoContent(8,'1-3');
  179. }
  180. }