# Variações de Produto

Através da API de Variações de Produtos é possível identificar todas as variações contidas na loja virtual e identificar o produto relacionado à variação.

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

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

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

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

```html
<script type="text/javascript">  
    var variantId = "5";

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

Na consulta de variação do produto, a API retorna a resposta em JSON.

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

| JSON de Resposta                          | Descrição                                       |
| ----------------------------------------- | ----------------------------------------------- |
| `Variant`                                 | Dados da Variação do Produto                    |
| `Variant.ean`                             | EAN da Variação do Produto                      |
| `Variant.id`                              | Código da Variação do Produto                   |
| `Variant.product_id`                      | Código do Produto                               |
| `Variant.price`                           | Preço da Variação do Produto                    |
| `Variant.promotional_price`               | Preço Promocional da Variação do Produto        |
| `Variant.start_promotion`                 | Data Inicial da Promoção da Variação do Produto |
| `Variant.end_promotion`                   | Data Final da Promoção da Variação do Produto   |
| `Variant.payment_option`                  | Informações de Pagamento                        |
| `Variant.illustrative_image`              | Imagem Ilustrativa da Variação do Produto       |
| `Variant.VariantImage[]`                  | Imagens da Variação do Produto                  |
| `Variant.VariantImage[].http`             | URL Simples da Imagem da Variação do Produto    |
| `Variant.VariantImage[].https`            | URL Segura da Imagem da Variação do Produto     |
| `Variant.VariantImage[].thumbs`           | Miniaturas da Imagem da Variação do Produto     |
| `Variant.VariantImage[].thumbs.30`        | Miniatura de Tamanho 30px                       |
| `Variant.VariantImage[].thumbs.30.http`   | URL Simples da Miniatura de 30px                |
| `Variant.VariantImage[].thumbs.30.https`  | URL Segura da Miniatura de 30px                 |
| `Variant.VariantImage[].thumbs.90`        | Miniatura de Tamanho 90px                       |
| `Variant.VariantImage[].thumbs.90.http`   | URL Simples da Miniatura de 90px                |
| `Variant.VariantImage[].thumbs.90.https`  | URL Segura da Miniatura de 90px                 |
| `Variant.VariantImage[].thumbs.180`       | Miniatura de Tamanho 180px                      |
| `Variant.VariantImage[].thumbs.180.http`  | URL Simples da Miniatura de 180px               |
| `Variant.VariantImage[].thumbs.180.https` | URL Segura da Miniatura de 180px                |
| `Variant.Sku[]`                           | Sku da Variação do Produto                      |
| `Variant.Sku[].type`                      | Tipo da Variação do Produto                     |
| `Variant.Sku[].value`                     | Dados da Variação do Produto                    |

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

```json
{
    "Variant": {
        "id": "184",
        "ean": "",
        "product_id": "610",
        "price": "199.90",
        "start_promotion": "0000-00-00",
        "end_promotion": "0000-00-00",
        "promotional_price": "0.00",
        "payment_option": "ou 12x com juros de R$ 18,89",
        "illustrative_image": "",
        "VariantImage": [
            {
                "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/123/180_1.png",
                        "https": "https://images.tcdn.com.br/img/img_prod/123/180_1.png"
                    }
                }
            }
        ],
        "Sku": [
            {
                "type": "Cor",
                "value": "Verde"
            },
            {
                "type": "Tamanho",
                "value": "G"
            }
        ]
    }
} 
```

### Listagem de Variações do Produto <a href="#ir-para-listagem-de-variacoes-do-produto" id="ir-para-listagem-de-variacoes-do-produto"></a>

Para a listagem de variações do produto, deverá ser realizada uma requisição via GET.

Podem ser enviados alguns parâmetros nesta integração para realizar filtros na listagem de variações de produtos, segue abaixo o dado necessário para envio:

| Dados de Entrada | Obrig. | Descrição                      |
| ---------------- | ------ | ------------------------------ |
| `id`             | Não    | Código do Produto              |
| `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 para a listagem de variações de produtos:

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

    params["page"] = "1";
    params["limit"] = "5";

    $.ajax({
        method: "GET",
        url: "/web_api/variants/",
        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 variações de produtos, a API retorna a resposta em JSON.

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

| JSON de Resposta                                     |                                                 |
| ---------------------------------------------------- | ----------------------------------------------- |
| `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                              |
| `Variants[]`                                         | Lista de Produtos                               |
| `Variants[].Variant`                                 | Dados da Variação do Produto                    |
| `Variants[].Variant.ean`                             | EAN da Variação do Produto                      |
| `Variants[].Variant.id`                              | Código da Variação do Produto                   |
| `Variants[].Variant.product_id`                      | Código do Produto                               |
| `Variants[].Variant.price`                           | Preço da Variação do Produto                    |
| `Variants[].Variant.promotional_price`               | Preço Promocional da Variação do Produto        |
| `Variants[].Variant.start_promotion`                 | Data Inicial da Promoção da Variação do Produto |
| `Variants[].Variant.end_promotion`                   | Data Final da Promoção da Variação do Produto   |
| `Variants[].Variant.payment_option`                  | Informações de Pagamento                        |
| `Variants[].Variant.illustrative_image`              | Imagem Ilustrativa da Variação do Produto       |
| `Variants[].Variant.VariantImage[]`                  | Imagens da Variação do Produto                  |
| `Variants[].Variant.VariantImage[].http`             | URL Simples da Imagem da Variação do Produto    |
| `Variants[].Variant.VariantImage[].https`            | URL Segura da Imagem da Variação do Produto     |
| `Variants[].Variant.VariantImage[].thumbs`           | Miniaturas da Imagem da Variação do Produto     |
| `Variants[].Variant.VariantImage[].thumbs.30`        | Miniatura de Tamanho 30px                       |
| `Variants[].Variant.VariantImage[].thumbs.30.http`   | URL Simples da Miniatura de 30px                |
| `Variants[].Variant.VariantImage[].thumbs.30.https`  | URL Segura da Miniatura de 30px                 |
| `Variants[].Variant.VariantImage[].thumbs.90`        | Miniatura de Tamanho 90px                       |
| `Variants[].Variant.VariantImage[].thumbs.90.http`   | URL Simples da Miniatura de 90px                |
| `Variants[].Variant.VariantImage[].thumbs.90.https`  | URL Segura da Miniatura de 90px                 |
| `Variants[].Variant.VariantImage[].thumbs.180`       | Miniatura de Tamanho 180px                      |
| `Variants[].Variant.VariantImage[].thumbs.180.http`  | URL Simples da Miniatura de 180px               |
| `Variants[].Variant.VariantImage[].thumbs.180.https` | URL Segura da Miniatura de 180px                |
| `Variants[].Variant.Sku[]`                           | Sku da Variação do Produto                      |
| `Variants[].Variant.Sku[].type`                      | Tipo da Variação do Produto                     |
| `Variants[].Variant.Sku[].value`                     | Dados da Variação do Produto                    |

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

```json
{
    "paging": {
        "total": 105,
        "page": 1,
        "offset": 0,
        "limit": 30,
        "maxLimit": 50
    },
    "sort": [
        {
            "id": "asc"
        }
    ],
    "availableFilters": [
        "id",
        "product_id",
        "ean",
        "price",
        "promotional_price",
        "modified"
    ],
    "appliedFilters": [],
    "Variants": [
        {
            "Variant": {
                "id": "182",
                "ean": "",
                "product_id": "610",
                "price": "199.90",
                "start_promotion": "0000-00-00",
                "end_promotion": "0000-00-00",
                "promotional_price": "0.00",
                "payment_option": "ou 12x com juros de R$ 18,89",
                "illustrative_image": "",
                "Sku": [
                    {
                        "type": "Cor",
                        "value": "Verde"
                    },
                    {
                        "type": "Tamanho",
                        "value": "P"
                    }
                ]
            }
        }
    ]
}
```

### 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/variants?attrs=Variant.price,Variant.payment_option_details
```

Terá como resposta o conteúdo abaixo:

```json
"Variants": [
    {
      "Variant": {
        "id": "9",
        "product_id": "8",
        "price": "40.00",
        "payment_option_details": [
          {
            "display_name": "Boleto - TrayCheckout",
            "plots": "1",
            "value": "38.80"
          }
        ]
      }
    },
```

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

```javascript
  var params = {};
  params["attrs"] = "Variant.price,Variant.payment_option_details";

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

Para mais detalhes sobre a API de variações de produto acesse o link da documentação <https://developers.tray.com.br/?java#listagem-de-variacoes-get>
