# Produtos

Através da API de Produtos é possível consultar e listar os produtos contidos na loja virtual.

| Endereço para Integração |                                        |
| ------------------------ | -------------------------------------- |
| URL de Acesso            | https\://{URL\_LOJA}/web\_api/products |
| Protocolo                | Rest/HTTP                              |

### Consultar Informações do Produto <a href="#ir-para-consultar-informacoes-do-produto" id="ir-para-consultar-informacoes-do-produto"></a>

Para retornar as informações do produto, basta realizar uma requisição via GET, enviando na URL o código do produto desejado.

Veja abaixo uma chamada de exemplo para consultar informações do produto:

```html
<script type="text/javascript">  
    var productId =  "84";
    
    $.ajax({
        method: "GET",
        url: "/web_api/products/"+productId
    }).done(function( response, textStatus, jqXHR ) {
        console.log(response);
    }).fail(function( jqXHR, status, errorThrown ){
        var response = $.parseJSON( jqXHR.responseText );
        console.log(response);
    });
</script>
```

Na consulta do produto, a API retorna a resposta em JSON.

Abaixo um detalhamento de cada nó do JSON de resposta:

| JSON de Resposta                                | Descrição                           |
| ----------------------------------------------- | ----------------------------------- |
| `Product`                                       | Dados do Produto                    |
| `Product.ean`                                   | EAN do Produto                      |
| `Product.id`                                    | Código do Produto                   |
| `Product.name`                                  | Nome do Produto                     |
| `Product.price`                                 | Preço do Produto                    |
| `Product.promotional_price`                     | Preço Promocional do Produto        |
| `Product.start_promotion`                       | Data Inicial da Promoção do Produto |
| `Product.end_promotion`                         | Data Final da Promoção do Produto   |
| `Product.brand`                                 | Marca do Produto                    |
| `Product.model`                                 | Modelo do Produto                   |
| `Product.category_id`                           | Código da Categoria do Produto      |
| `Product.available`                             | Disponibilidade do Produto          |
| `Product.hot`                                   | Produto em Destaque                 |
| `Product.release`                               | Liberação do Produto                |
| `Product.additional_button`                     | Botão Adicional do Produto          |
| `Product.has_variation`                         | Confirmação de Produto com Variação |
| `Product.url`                                   | Objeto com as URLs do Produto       |
| `Product.url.http`                              | URL Simples do Produto              |
| `Product.url.https`                             | URL Segura do Produto               |
| `Product.payment_option`                        | Informações de Pagamento            |
| `Product.payment_option_details[]`              | Informações de Pagamento            |
| `Product.payment_option_details[].display_name` | Nome da Forma de Pagamento          |
| `Product.payment_option_details[].plots`        | Quantidade de parcelas              |
| `Product.payment_option_details[].value`        | Valor da parcela                    |
| `Product.related_categories`                    | Categorias Relacionadas do Produto  |
| `Product.release_date`                          | Data da Liberação do Produto        |
| `Product.virtual_product`                       | Produto Virtual                     |
| `Product.ProductImage[]`                        | Imagens do Produto                  |
| `Product.ProductImage[].http`                   | URL Simples da Imagem do Produto    |
| `Product.ProductImage[].https`                  | URL Segura da Imagem do Produto     |
| `Product.ProductImage[].thumbs`                 | Miniatura da Imagem do Produto      |
| `Product.ProductImage[].thumbs.30`              | Miniatura de Tamanho 90px           |
| `Product.ProductImage[].thumbs.30.http`         | URL Simples da Miniatura de 90px    |
| `Product.ProductImage[].thumbs.30.https`        | URL Segura da Miniatura de 90px     |
| `Product.ProductImage[].thumbs.90`              | Miniatura de Tamanho 300px          |
| `Product.ProductImage[].thumbs.90.http`         | URL Simples da Miniatura de 300px   |
| `Product.ProductImage[].thumbs.90.https`        | URL Segura da Miniatura de 300px    |
| `Product.ProductImage[].thumbs.180`             | Miniatura de Tamanho 450px          |
| `Product.ProductImage[].thumbs.180.http`        | URL Simples da Miniatura de 450px   |
| `Product.ProductImage[].thumbs.180.https`       | URL Segura da Miniatura de 450px    |
| `Product.Variant[]`                             | Variações do Produto                |

