Visão Geral da API de Detalhes

A API de Detalhes é uma extensão da API MarketPlace que fornece informações completas e detalhadas sobre um pacote turístico específico. Enquanto a API MarketPlace lista os pacotes disponíveis, esta API retorna todos os dados necessários para apresentar o pacote ao cliente final, incluindo imagens, descrições, itinerário dia a dia, opções de hotéis e datas de saída.

Caso de Uso: Após o usuário selecionar um pacote na lista (API MarketPlace), você usa esta API para exibir os detalhes completos do pacote em uma página de produto.

Endpoint

GET /api/api_MarketPlace_Details.php

Retorna informações detalhadas de um pacote turístico específico

Parâmetros da Requisição

A API de Detalhes requer dois parâmetros obrigatórios:

Parâmetro Tipo Obrigatório Descrição Exemplo
Operator String Sim Código do operador de viagens 505
Sale String Sim Número do pacote (Sale Number da API MarketPlace) 44950

Exemplo de Requisição

url
https://chipweb-voyage.com.br/api/api_MarketPlace_Details.php?Operator=505&Sale=44950

Estrutura da Resposta

A resposta contém um objeto com informações completas do pacote:

json
{
  "Operator": [
    {
      "Operator_Code": "505",
      "Operator_Name": "Operadora XYZ",
      "Operator_Logo": "https://...",
      "Sale": [
        {
          "Number": "44950",
          "Code": "4.10.022.0063.25",
          "Title": "Extensão Tailândia - Krabi",
          "Destination": "Tailândia",
          "Nights": "3",
          "ValidiyFrom": "2025-01-01",
          "ValidityUntil": "2026-10-31",
          "Currency_Symbol": "U$",
          "Images": [...],
          "Descriptions": [...],
          "Itinerary": [...],
          "Hotels": [...],
          "DepartureDates": [...]
        }
      ]
    }
  ]
}

Imagens do Pacote

O pacote pode conter até 18 imagens diferentes do destino. As imagens são retornadas em um array chamado Images:

Campo Tipo Descrição
Image1 a Image18 String (URL) Caminho relativo ou URL completa da imagem. Campos vazios indicam que não há imagem nessa posição.

Exemplo de Uso

javascript
// Processar imagens do pacote
const images = data.Operator[0].Sale[0].Images[0];
const imageArray = [];

for (let i = 1; i <= 18; i++) {
  const imageKey = `Image${i}`;
  if (images[imageKey] && images[imageKey].trim() !== '') {
    imageArray.push({
      url: 'https://www.chipweb-voyage.com.br/pstCom/pst_Sls/' + images[imageKey],
      position: i
    });
  }
}

// Exibir imagens em uma galeria
imageArray.forEach(img => {
  console.log(`Imagem ${img.position}: ${img.url}`);
});

Descrições do Pacote

As descrições contêm informações importantes sobre o pacote, incluindo o que está incluído, o que não está incluído, documentação necessária e observações especiais. As descrições são retornadas em um array com até 6 campos:

Campo Conteúdo Típico
Description1 Informações adicionais ou observações gerais
Description2 Saídas diárias e legenda de refeições (C=café, A=almoço, J=jantar)
Description3 O que está incluído e o que não está incluído no pacote
Description4 Documentação necessária (passaporte, vistos, vacinas)
Description5 Informações adicionais ou vazias
Description6 Informações adicionais ou vazias
Nota Importante: As descrições podem conter HTML codificado (ex: \u0026lt;b\u0026gt; para <b>). Você deve decodificar estas entidades HTML antes de exibir.

Itinerário Dia a Dia

O itinerário detalha as atividades de cada dia da viagem:

Campo Tipo Descrição
Itinerary_Position String Ordem do dia na sequência (1, 2, 3...)
Itinerary_Day String Descrição do dia (ex: "1º Dia", "2º e 3º Dia")
Itinerary_Date String (YYYY-MM-DD) Data do dia (formato ISO)
Itinerary_DescriptionTitle String Título do dia (ex: "- KRABI")
Itinerary_DescriptionText String Descrição detalhada das atividades do dia
Itinerary_DayImage String (URL) Imagem opcional para o dia
Itinerary_Hotel String Hotel onde o viajante ficará naquele dia

Exemplo de Uso

javascript
// Processar itinerário
const itinerary = data.Operator[0].Sale[0].Itinerary;

