Master Data e formulário

Estou criando um formulário para que os clientes interessados em vender no marketplace preencha para que seja analisado. Esses dados devem cair no MasterData, onde eu já criei a entidade de dados e a estrutura. Fui para o HTML, CSS, e JS, para fazer a interface e fiz a ligação pela propriedade name e a requisição conforme manda a documentação

fetch('/api/dataentities/FO/documents', {
        method: 'POST',
        headers: {
            "content-type": 'application/json',
        },
        body: JSON.stringify(data)
    })
        .then(function (response) {
            return response.json()
        })
        .then(function (response) {
            console.log('sucess', response)
        })
})

Porém quando clico em enviar o formulário, aparece o seguinte erro no console:


Alguém aqui poderia me ajudar?

1 Like

Olá @gleyciane.costa, tudo bem?

Você precisa utilizar o endpoint absoluto em lugar de um endpoint relativo, ou seja, em lugar do endereço relativo:

fetch(‘/api/dataentities/FO/documents’,

Você precisa informar o endereço absoluto:

https://{accountName}.{environment}.com.br/api/dataentities/FO/documents

Outro ponto é que provável que a tua requisição precisa enviar no header o

'Content-Type': 'application/json'
'VtexIdclientAutCookie': {seu-token}

ou então enviar a combinação do AppKey e AppToken

'Content-Type': 'application/json'
'X-VTEX-API-AppKey': 'yyyy'
'X-VTEX-API-AppToken': 'yyyy'

Segue um exemplo completo:

var myHeaders = new Headers();
myHeaders.append("X-VTEX-API-AppToken", {YourAppToken});
myHeaders.append("X-VTEX-API-AppKey", {YourAppKey});
myHeaders.append("Accept", "application/json");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "fieldname1": "valor desejado 1",
  "fieldname2": "valor desejado 2",
  "fieldname3": "valor desejado 3"
});

var requestOptions = {
  method: 'PATCH',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://{account}.vtexcommercestable.com.br/api/dataentities/{{Entity}}/documents", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
1 Like

Boa tarde @andremiani o que seria AppToken e AppKey?

Olá @gleyciane.costa

São as credenciais de autenticação usadas para garantir o acesso seguro aos dados que você deseja compartilhar com as integrações, sem expor sua conta a aplicações ou usuários não autorizados.

https://help.vtex.com/pt/tutorial/chaves-de-aplicacao--2iffYzlvvz4BDMr6WGUtet

2 Likes

Verifiquei aqui, vou adicionar as credenciais e ver o que acontece. Obrigada!

1 Like

Gerei o token, e a chave, porém:
index.js:23 Uncaught ReferenceError: “token” is not defined
at index.js:23:42
(anonymous) @ index.js:23

coloquei token entre aspas para substituir o token (as letras aleatórias).

Deu erro também… @andremiani

@gleyciane.costa compartilha teu código ocultando tua AppKey e tua AppToken

FORMULÁRIO NO HTML

<form class="form-example">
        <div class="form-example__container">
            <div class="div1">
                <div class="form-example__box">
                    <label for="name">Razão Social</label>
                    <input type="text" name="razao" class="form-razao" />
                </div>
                <div class="form-example__box">
                    <label for="lastname">Nome fantasia</label>
                    <input type="text" name="fantasia" class="form-fantasia" />
                </div>
                <div class="form-example__box">
                    <label for="city">CNPJ</label>
                    <input type="text" name="cnpj" class="form-cnpj" />
                </div>
                <div class="form-example__box">
                    <label for="company">Inscrição Estadual</label>
                    <input type="text" name="inscricao" class="form-inscricao" />
                </div>
                <div class="form-example__box">
                    <label for="name">Nome do responsável</label>
                    <input type="text" name="nameresponsavel" class="form-nomeresponsavel" />
                </div>
                <div class="form-example__box">
                    <label for="lastname">Sobrenome do responsável</label>
                    <input type="text" name="lastname" class="form-lastname" />
                </div>
            </div>
            <div class="div2">
                <div class="form-example__box">
                    <label for="city">Email</label>
                    <input type="text" name="email" class="form-email" />
                </div>
                <div class="form-example__box">
                    <label for="company">Estado</label>
                    <input type="text" name="estado" class="form-estado" />
                </div>
                <div class="form-example__box">
                    <label for="name">Cidade</label>
                    <input type="text" name="city" class="form-city" />
                </div>
                <div class="form-example__box">
                    <label for="lastname">Website</label>
                    <input type="text" name="url" class="form-url" />
                </div>
                <div class="form-example__box">
                    <label for="city">Celular</label>
                    <input type="text" name="city" class="form-phone" />
                </div>
                <div class="form-example__box">
                    <label for="company">Você já vende em algum Marketplace? Se sim, quais?</label>
                    <input type="text" name="marketplace" class="form-marketplace" />
                </div>
            </div>
        </div>
        <input class="form-button" type="submit" value="Submit" />
    </form>

JS

var myHeaders = new Headers();
myHeaders.append("X-VTEX-API-AppToken", {});
myHeaders.append("X-VTEX-API-AppKey", {});
myHeaders.append("Accept", "application/json");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
    city: document.querySelector('.form-city').value,
    cnpj: document.querySelector('.form-cnpj').value,
    email: document.querySelector('.form-email').value,
    fantasia: document.querySelector('.form-fantasia').value,
    inscricao: document.querySelector('.form-inscricao').value,
    lastname: document.querySelector('.form-lastname').value,
    marketplace: document.querySelector('.form-marketplace').value,
    nomeresponsavel: document.querySelector('.form-nomeresponsavel').value,
    phone: document.querySelector('.form-phone').value,
    razao: document.querySelector('.form-razao').value,
    url: document.querySelector('.form-url').value,
    estado: document.querySelector('.form-estado').value
});

var requestOptions = {
  method: 'PATCH',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://hospitalarshop.vtexcommercestable.com.br/api/dataentities/FO/documents", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

@gleyciane.costa no erro compartilhado fala de um problema na linha 23

E no teu JS não existe nenhuma variável chamada token no teu código… e na linha 23 temos apenas o

method: ‘PATCH’,

Poderia rodar o teu código e compartilhar o erro novamente?

erro

Oi @gleyciane.costa, tanto a AppKey quanto a AppToken devem ser sempre informadas entre aspas para virarem uma string do contrário o sistema vai entender que é uma variável.

exemplo:

myHeaders.append("X-VTEX-API-AppToken", "MEL7BLABLABLABLABLABLABLABLA");
myHeaders.append("X-VTEX-API-AppKey", "vtexappkey-accountname-XPTO");

Como aparentemente você informou o AppToken sem as aspas o sistema entende que é uma variável… e como não existe… dando esse erro “MEL7…not defined”

Faz essa alteração ai que agora vai :slight_smile:

1 Like

Oi @andremiani, bom dia! Tudo bem? Ótima segunda pra você e obrigada por estar me ajudando.
Fiz o concerto das aspas, e agora tá dando erro com o endereço do link, tanto com o endereço absoluto quanto no endereço relativo.