propertyWebService = $propertyWebService; $this->channelService = $channelService; $this->propertyChannelMappingService = $propertyChannelMappingService; $this->propertyBookingEngineService = $propertyBookingEngineService; $this->findCountryCodeService = $findCountryCodeService; } public function handle($request, Closure $next, $guard = null) { $channelToken = $request->header('channelToken'); $bookingEngineToken = $request->header('bookingEngineToken'); if (!$channelToken) { return apiResponse(0, 'Token not provided.', null, 401); } $channelRequest = [ 'criteria' => [ ['field' => 'token', 'condition' => '=', 'value' => $channelToken], ['field' => 'status', 'condition' => '=', 'value' => 1], ], 'firstRow' => 1 ]; $channelCheck = $this->channelService->select($channelRequest); if ($channelCheck['status'] != 'success' || empty($channelCheck['data'])) { return apiResponse(0, 'Channel Token not found.', null, 401); } $bookingEnginePropertyId = null; if (in_array($channelCheck['data']['channel_category_id'], [2, 3, 7])) { if (is_null($bookingEngineToken)) { if (!in_array($channelCheck['data']['channel_category_id'], [7])) { return apiResponse(0, 'Booking Engine Token not found.', null, 401); } } $bookingEngineRequest = [ 'criteria' => [ ['field' => 'token', 'condition' => '=', 'value' => $bookingEngineToken], ['field' => 'status', 'condition' => '=', 'value' => 1], ], 'firstRow' => 1 ]; $bookingEngineCheck = $this->propertyBookingEngineService->select($bookingEngineRequest); if ($bookingEngineCheck['status'] != 'success' || empty($bookingEngineCheck['data'])) { if (!in_array($channelCheck['data']['channel_category_id'], [7])) { return apiResponse(0, 'Booking Engine Token not found.', null, 401); } } $bookingEnginePropertyId = isset($bookingEngineCheck['data']['property_id']) ? $bookingEngineCheck['data']['property_id'] : null; //channelToken Manipulation $params = json_decode($request->getContent(), 1); if (fillOnUndefined($params, 'ipAddress') && fillOnUndefined($params,'referrer') != 'google') { // Find Country Code with IP $ipResponse = $this->findCountryCodeService->findCountryWithIpAddress($params['ipAddress']); if ($ipResponse['status'] == 'success') { $propertyChannelMappingParam = [ 'criteria' => [ ['field' => 'property_id', 'condition' => '=', 'value' => $bookingEnginePropertyId], ['field' => 'status', 'condition' => '=', 'value' => 1], ], 'with' => ['channel'], ]; $propertyChannelMapping = $this->propertyChannelMappingService->select($propertyChannelMappingParam); $ipCountryCode = isset($ipResponse['data']['code']) ? $ipResponse['data']['code'] : 'tr'; if ($propertyChannelMapping['status'] == 'success') { $propertyChannelMappingCollect = collect($propertyChannelMapping['data']); $countryChannel = $propertyChannelMappingCollect ->where('channel.channel_category_id', 3) ->where('channel.country_code', $ipCountryCode) ->where('channel.parent_id', 1) ->first(); if (!empty($countryChannel)) { $channelToken = $countryChannel['channel']['token']; $channelCheck['data']['id'] = $countryChannel['channel']['id']; } //countryCodeGroup if (empty($countryChannel)) { $countryChannelGroup = $propertyChannelMappingCollect ->where('channel.channel_category_id', 3) ->where('channel.country_code', 'group') ->where('channel.parent_id', 1) ->toArray(); if (!empty($countryChannelGroup)) { foreach ($countryChannelGroup as $country) { if (!empty($country['channel']['country_code_group'])) { if (in_array($ipCountryCode, $country['channel']['countryCodeGroupArray'])) { $channelToken = $country['channel']['token']; $channelCheck['data']['id'] = $country['channel']['id']; break; } } } } } //countryCodeGroup } } //channelToken Manipulation } } $request->channelId = $channelCheck['data']['id']; $request->channelToken = $channelToken; $request->bookingEngineToken = $bookingEngineToken; $request->bookingEnginePropertyId = $bookingEnginePropertyId; $request->bookingEngineChannelCategoryId = $channelCheck['data']['channel_category_id']; return $next($request); } }