'书籍', self::MESSAGE_LINK_TYPE_ACTIVITY => '活动', self::MESSAGE_LINK_TYPE_RECENT => '继续阅读', self::MESSAGE_LINK_TYPE_MENU => '菜单', self::MESSAGE_LINK_TYPE_NOURL => '没有url的文案', self::MESSAGE_LINK_TYPE_URL => '自定义链接', self::MESSAGE_LINK_TYPE_OTHER => '其他', self::MESSAGE_LINK_TYPE_CUSTOMIZE_ACTIVITY => '自定义活动', self::MESSAGE_LINK_TYPE_SIGN => '自动签到' ]; #endregion #region 消息类型 /** * 图文类型 */ const MESSAGE_TYPE_IMAGE_TEXT = 0; /** * 文字链类型 */ const MESSAGE_TYPE_LINK = 1; #endregion /** * 判断获取消息中链接的类型 * @param $channelSchemeHost 渠道商的域名 * @param $url * @return int */ public static function getMessageLinkType($channelSchemeHost, $url) { $urlInfo = parse_url($url); $schemeHost = $urlInfo['scheme'] . '://' . $urlInfo['host']; $pathQuery = $urlInfo['path']; $pathQuery .= empty($urlInfo['query']) ? '' : '?' . $urlInfo['query']; $aQuery = explode('&', $urlInfo['query']); $referralId = 0; $bookId = 0; $type = 0; if (!empty($aQuery['referral_id'])) { $referralId = $aQuery['referral_id']; } if (!empty($aQuery['book_id'])) { $bookId = $aQuery['book_id']; } if ($channelSchemeHost != $schemeHost) { $type = self::MESSAGE_LINK_TYPE_OTHER; } elseif (!empty($bookId)) { //书籍和推广链接都归到"书籍类型" $type = self::MESSAGE_LINK_TYPE_BOOK; } elseif (strpos($pathQuery, Menu::MENU_URL_PATH_RECENT) !== false) { $type = self::MESSAGE_LINK_TYPE_RECENT; } elseif (Menu::pathQueryIsMenu($pathQuery) || !empty($referralId)) { $type = self::MESSAGE_LINK_TYPE_MENU; } elseif (strpos($pathQuery, '/s/') !== false) { $type = self::MESSAGE_LINK_TYPE_ACTIVITY; } else { $type = self::MESSAGE_LINK_TYPE_OTHER; } return [$type, $bookId, $referralId]; } /** * 获取消息中链接的信息 * @param $channelId 渠道商id * @param array $aMsgLinks 链接列表 * @return array * 返回值属性:url type book_id referral_id book_name book_realname */ public static function getMessageLinksInfo($channelId, array $aMsgLinks) { $adminConfigModel = model('AdminConfig'); $configData = $adminConfigModel->getAdminInfoAll($channelId); $channelSchemeHost = Config::get('site.scheme') . '://' . $configData['appid'] . '.' . $configData['ophost_host']; $result = []; $referralIds = []; #region 初步获取连接的类型以及书籍id和推广链接id foreach ($aMsgLinks as $key => $msgLink) { list($type, $bookId, $referralId) = self::getMessageLinkType($channelSchemeHost, $msgLink); $result[$key] = [ 'url' => $msgLink, 'type' => $type, 'book_id' => $bookId, 'referral_id' => $referralId, ]; $referralIds[] = $referralId; } #endregion #region 通过推广链接id找到对应的书籍id $referralModel = model('Referral'); $referralInfos = $referralModel->where(['id' => ['in', $referralIds]]) ->field(['id', 'book_id'])->select(); $refBookIds = []; foreach ($referralInfos as $referralInfo) { $refBookIds[$referralInfo['id']] = $referralInfo['book_id']; } foreach ($result as $item) { if (!empty($item['referral_id'])) { $item['book_id'] = $refBookIds[$item['referral_id']]; } } #endregion #region 通过书籍id找到客显名和书籍名 $bookIds = array_column($result, 'book_id'); $bookModel = model('Book'); $bookInfos = $bookModel->field(['id', 'name', 'realname'])->where(['id', ['in', $bookIds]]); $aBookInfos = []; foreach ($bookInfos as $bookInfo) { $aBookInfos[$bookInfo['id']] = [ 'id' => $bookInfo['id'], 'name' => $bookInfo['name'], 'realname' => $bookInfo['realname'] ]; } foreach ($result as $item) { if (!empty($item['book_id'])) { $item['book_name'] = $aBookInfos[$item['book_id']]['name']; $item['book_realname'] = $aBookInfos[$item['book_id']]['realname']; $item['type'] = self::MESSAGE_LINK_TYPE_BOOK; } } #endregion return $result; } public static function getCustomMsgLinksInfo($channelId, array $aMsgLinks) { foreach ($aMsgLinks as $msgLink) { } } public static function getBooksInfo(array $bookIds) { if (empty($bookIds)) { return []; } #region 通过书籍id找到客显名和书籍名 // $bookIds = array_column($result, 'book_id'); $bookModel = model('Book'); $bookInfos = $bookModel->field(['id', 'name', 'realname'])->whereIn('id', $bookIds)->select(); $aBookInfos = []; foreach ($bookInfos as $bookInfo) { $aBookInfos[$bookInfo['id']] = [ 'id' => $bookInfo['id'], 'name' => $bookInfo['name'], 'realname' => $bookInfo['realname'] ]; } return $aBookInfos; } /** * 获取最近阅读的全路径 */ public static function getRecentFullPath($channelId) { $recentUrl = getCurrentDomain($channelId, '/index/book/chapter'); return $recentUrl; } /** * 获取继续阅读的全路径 * @param int $channelId 渠道商id * @return string */ public static function getKeepReadingFullPath($channelId) { $recentUrl = getCurrentDomain($channelId, Menu::MENU_URL_PATH_KEEPREADING); return $recentUrl; } }