Exemplo de resposta com sucesso baseando no envio do exemplo acima:

```json
{
    "Product": {
        "ean": "8882",
        "id": "84",
        "name": "Produto Teste 4",
        "description": "Produto para Teste Automatizado. Produto sem variação.<\/p>\r\n",
        "description_small": "Produto de Teste 4",
        "price": "199.90",
        "promotional_price": "0.00",
        "start_promotion": "0000-00-00",
        "end_promotion": "0000-00-00",
        "brand": "Paginacao",
        "model": "Modelo 3",
        "category_id": "16",
        "available": "1",
        "availability": "Em estoque",
        "hot": "1",
        "release": "0",
        "additional_button": "",
        "has_variation": "",
        "additional_message": "Mensagem.",
        "warranty": "1 ano",
        "rating": "0",
        "count_rating": "0",
        "ProductImage": [
            {
                "http": "http://images.tcdn.com.br/img/img_prod/123/1.png",
                "https": "https://images.tcdn.com.br/img/img_prod/123/1.png",
                "thumbs": {
                    "30": {
                        "http": "http://images.tcdn.com.br/img/img_prod/123/30_1.png",
                        "https": "https://images.tcdn.com.br/img/img_prod/123/30_1.png"
                    },
                    "90": {
                        "http": "http://images.tcdn.com.br/img/img_prod/123/90_1.png",
                        "https": "https://images.tcdn.com.br/img/img_prod/123/90_1.png"
                    },
                    "180": {
                        "http": "http://images.tcdn.com.br/img/img_prod/400636/180_1.png",
                        "https": "https://images.tcdn.com.br/img/img_prod/400636/180_1.png"
                    }
                }
            }
        ],
        "image": "1",
        "url": {
            "http": "http://sualojavirtual.commercesuite.com.br/produto-teste-4-pr.htm",
            "https": "https://sualojavirtual.commercesuite.com.br/produto-teste-4-pr.htm"
        },
        "Properties": [],
        "payment_option": "ou 12x com juros de R$ 18,89",
        "related_categories": [
            "16"
        ],
        "release_date": "0000-00-00",
        "virtual_product": "",
        "Variant": []
    }
}
```

### Attrs <a href="#ir-para-attrs" id="ir-para-attrs"></a>

Caso deseje exibir apenas alguns atributos da API, pode-se utilizar o parâmetro `attrs.`

O parâmetro Attrs deve ser passado pela url da requisição da API, nela você deve passar os atributos da qual deseja exibir separados por (,).

**Exemplo:**

```
https://{URL_LOJA}/web_api/products?attrs=Product.ean,Product.price
```

Terá como resposta o conteúdo abaixo:

```json
 "Products": [
     {
       "Product": {
         "ean": "",
         "id": "110",
         "price": "3000.00"
       }
     },
```

Abaixo um exemplo de utilização desse parâmetro:

```json
<script type="text/javascript">
  var params = {};

  params["id"] = "2";
  params["attrs"] = "Product.price,Product.ean";

  $.ajax({
    method: "GET",
    url: "/web_api/products/",
    data: params
  }).done(function( response, textStatus, jqXHR ) {
    console.log(response);
  }).fail(function( jqXHR, status, errorThrown ){
    var response = $.parseJSON( jqXHR.responseText );
    console.log(response);
  });
</script>
```

### Listagem de Produtos <a href="#ir-para-listagem-de-produtos" id="ir-para-listagem-de-produtos"></a>

Para a listagem de produtos, deverá ser realizada uma requisição via GET.

Podem ser enviados alguns parâmetros nesta integração para realizar filtros na listagem de produtos. Segue abaixo um detalhamento de cada nó do JSON de resposta:

