Importação assíncrona de produto
URL do Webservice : https://sws.spartoo.pt/mp/xml_import_products_async.phpEste serviço Web deve ser utilizado da mesma forma que xml_import_products
A única diferença deste serviço Web é o facto de integrar os produtos de forma assíncrona.
Quando chamar este serviço Web, ele enviará um URL.
Se chamar este URL, obterá o estado da integração do ficheiro.
Funcionamento
A importação assíncrona funciona em duas etapas:
- Envio do feed: chame o serviço web com o parâmetro xml. O feed é colocado numa fila de espera e o serviço web responde imediatamente com um URL (tag url) que contém o identificador da sua importação (parâmetro export).
- Acompanhamento e recuperação do resultado: chame o serviço web com o parâmetro export até obter o resultado do processamento (consulte a lista de estados abaixo).
O feed pode ser enviado em XML bruto ou comprimido em formato ZIP: o formato ZIP é detetado automaticamente.
Lista dos parâmetros
Os parâmetros deste webservice devem passar obrigatoriamente em POST| Parâmetro | Descrição |
|---|---|
| partenaire | Deve conter a sua identificação única: |
| xml | Sequência de caracteres XML contendo a lista dos elementos a serem criados ou atualizados |
Parametros opcionais que podem ser passados em POST
| Parâmetro | Descrição |
|---|---|
| force_overwrite | Colocar 1 se desejar corrigir os erros de integração relacionados a uma queda significativa dos preços |
| Parâmetro | Passo | Descrição |
|---|---|---|
| xml | 1 | Conteúdo do fluxo de produtos (XML bruto ou ZIP). Ver os formatos abaixo. |
| export | 2 | Identificador da importação, devolvido no passo 1 no URL de resposta. |
Formato do parâmetro xml
Os campos de texto devem estar protegidos por balizas CDATA caso contenham caracteres especiais que possam tornar o XML inválido.
Formato mono país
<root> <products> <product> <reference_partenaire>string</reference_partenaire> <product_name>string</product_name> <manufacturers_name>string</manufacturers_name> <product_sex>char</product_sex> <product_price>float</product_price> <product_quantity>int</product_quantity> <color_id>int</color_id> <product_style>int</product_style> <product_description>string</product_description> <product_color>string</product_color> <heel_height>float</heel_height> <country_origin>int</country_origin> <code_hs>int</code_hs> <size_list> <size> <size_name>string</size_name> <size_quantity>int</size_quantity> <size_reference>string</size_reference> <ean>string</ean> <code_hs>int</code_hs> <product_price>float</product_price> <discount> <startdate>timestamp</startdate> <stopdate>timestamp</stopdate> <price_discount>float</price_discount> <rate>int</rate> <sales/> </discount> </size> <!-- ... Várias balizas "size" possíveis ... --> </size_list> <product_composition>int</product_composition> <voering_composition>int</voering_composition> <first_composition>int</first_composition> <zool_composition>int</zool_composition> <photos> <url1>url</url1> <url2>url</url2> <url3>url</url3> <url4>url</url4> <url5>url</url5> <url6>url</url6> <url7>url</url7> <url8>url</url8> </photos> <discount> <startdate>timestamp</startdate> <stopdate>timestamp</stopdate> <price_discount>float</price_discount> <rate>int</rate> <sales>0/1</sales> </discount> <extra_infos> <info> <id>int</id> <value>float</value> </info> <!-- ... Várias balizas "info" possíveis ... --> </extra_infos> <selections> <selection>int</selection> <!-- ... Várias balizas "selection" possíveis ... --> </selections> </product> <!-- ... Várias balizas "product" possíveis ... --> </products> </root>
Formato multi país
<root> <products> <product> <reference_partenaire>string</reference_partenaire> <manufacturers_name>string</manufacturers_name> <product_sex>char</product_sex> <product_quantity>int</product_quantity> <color_id>int</color_id> <product_style>int</product_style> <heel_height>float</heel_height> <country_origin>int</country_origin> <code_hs>int</code_hs> <languages> <language> <code>string</code> <product_name>string</product_name> <product_description>string</product_description> <product_color>string</product_color> <product_price>float</product_price> <discount> <startdate>timestamp</startdate> <stopdate>timestamp</stopdate> <price_discount>float</price_discount> <rate>int</rate> <sales /> </discount> </language> <!-- ... Várias balizas "language" possíveis ... --> </languages> <size_list> <size> <size_name>string</size_name> <size_quantity>int</size_quantity> <size_reference>string</size_reference> <ean>string</ean> <code_hs>int</code_hs> <languages> <language> <code>string</code> <product_price>float</product_price> <discount> <startdate>timestamp</startdate> <stopdate>timestamp</stopdate> <price_discount>float</price_discount> <rate>int</rate> <sales/> </discount> </language> <!-- ... Várias balizas "language" possíveis ... --> </languages> </size> <!-- ... Várias balizas "size" possíveis ... --> </size_list> <product_composition>int</product_composition> <voering_composition>int</voering_composition> <first_composition>int</first_composition> <zool_composition>int</zool_composition> <photos> <url1>url</url1> <url2>url</url2> <url3>url</url3> <url4>url</url4> <url5>url</url5> <url6>url</url6> <url7>url</url7> <url8>url</url8> </photos> <extra_infos> <info> <id>int</id> <value>float</value> </info> <!-- ... Várias balizas "info" possíveis ... --> </extra_infos> <selections> <selection>int</selection> <!-- ... Várias balizas "selection" possíveis ... --> </selections> </product> <!-- ... Várias balizas "product" possíveis ... --> </products> </root>
Descrição dos campos XML de entrada
| Baliza | Descrição | Obrigatória |
|---|---|---|
| reference_partenaire |
Identificação do produto parceiro A identificação do produto só pode conter caracteres alfanuméricos e os caracteres - (hífen) _ (underscore) e . (ponto). |
Sim |
| product_name |
Nome do modelo Não deve conter a categoria, a cor ou a marca do produto |
Não |
| manufacturers_name | Nome da marca do produto | Sim |
| product_sex |
Género do produto > Ver os valores possíveis |
Sim |
| product_price | Preço do produto em euros (não obrigatório para preços de tamanho) | Sim Não |
| color_id |
Cor destinada aos filtros dos menus Se não for indicada, o produto não aparecerá se o cliente utilizar o filtro por cor > Ver os valores possíveis |
Não |
| product_style |
Categoria > Ver os valores possíveis |
Sim |
| product_description | Descrição do produto. Aparece na página do produto. | Não |
| product_color | Campo de texto livre para a cor. Aparece na página do produto. | Não |
| product_quantity |
Stock total de um produto Ignorado se for detetada uma ou mais tags size_quantity para o produto. Para produtos de tamanho único, será necessária uma etiqueta product_quantity se a etiqueta size_quantity não for especificada. |
Não |
| size |
Lista dos tamanhos e respetivo stock. Facultativo para os produtos sem tamanho ( Bolsas / Acessórios). Caso contrário é Obrigatório. |
Oui / Non |
| size_name |
Nome do tamanho > Ver os valores possíveis |
Sim |
| size_quantity | Para cada tamanho deve ser especificado o stock. Para desativar um produto, deve definir o stock para 0. Quando o stock chega a 0, o produto é desativado e deixa de aparecer em Spartoo. |
Sim |
| size_reference |
Referência do produto por tamanho. Este campo serve apenas para ser enviado nas exportações de encomendas ou devoluções. Uma boa solução será de gerar esta referência ligando os campos reference_partenaire e size_name através de um underscore "_". |
Não |
| ean | EAN do produto por tamanho | Obrigatório para o serviço logísticoNão / Sim |
| fotos |
Lista das fotos e respetivos URL. É obrigatória pelo menos uma fotografia. Recomendamos ter pelo menos 3 fotos. Podemos integrar no máximo 8 fotos. A fotografia será baixada apenas uma vez, será em seguida armazenada nos nossos servidores depois de redimensionada para as dimensões Spartoo As fotografias devem estar no formato jpg, quadradas e com pelo menos 500x500 pixeis. Se elas forem superiores ou iguais a 800x800 pixeis, haverá um possível zoom no site. |
Sim |
| url1, url2 ... url8 |
Links para as fotos Deve fornecer um link para cada foto. O nome do arquivo deve conter apenas caracteres alfanuméricos e caracteres "-" (hífens), "_" (underscore) e "." (pontos). Espaços, bem como letras acentuadas (por ex. é, à e ã) não são autorizados. |
Sim | country_origin |
País de origem do produto > Ver os valores possíveis |
| heel_height | Altura do tacão em centímetro (cm). Unicamente para os calçados femininos. Deve ser um múltiplo de 0,5. | No |
| product_composition |
Composição do cano do produto. Apenas para o calçado. > Ver os valores possíveis |
Não |
| voering_composition |
Composição do forro do produto. Apenas para o calçado. > Ver os valores possíveis |
Não |
| first_composition |
Composição da palmilha do produto. Apenas para o calçado. > Ver os valores possíveis |
Não |
| zool_composition |
Composição da sola do produto. Apenas para o calçado. > Ver os valores possíveis |
Não |
| discount |
Permite aplicar uma promoção no produto ou no tamanho. O campo ratedo campo discountdiz respeito à redução do preço em percentagem em relação ao campo product_price. O campo price_discount do campo discount diz respeito à redução em preço fixo. A percentagem de redução apresentada será calculada. Se os dois campos estiverem presentes, o campo price_discount é prioritário em relação ao campo rate. Se o desconto é imediato, não será necessário indicar o campo startdate. Se a baliza sales for indicada, a promoção será uma promoção de saldos. Caso contrário, será uma promoção clássica. Indicar este parâmetro permite que os produtos estejam presentes na página de saldos durante o período de saldos. |
Não |
| extra_infos |
Permite especificar informações complementares dependentes do tipo de produto. Cada informação tem um ID ( Ver os valores ) e de um valor no formato numérico. |
Não |
Exemplo de parâmetro xml
<root> <products> <product> <reference_partenaire>98</reference_partenaire> <product_name><![CDATA[ALL STAR HI]]></product_name> <manufacturers_name><![CDATA[Converse]]></manufacturers_name> <product_sex>M</product_sex> <product_price>64.99</product_price> <product_quantity>5</product_quantity> <color_id>8</color_id> <product_style>10010</product_style> <product_description><![CDATA[Mítica, a Chuck Taylor ALL STAR da Converse é incontornável. Aqui em versão de cano alto em lona e estampado uniforme clássico, esta sapatilha é intemporal e nunca está fora de moda! ]]></product_description> <product_color><![CDATA[Vermelho]]></product_color> <country_origin>73</country_origin> <code_hs>64059090</code_hs> <size_list> <size> <size_name>38</size_name> <size_quantity>4</size_quantity> <size_reference>98_38</size_reference> <ean>123456789011></ean> </size> <size> <size_name>39</size_name> <size_quantity>1</size_quantity> <size_reference>98_39</size_reference> <ean>123456789012></ean> </size> </size_list> <product_composition>4</product_composition> <photos> <url1>https://imgext.spartoo.com/photos/98/98/98_350_A.jpg</url1> <url2>https://imgext.spartoo.com/photos/98/98/98_350_B.jpg</url2> <url3>https://imgext.spartoo.com/photos/98/98/98_350_C.jpg</url3> <url4>https://imgext.spartoo.com/photos/98/98/98_350_D.jpg</url4> <url5>https://imgext.spartoo.com/photos/98/98/98_350_E.jpg</url5> <url6>https://imgext.spartoo.com/photos/98/98/98_350_F.jpg</url6> <url7>https://imgext.spartoo.com/photos/98/98/98_350_G.jpg</url7> <url8>https://imgext.spartoo.com/photos/98/98/98_350_H.jpg</url8> </photos> <discount> <startdate>1199170800</startdate> <stopdate>1204354800</stopdate> <rate>20</rate> </discount> </product> </products> </root>
Transferência de fluxo através de ficheiro
Também é possível transferir o fluxo (XML ou ZIP) através de um ficheiro. Para tal, o corpo da solicitação deve conter apenas o ficheiro.
Os diferentes parâmetros (como «partenaire», «force_description», «force_overwrite», etc.) devem ser transmitidos obrigatoriamente em GET.
Preço e Desconto por Tamanho
As etiquetas de preço e de desconto por tamanho foram implementadas para permitir uma diferenciação precisa dos preços dentro do mesmo produto.Elas devem ser utilizadas apenas quando um tamanho tem um preço diferente do preço geral do produto.
O preço definido ao nível do produto é a principal referência. As etiquetas específicas de tamanho destinam-se a substituir este preço apenas quando é necessária uma exceção (por exemplo: tamanhos especiais, custos adicionais de material, liquidação parcial de fim de linha, etc.).
É estritamente proibido utilizar etiquetas de preço ou de desconto por tamanho quando todos os tamanhos partilham o mesmo preço do produto principal. Neste caso, o preço deve ser definido apenas ao nível geral do produto.
Multi-Country Format
In the multi-country format, theThis tag defines the countries in which the product is offered for sale, as well as its name, description, and reference price (product_price) for each country. This price must be strictly positive.
The
If the
Resposta do passo 1: envio do feed
Formato do XML devolvido
<root> <url>string</url> <errors>int</errors> </root>
Exemplo:
<root> <url><![CDATA[https://sws.spartoo.com/mp/xml_import_products_async.php?partenaire=XXXX&export=123456]]></url> <errors>1</errors> </root>
Lista dos códigos de erros do webservice
| Código | Descrição |
|---|---|
| 1 | Sem erros nos parâmetros |
| -1 | O parâmetro partenaire não passou no parâmetro ou está vazio |
| -2 | O parâmetro do parceiro não existe |
| -11 | O parâmetro xml não passou no parâmetro ou está vazio |
| -15 | Erro de sintaxe XML, verifique o seu ficheiro XML |
| -428 | A sua conta foi desativada. Não pode mais efetuar chamadas ao webservice |
| -429 | Efetuou demasiado chamadas para o Webservice nesta hora corrida |
Descrição dos campos da resposta XML
This webservice return you the url to call to get back the webservice responses. If there was an error, it will be printed in a status markup. Otherwise, you will get an xml contening the import result.
This result will be the same format as xml_import_products. Below is the list of statuses returned by the webservice:
| Status id | Status |
|---|---|
| 1 | Fichier pas encore traité |
| 2 | Aucune difference trouvé dans le fichier transferé |
| 3 | Resultat plus disponible |
| 4 | Erreur lors du transfert de fichier |
Resposta da etapa 2: acompanhamento do processamento
Enquanto o processamento não estiver concluído, o serviço web devolve um estado:
<root> <status_id>int</status_id> <status>string</status> <errors>int</errors> </root>
| status_id | status | Significado |
|---|---|---|
| 1 | Not Update Yet | O fluxo está a aguardar processamento ou em processamento. Tente novamente mais tarde. |
| 2 | No change found in file transfered. | Processamento concluído: nenhuma alteração detetada no fluxo. |
| 3 | Result not available anymore | O fluxo foi processado, mas o ficheiro de resultados já não está disponível. |
| 4 | Error on file transfert | Não foi possível ler o fluxo: envie-o novamente. |
| 4 | Skipped cause newer file found | Fluxo ignorado porque foi enviado um fluxo mais recente. |
Quando o processamento termina, o webservice devolve diretamente o ficheiro de resultados: tem o mesmo formato que o output da importação clássica (ver abaixo).
Formato do resultado
<root> <products> <product> <reference_partenaire>string</reference_partenaire> <status>string</status> <action>string</action> <errors> <error> <id>int</id> <description>string</description> <level>string</level> </error> <!-- ... Várias balizas "error" possíveis ... --> </errors> </product> <!-- ... Várias balizas "product" possíveis ... --> </products> <errors>int</errors> </root>
| Baliza | Descrição |
|---|---|
| reference_partenaire | Identificação do produto do parceiro |
| status | OK se o produto foi inserido na base de dados KO se o produto não foi inserido |
| action |
Lista das ações:
|
| errors |
Lista de erros:
|
Lista dos códigos de erros dos produtos
| Code | Nível | Descrição |
|---|---|---|
| 1 | Fatal | A referência do parceiro é demasiado curta |
| 2 | Fatal | A referência do parceiro não é válida. A referência só pode ter caracteres alfanuméricos |
| 3 | Warning | O nome do produto não foi especificado |
| 4 | Fatal | A marca não foi especificada |
| 5 | Fatal | O género não é válido. Os únicos valores possíveis são: H, F, M, K, G, B |
| 6 | Fatal | O preço deve ser um número |
| 7 | Fatal | O preço deve ser positivo |
| 8 | Warning | O preço é demasiado elevado ( > 1000€ ) |
| 195 | Fatal | O novo preço não pode conter mais de xxx dígitos |
| 81 | Fatal | O preço não poderá ser superior a 180€ |
| 9 | Fatal | A quantidade deve ser um número inteiro |
| 10 | Fatal | A quantidade deve ser positiva |
| 11 | Warning | A cor xxx não existe: o produto não estará disponível através dos filtros de cor |
| 13 | Fatal | A categoria xxx não existe |
| 14 | Warning | A descrição do produto está vazia |
| 15 | Warning | A descrição da cor está vazia |
| 16 | Warning | Não há lista de tamanhos: utilização do tamanho único |
| 17 | Warning | A composição foi especificada, mas não é válida |
| 18 | Fatal | A imagem 1 é obrigatória |
| 19 | Warning | Esta promoção não é válida. A taxa de desconto da promoção deve ser entre 0 e 100. |
| 20 | Warning | O tamanho xxx não existe |
| 200 | Warning | O tamanho xxx não existe para a marca xxx. |
| 201 | Fatal | O código EAN é obrigatório |
| 202 | Fatal | O código EAN xxx na referência xxx no tamanho xxx já está a ser utilizado. |
| 205 | Fatal | Referência parceiro demasiado comprida |
| 23 | Warning | A imagem xxx é inferior a 350x350: esta imagem terá uma má qualidade no site |
| 24 | Warning | A imagem xxx é inferior a 350x350: esta imagem não será apresentada no site |
| 25 | Fatal | Tamanho xxx: Impossível regular o stock |
| 26 | Fatal | Não há stock: o produto não será criado |
| 27 | Fatal | Impossível aceder à imagem 1 ( url xxx ) |
| 28 | Warning | Impossível aceder à imagem xxx ( url xxx ) |
| 30 | Fatal | A quantidade do tamanho xxx é demasiada elevada (Quantité max : xxx) |
| 33 | Fatal | Um produto de género xxx não pode pertencer a categoria xxx |
| 34 | Fatal | A palavra xxx está bloqueada e não deve aparecer no nome do produto. |
| 35 | Fatal | Nome do produto muito comprido, deve conter apenas o nome do modelo. Erro(s) no(s) país(es): xxx |
| 341 | Fatal | A palavra xxx está bloqueada e não deve aparecer na descrição do produto. |
| 36 | Fatal | Impossível importar o produto: o produto possui uma duplicação do par tamanho/cor. |
| 37 | Fatal | Não forneceu informações de idioma para este produto |
| 32 | Fatal | Não foram encontradas informações sobre produtos para este país. |
| 38 | Fatal | O tamanho xxx só pode ser definido uma vez para a referência xxx |
| 39 | Warning | A referência parceira está presente várias vezes, as duplicações foram ignoradas |
| 451 | Fatal | Não há preço para o tamanho xxx no país xxx. (necessário para um desconto) |
| 452 | Warning | Data final do desconto excedida para o tamanho xxx do país xxx. |
| 453 | Fatal | "taxa" (xxx) invalido para o tamanho xxx do país xxx. |
| 454 | Fatal | "taxa" (xxx) > 85% para o tamanho xxx do país xxx. |
| 455 | Warning | O tamanho xxx tem um preço num país (xxx) não definido para o produto. |
| 456 | Warning | O tamanho xxx tem um preço de xxx idêntico ao preço global neste país. |
| 194 | Fatal | O desconto do novo preço não deve ser superior a xxx% |
Exemplos de devolução XML
Exemplo de resposta a uma chamada web serviço KO :
<root> <products></products> <errors>-1</errors> </root>
Exemplo de resposta a uma chamada web serviço OK :
<root> <products> <product> <reference_partenaire>EEAJBCC</reference_partenaire> <status>KO</status> <action>not created</action> <errors> <error> <id>14</id> <description>A descrição do produto está vazia</description> <level>warning</level> </error> <error> <id>4</id> <description>A marca não foi especificada</description> <level>fatal</level> </error> </errors> </product> <product> <reference_partenaire>KJHGFDS</reference_partenaire> <status>OK</status> <action>created</action> </product> </products> <errors>1</errors> </root>
Ficheiros XSD
Ficheiro XSD Multi países
Saitoo Marketplace