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.
Endpoint
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
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:
{
"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
// 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 |
\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
// 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
// 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 |
YYYY/MM/DD (com barras), diferente do formato ISO YYYY-MM-DD usado em outros campos.
Exemplo de Uso
// 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
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
// 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
// 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}`);
});