itinerary.forEach(day => {
  console.log(`${day.Itinerary_Day} - ${day.Itinerary_DescriptionTitle}`);
  console.log(`Data: ${day.Itinerary_Date}`);
  console.log(`Descrição: ${day.Itinerary_DescriptionText}`);
  console.log('---');
});

Opções de Hotéis

O pacote oferece múltiplas opções de hotéis com diferentes tipos de quartos e períodos de validade. Cada hotel tem preços diferenciados por tipo de acomodação:

Campo Tipo Descrição
HotelName String Nome do hotel
RoomType String Tipo de quarto (Deluxe, Superior, etc.)
Meals String Tipo de refeição incluída (CAFE=café da manhã)
ValidityFrom String (YYYY-MM-DD) Data de início da validade do preço
ValidityUntil String (YYYY-MM-DD) Data de fim da validade do preço
SGLFare String Preço para Single (1 pessoa)
DBLFare String Preço para Double (2 pessoas)
TPLFare String Preço para Triple (3 pessoas)
QDPFare String Preço para Quadruple (4 pessoas)
CHDFare String Preço para Criança
INFFare String Preço para Bebê (até 2 anos)

Exemplo de Uso

javascript
// Listar hotéis disponíveis
const hotels = data.Operator[0].Sale[0].Hotels;

hotels.forEach(hotel => {
  console.log(`${hotel.HotelName} - ${hotel.RoomType}`);
  console.log(`Válido de ${hotel.ValidityFrom} até ${hotel.ValidityUntil}`);
  console.log(`Preço DBL: ${hotel.DBLFare}`);
  console.log('---');
});

Datas de Saída Disponíveis

O pacote possui múltiplas datas de saída disponíveis durante o período de validade:

Campo Tipo Descrição
DepartureDate String (YYYY/MM/DD) Data de saída disponível para o pacote
Formato: Observe que o formato é YYYY/MM/DD (com barras), diferente do formato ISO YYYY-MM-DD usado em outros campos.

Exemplo de Uso

javascript
// Listar datas de saída
const departureDates = data.Operator[0].Sale[0].DepartureDates;

console.log(`${departureDates.length} datas de saída disponíveis:`);
departureDates.forEach(date => {
  console.log(date.DepartureDate);
});

Exemplos Práticos

Exemplo 1: Buscar Detalhes Completos de um Pacote

javascript
async function getPackageDetails(operatorCode, saleNumber) {
  try {
    const url = `https://chipweb-voyage.com.br/api/api_MarketPlace_Details.php?Operator=${operatorCode}&Sale=${saleNumber}`;
    const response = await fetch(url);
    const data = await response.json();
    
    const package = data.Operator[0].Sale[0];
    
    return {
      title: package.Title,
      destination: package.Destination,
      nights: package.Nights,
      images: package.Images,
      descriptions: package.Descriptions,
      itinerary: package.Itinerary,
      hotels: package.Hotels,
      departureDates: package.DepartureDates
    };
  } catch (error) {
    console.error('Erro ao buscar detalhes:', error);
  }
}

// Uso
getPackageDetails('505', '44950').then(details => {
  console.log('Pacote:', details.title);
  console.log('Noites:', details.nights);
});

Exemplo 2: Decodificar HTML nas Descrições

javascript
// Função para decodificar entidades HTML
function decodeHTML(html) {
  const txt = document.createElement('textarea');
  txt.innerHTML = html;
  return txt.value;
}

// Usar com as descrições
const descriptions = data.Operator[0].Sale[0].Descriptions[0];
const decodedDescription3 = decodeHTML(descriptions.Description3);

console.log(decodedDescription3);

Exemplo 3: Filtrar Hotéis por Período

javascript
// Filtrar hotéis válidos para um período específico
function getHotelsForPeriod(hotels, startDate, endDate) {
  return hotels.filter(hotel => {
    const hotelStart = new Date(hotel.ValidityFrom);
    const hotelEnd = new Date(hotel.ValidityUntil);
    const searchStart = new Date(startDate);
    const searchEnd = new Date(endDate);
    
    return hotelStart <= searchStart && hotelEnd >= searchEnd;
  });
}

// Uso
const hotels = data.Operator[0].Sale[0].Hotels;
const availableHotels = getHotelsForPeriod(hotels, '2025-01-15', '2025-01-18');

console.log(`${availableHotels.length} hotéis disponíveis para o período`);
availableHotels.forEach(hotel => {
  console.log(`${hotel.HotelName} - R$ ${hotel.DBLFare}`);
});