diff --git a/crmeb/app/services/message/wechat/MessageServices.php b/crmeb/app/services/message/wechat/MessageServices.php index dea981138..85788eecb 100644 --- a/crmeb/app/services/message/wechat/MessageServices.php +++ b/crmeb/app/services/message/wechat/MessageServices.php @@ -29,10 +29,17 @@ use think\facade\Log; class MessageServices extends BaseServices { + /** * 扫码 * @param $message - * @return array|\EasyWeChat\Message\Image|\EasyWeChat\Message\News|\EasyWeChat\Message\Text|\EasyWeChat\Message\Voice|string + * @return array|\EasyWeChat\Message\Image|\EasyWeChat\Message\News|\EasyWeChat\Message\Text|\EasyWeChat\Message\Transfer|\EasyWeChat\Message\Voice|mixed|string + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author 吴汐 + * @email 442384644@qq.com + * @date 2023/02/24 */ public function wechatEventScan($message) { @@ -203,98 +210,170 @@ class MessageServices extends BaseServices $wechatUser->unSubscribe($message->FromUserName); } - /** * 公众号关注 * @param $message - * @return array|\EasyWeChat\Message\Image|\EasyWeChat\Message\News|\EasyWeChat\Message\Text|\EasyWeChat\Message\Voice|string + * @return array|\EasyWeChat\Message\Image|\EasyWeChat\Message\News|\EasyWeChat\Message\Text|\EasyWeChat\Message\Transfer|\EasyWeChat\Message\Voice|mixed|string + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author 吴汐 + * @email 442384644@qq.com + * @date 2023/02/24 */ public function wechatEventSubscribe($message) { + /** @var QrcodeServices $qrcodeService */ + $qrcodeService = app()->make(QrcodeServices::class); /** @var WechatReplyServices $wechatReplyService */ $wechatReplyService = app()->make(WechatReplyServices::class); /** @var WechatUserServices $wechatUser */ $wechatUser = app()->make(WechatUserServices::class); - /** @var UserServices $userService */ - $userService = app()->make(UserServices::class); /** @var LoginServices $loginService */ $loginService = app()->make(LoginServices::class); + /** @var UserServices $userService */ + $userService = app()->make(UserServices::class); $response = $wechatReplyService->reply('subscribe'); - if (isset($message->EventKey)) { - /** @var QrcodeServices $qrcodeService */ - $qrcodeService = app()->make(QrcodeServices::class); - if ($message->EventKey && ($qrInfo = $qrcodeService->getQrcode($message->Ticket, 'ticket'))) { - $qrcodeService->scanQrcode($message->Ticket, 'ticket'); - if (strtolower($qrInfo['third_type']) == 'spread') { - try { - $spreadUid = $qrInfo['third_id']; - $wechatUser->saveUser($message->FromUserName); - $uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']); - if ($spreadUid == $uid) return '自己不能推荐自己'; - $userInfo = $userService->get($uid); - if ($userInfo['spread_uid']) return '已有推荐人!'; - $userInfo->spread_uid = $spreadUid; - $userInfo->spread_time = time(); - if (!$userInfo->save()) { - return '绑定推荐人失败!'; - } - } catch (\Exception $e) { - $response = $e->getMessage(); - } - } - } - if (strtolower($qrInfo['third_type']) == 'agent') { + if ($message->EventKey && ($qrInfo = $qrcodeService->getQrcode($message->Ticket, 'ticket'))) { + $qrcodeService->scanQrcode($message->Ticket, 'ticket'); + $thirdType = explode('-', $qrInfo['third_type']); + $baseUrl = sys_config('site_url'); + if (in_array(strtolower($thirdType[0]), ['spread', 'agent', 'wechatqrcode', 'product', 'combination', 'seckill', 'bargain', 'pink'])) { + //扫码需要生成用户流程 + $spreadUid = $qrInfo['third_id']; + $spreadInfo = $userService->get($spreadUid); + $is_new = $wechatUser->saveUser($message->FromUserName); + $uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']); + $userInfo = $userService->get($uid); try { - $spreadUid = $qrInfo['third_id']; - $spreadInfo = $userService->get($spreadUid); - $is_new = $wechatUser->saveUser($message->FromUserName); - $uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']); - $userInfo = $userService->get($uid); - if ($spreadUid == $uid) { - $response = '自己不能推荐自己'; - } else if (!$userInfo) { - $response = '用户不存在'; - } else if (!$spreadInfo) { - $response = '上级用户不存在'; - } else if ($userInfo->is_division) { - $response = '您是事业部,不能绑定成为别人的员工'; - } else if ($userInfo->is_agent) { - $response = '您是代理商,不能绑定成为别人的员工'; - } else if ($loginService->updateUserInfo(['code' => $spreadUid, 'is_staff' => 1], $userInfo, $is_new)) { - $response = '绑定店员成功!'; + switch (strtolower($thirdType[0])) { + case 'spread': + if ($spreadUid == $uid) { + $response = '自己不能推荐自己'; + } else if (!$userInfo) { + $response = '用户不存在'; + } else if (!$spreadInfo) { + $response = '上级用户不存在'; + } else if ($userInfo['spread_uid']) { + $response = '已有推荐人!'; + } else if (!$loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new)) { + $response = '绑定推荐人失败!'; + } + $wechatNews['title'] = sys_config('site_name'); + $wechatNews['image'] = sys_config('wap_login_logo'); + $wechatNews['url'] = $baseUrl . '/pages/index/index'; + $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new); + $messages = WechatService::newsMessage($wechatNews); + WechatService::staffService()->message($messages)->to($message->FromUserName)->send(); + break; + case 'agent': + if ($spreadUid == $uid) { + $response = '自己不能推荐自己'; + } else if (!$userInfo) { + $response = '用户不存在'; + } else if (!$spreadInfo) { + $response = '上级用户不存在'; + } else if ($userInfo->is_division) { + $response = '您是事业部,不能绑定成为别人的员工'; + } else if ($userInfo->is_agent) { + $response = '您是代理商,不能绑定成为别人的员工'; + } else if ($loginService->updateUserInfo(['code' => $spreadUid, 'is_staff' => 1], $userInfo, $is_new)) { + $response = '绑定店员成功!'; + } + break; + case 'wechatqrcode': + /** @var WechatQrcodeServices $wechatQrcodeService */ + $wechatQrcodeService = app()->make(WechatQrcodeServices::class); + //wechatqrcode类型的二维码数据中,third_id为渠道码的id + $qrcodeInfo = $wechatQrcodeService->qrcodeInfo($qrInfo['third_id']); + $spreadUid = $qrcodeInfo['uid']; + $spreadInfo = $userService->get($spreadUid); + $is_new = $wechatUser->saveUser($message->FromUserName); + $uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']); + $userInfo = $userService->get($uid); + if ($qrcodeInfo['status'] == 0 || $qrcodeInfo['is_del'] == 1 || ($qrcodeInfo['end_time'] < time() && $qrcodeInfo['end_time'] > 0)) { + $response = '二维码已失效'; + } else if ($spreadUid == $uid) { + $response = '自己不能推荐自己'; + } else if (!$userInfo) { + $response = '用户不存在'; + } else if (!$spreadInfo) { + $response = '上级用户不存在'; + } else if ($loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new)) { + //写入扫码记录,返回内容 + $response = $wechatQrcodeService->wechatQrcodeRecord($qrcodeInfo, $userInfo, $spreadInfo); + } + break; + case 'product': + /** @var StoreProductServices $productService */ + $productService = app()->make(StoreProductServices::class); + $productInfo = $productService->get($thirdType[1] ?? 0); + $wechatNews['title'] = $productInfo->store_name; + $wechatNews['image'] = $productInfo->image; + $wechatNews['description'] = $productInfo->store_info; + $wechatNews['url'] = $baseUrl . '/pages/goods_details/index?id=' . $thirdType[1]; + $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new); + $messages = WechatService::newsMessage($wechatNews); + WechatService::staffService()->message($messages)->to($message->FromUserName)->send(); + break; + case 'combination': + /** @var StoreCombinationServices $combinationService */ + $combinationService = app()->make(StoreCombinationServices::class); + $productInfo = $combinationService->get($thirdType[1] ?? 0); + $wechatNews['title'] = $productInfo->title; + $wechatNews['image'] = $productInfo->image; + $wechatNews['description'] = $productInfo->info; + $wechatNews['url'] = $baseUrl . '/pages/activity/goods_combination_details/index?id=' . $thirdType[1]; + $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new); + $messages = WechatService::newsMessage($wechatNews); + WechatService::staffService()->message($messages)->to($message->FromUserName)->send(); + break; + case 'seckill': + /** @var StoreSeckillServices $seckillService */ + $seckillService = app()->make(StoreSeckillServices::class); + $productInfo = $seckillService->get($thirdType[1] ?? 0); + $wechatNews['title'] = $productInfo->title; + $wechatNews['image'] = $productInfo->image; + $wechatNews['description'] = $productInfo->info; + $wechatNews['url'] = $baseUrl . '/pages/activity/goods_seckill_details/index?id=' . $thirdType[1]; + $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new); + $messages = WechatService::newsMessage($wechatNews); + WechatService::staffService()->message($messages)->to($message->FromUserName)->send(); + break; + case 'bargain': + /** @var StoreBargainServices $bargainService */ + $bargainService = app()->make(StoreBargainServices::class); + $productInfo = $bargainService->get($thirdType[1] ?? 0); + $wechatNews['title'] = $productInfo->title; + $wechatNews['image'] = $productInfo->image; + $wechatNews['description'] = $productInfo->info; + $wechatNews['url'] = $baseUrl . '/pages/activity/goods_bargain_details/index?id=' . $thirdType[1] . '&bargain=' . $thirdType[2]; + $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new); + $messages = WechatService::newsMessage($wechatNews); + WechatService::staffService()->message($messages)->to($message->FromUserName)->send(); + break; + case 'pink': + /** @var StorePinkServices $pinkService */ + $pinkService = app()->make(StorePinkServices::class); + /** @var StoreCombinationServices $combinationService */ + $combinationService = app()->make(StoreCombinationServices::class); + $pinktInfo = $pinkService->get($thirdType[1]); + $productInfo = $combinationService->get($pinktInfo->cid); + $wechatNews['title'] = $productInfo->title; + $wechatNews['image'] = $productInfo->image; + $wechatNews['description'] = $productInfo->info; + $wechatNews['url'] = $baseUrl . '/pages/activity/goods_combination_status/index?id=' . $thirdType[1]; + $loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new); + $messages = WechatService::newsMessage($wechatNews); + WechatService::staffService()->message($messages)->to($message->FromUserName)->send(); + break; } - } catch (\Exception $e) { - $response = $e->getMessage(); - } - } - if (strtolower($qrInfo['third_type']) == 'wechatqrcode') { - /** @var WechatQrcodeServices $wechatQrcodeService */ - $wechatQrcodeService = app()->make(WechatQrcodeServices::class); - try { - //wechatqrcode类型的二维码数据中,third_id为渠道码的id - $qrcodeInfo = $wechatQrcodeService->qrcodeInfo($qrInfo['third_id']); - $spreadUid = $qrcodeInfo['uid']; - $spreadInfo = $userService->get($spreadUid); - $is_new = $wechatUser->saveUser($message->FromUserName); - $uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']); - $userInfo = $userService->get($uid); - - if ($qrcodeInfo['status'] == 0 || $qrcodeInfo['is_del'] == 1 || ($qrcodeInfo['end_time'] < time() && $qrcodeInfo['end_time'] > 0)) { - $response = '二维码已失效'; - } else if ($spreadUid == $uid) { - $response = '自己不能推荐自己'; - } else if (!$userInfo) { - $response = '用户不存在'; - } else if (!$spreadInfo) { - $response = '上级用户不存在'; - } else if ($loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new)) { - //写入扫码记录,返回内容 - $response = $wechatQrcodeService->wechatQrcodeRecord($qrcodeInfo, $userInfo, $spreadInfo, 1); - } - } catch (\Exception $e) { + } catch (\Throwable $e) { $response = $e->getMessage(); } + } else { + //扫码不生成用户流程 } }