| Dados de Entrada | Obrig. | Descrição                      |
| ---------------- | ------ | ------------------------------ |
| `id`             | Não    | Código do Produto              |
| `name`           | Não    | Nome do Produto                |
| `category_id`    | Não    | Categoria do Produto           |
| `ean`            | Não    | EAN do Produto                 |
| `price`          | Não    | Preço do Produto               |
| `brand`          | Não    | Marca do Produto               |
| `available`      | Não    | Dsiponibilidade do Produto     |
| `attrs`          | Não    | Atributos do Produto           |
| `created`        | Não    | Data de Criação do Produto     |
| `modified`       | Não    | Data de Modificação do Produto |
| `stock`          | Não    | Estoque do Produto             |
| `promotion`      | Não    | Produto Promocional            |
| `free_shipping`  | Não    | Produto com Frete Grátis       |
| `release`        | Não    | Produto em Lançamento          |
| `hot`            | Não    | Produto em Destaque            |
| `quantity_sold`  | Não    | Quantidade Vendida do Produto  |
| `rand`           | Não    | Retornar Produtos Randômicos   |
| `sort`           | Não    | Ordenação da Consulta          |
| `limit`          | Não    | Quantidade Limite de Registros |
| `page`           | Não    | Página da Consulta             |

Veja abaixo uma chamada de exemplo listagem de produtos:

```html
<script type="text/javascript">  
    var params = {};

    params["category_id"] = "123";
    params["page"] = "2";
    params["limit"] = "20";

    $.ajax({
        method: "GET",
        url: "/web_api/products/",
        data: params
    }).done(function( response, textStatus, jqXHR ) {
        console.log(response);
    }).fail(function( jqXHR, status, errorThrown ){
        var response = $.parseJSON( jqXHR.responseText );
        console.log(response);
    });
</script>
```

Na listagem de produtos, a API retorna a resposta em JSON.

Abaixo um detalhamento de cada nó do JSON de resposta:

| JSON de Resposta                                     | Descrição                           |
| ---------------------------------------------------- | ----------------------------------- |
| `paging`                                             | Dados do Produto                    |
| `paging.total`                                       | Total de Registros                  |
| `paging.page`                                        | Páginas corrente                    |
| `paging.offset`                                      | Registro Inicial da Página          |
| `paging.limit`                                       | Limite de Registros                 |
| `paging.maxLimit`                                    | Máximo de Registros                 |
| `sort`                                               | Ordenação                           |
| `availableFilters`                                   | Filtros Disponíveis                 |
| `appliedFilters`                                     | Filtros Utilizados                  |
| `Products[]`                                         | Lista de Produtos                   |
| `Products[].Product`                                 | Dados do Produto                    |
| `Products[].Product.ean`                             | EAN do Produto                      |
| `Products[].Product.id`                              | Código do Produto                   |
| `Products[].Product.name`                            | Nome do Produto                     |
| `Products[].Product.price`                           | Preço do Produto                    |
| `Products[].Product.promotional_price`               | Preço Promocional do Produto        |
| `Products[].Product.start_promotion`                 | Data Inicial da Promoção do Produto |
| `Products[].Product.end_promotion`                   | Data Final da Promoção do Produto   |
| `Products[].Product.brand`                           | Marca do Produto                    |
| `Products[].Product.model`                           | Modelo do Produto                   |
| `Products[].Product.category_id`                     | Código da Categoria do Produto      |
| `Products[].Product.available`                       | Produto Disponível                  |
| `Products[].Product.availability`                    | Disponibilidade do Produto          |
| `Products[].Product.hot`                             | Produto em Destaque                 |
| `Products[].Product.release`                         | Liberação do Produto                |
| `Products[].Product.additional_button`               | Botão Adicional do Produto          |
| `Products[].Product.has_variation`                   | Confirmação de Produto com Variação |
| `Products[].Product.url`                             | Objeto com as URLs do Produto       |
| `Products[].Product.url.http`                        | URL Simples do Produto              |
| `Products[].Product.url.https`                       | URL Segura do Produto               |
| `Products[].Product.payment_option`                  | Informações de Pagamento            |
| `Products[].Product.related_categories`              | Categorias Relacionadas do Produto  |
| `Products[].Product.release_date`                    | Data da Liberação do Produto        |
| `Products[].Product.virtual_product`                 | Produto Virtual                     |
| `Products[].Product.ProductImage[]`                  | Imagens do Produto                  |
| `Products[].Product.ProductImage[].http`             | URL Simples da Imagem do Produto    |
| `Products[].Product.ProductImage[].https`            | URL Segura da Imagem do Produto     |
| `Products[].Product.ProductImage[].thumbs`           | Miniatura da Imagem do Produto      |
| `Products[].Product.ProductImage[].thumbs.30`        | Miniatura de Tamanho 30px           |
| `Products[].Product.ProductImage[].thumbs.30.http`   | URL Simples da Miniatura de 30px    |
| `Products[].Product.ProductImage[].thumbs.30.https`  | URL Segura da Miniatura de 30px     |
| `Products[].Product.ProductImage[].thumbs.90`        | Miniatura de Tamanho 90px           |
| `Products[].Product.ProductImage[].thumbs.90.http`   | URL Simples da Miniatura de 90px    |
| `Products[].Product.ProductImage[].thumbs.90.https`  | URL Segura da Miniatura de 90px     |
| `Products[].Product.ProductImage[].thumbs.180`       | Miniatura de Tamanho 180px          |
| `Products[].Product.ProductImage[].thumbs.180.http`  | URL Simples da Miniatura de 180px   |
| `Products[].Product.ProductImage[].thumbs.180.https` | URL Segura da Miniatura de 180px    |
| `Products[].Product.Variant[]`                       | Variações do Produto                |

Exemplo de resposta com sucesso baseando no envio do exemplo acima:

```json
{
    "paging": {
        "total": 201,
        "page": 1,
        "offset": 0,
        "limit": 1,
        "maxLimit": 50
    },
    "sort": [ { "id": "asc" } ],
    "availableFilters": [
        "id", "name", "category_id", "ean", "available", "price",
        "brand", "model", "hot", "quantity_sold", "release",
        "free_shipping", "weight", "image", "release_date", "stock",
        "promotion", "modified", "created" ],
    "appliedFilters": [],
    "Products": [
        {
            "Product": {
                "ean": "8882",
                "id": "84",
                "name": "Produto Teste 4",
                "price": "199.90",
                "promotional_price": "0.00",
                "start_promotion": "0000-00-00",
                "end_promotion": "0000-00-00",
                "brand": "Paginacao",
                "model": "Modelo 3",
                "category_id": "16",
                "available": "1",
                "availability": "Em estoque",
                "hot": "1",
                "release": "0",
                "additional_button": "",
                "has_variation": "",
                "url": {
                    "http": "http://sualoja.commercesuite.com.br/produto1.htm",
                    "https": "https://sualoja.commercesuite.com.br/produto1.htm"
                },
                "payment_option": "ou 12x com juros de R$ 18,89",
                "related_categories": ["16"],
                "release_date": "0000-00-00",
                "virtual_product": "",
                "ProductImage": [{
                    "http": "http://images.tcdn.com.br/img/img_prod/123/1.png",
                    "https": "https://images.tcdn.com.br/img/img_prod/123/1.png",
                    "thumbs": {
                        "30": {
                            "http": "http://images.tcdn.com.br/img/img_prod/123/30_1.png",
                            "https": "https://images.tcdn.com.br/img/img_prod/123/30_1.png"
                        },
                        "90": {
                            "http": "http://images.tcdn.com.br/img/img_prod/123/90_1.png",
                            "https": "https://images.tcdn.com.br/img/img_prod/123/90_1.png"
                        },
                        "180": {
                            "http": "http://images.tcdn.com.br/img/img_prod/132/180_1.png",
                            "https": "https://images.tcdn.com.br/img/img_prod/123/180_1.png"
                        }
                    }
                } ],
                "Variant": []
            }
        }
    ]
}
```

Para mais detalhes sobre a API de produtos acesse o link da documentação <https://developers.tray.com.br/?java#api-de-produtos>
