Como incluir pedido de venda no Protheus por API (MATA410)
Por Cesar Ramalho (abre em nova aba), HSB Consultoria · Atualizado em
Para incluir um pedido de venda no Protheus por API com o HyperSync, o sistema de fora faz um POST no endpoint ExecAuto da MATA410, com o cabeçalho (SC5) e os itens (SC6) na mesma chamada. A rotina padrão valida o pedido como validaria na tela, e o retorno diz que gravou ou traz a mensagem de erro da própria rotina.
- Sem fonte ADVPL: o endpoint é configurado no HyperSync e já está em produção.
- Síncrono para resposta na hora; assíncrono, com ticket, para picos de pedidos.
- Campos com o nome do Protheus: C5_CLIENTE, C6_PRODUTO, C6_QTDVEN.
O endpoint e a chamada completa
O endpoint sai dos 6 passos do configurador. Quem chama usa a rota única do HyperSync, com o token do REST do Protheus e a empresa e filial no header tenantId.
O endpoint
- 1Direção
- Entrada
- 2Tipo
- ExecAuto
- 3Execução
- Síncrona, ou assíncrona para picos
- 4Configuração
- Rotina MATA410, com a inclusão permitida
- 5Autorização
- O usuário do Protheus da integração
- 6Sandbox
- Testa sem gravar e gera o cURL
Os 6 passos estão explicados em Como criar uma API REST no Protheus sem escrever ADVPL.
A chamada
POST /api/v1/hypersync/execute
Authorization: Bearer <token do REST do Protheus>
tenantId: 99,01
Content-Type: application/json
{
"id": 42,
"function": "MATA410",
"action": 3,
"data": {
"cabec": {
"C5_TIPO": "N",
"C5_CLIENTE": "000231",
"C5_LOJACLI": "01",
"C5_CONDPAG": "001",
"C5_EMISSAO": "20261013"
},
"itens": [
{
"C6_ITEM": "01",
"C6_PRODUTO": "PA-00102",
"C6_QTDVEN": 2,
"C6_PRCVEN": 899.9,
"C6_TES": "501"
},
{
"C6_ITEM": "02",
"C6_PRODUTO": "PA-00387",
"C6_QTDVEN": 1,
"C6_PRCVEN": 459.5,
"C6_TES": "501"
}
]
}
}O que vai no corpo
- function
- A rotina: MATA410. Fica fora de data.
- action
- 3 inclui, 4 altera, 5 exclui. O endpoint define quais são permitidas.
- data.cabec
- Os campos da SC5. O C5_NUM pode ficar de fora: a rotina numera o pedido.
- C5_CLIENTE e C5_LOJACLI
- Código e loja de um cliente que já existe na SA1.
- C5_CONDPAG
- A condição de pagamento cadastrada no Protheus.
- data.itens
- Uma linha por item da SC6: produto da SB1, quantidade, preço e TES.
- Datas
- Em AAAAMMDD, como 20261013.
Os campos obrigatórios são os do dicionário do seu ambiente: o que a tela da MATA410 exige, a chamada também exige. Não há de-para; os nomes são os do Protheus.
A resposta: gravou ou a rotina recusou
Sucesso
{ "successMessage": "Registro incluído via execauto com sucesso!" }A execução fica na Auditoria: quem chamou, empresa e filial, entrada, retorno e tempo.
Erro de validação da rotina
{
"errorMessage": "<a mensagem da MATA410, a mesma que o Protheus mostraria na tela>"
}O errorMessage traz a mesma mensagem que o Protheus mostraria na tela. Um C5_CLIENTE que não existe na SA1, por exemplo, volta aqui com a recusa da própria rotina.
Antes de a rotina rodar, a chamada volta 400 quando falta o id, quando o endpoint não existe ou está inativo e quando o usuário não está na lista de autorizados.
Síncrono ou assíncrono
No síncrono, a resposta acima volta na mesma chamada. Quando os pedidos chegam em pico e quem chama não precisa esperar, o endpoint pode ser assíncrono: a chamada entra na fila e responde na hora com um ticket.
1. Resposta na hora
{ "ticket": "3f6c1e9a-7b2d-4c58-9a41-0d2e8f5b6c17" }2. Resultado depois
GET v1/hypersync/getresponse?ticket=3f6c1e9a-7b2d-4c58-9a41-0d2e8f5b6c17
Volta 404 se o ticket não existe. O resultado também fica na Auditoria, com o status Pendente até terminar e Concluído depois.
3. Aviso ao concluir
Opcional: o Protheus chama um conector de webhook (POST, PUT ou PATCH) sempre, só no sucesso ou só no erro. O corpo é montado com variáveis da execução: ticket, status, endpoint, empresa e filial, quem chamou, duração e retorno.
O modo assíncrono é o que roda no pipeline da Disney, com mais de 10 milhões de integrações por mês. Ver o case.
O cliente já precisa estar na SA1
O pedido só aponta o código e a loja do cliente em C5_CLIENTE e C5_LOJACLI. Se quem vende só conhece o CNPJ, um endpoint Query SQL na SA1 devolve o código antes de mandar o pedido.
Consulta pelo CNPJ:
{
"id": 44,
"data": {
"fields": ["A1_COD", "A1_LOJA"],
"params": "A1_CGC = '12345678000190'"
}
}Resposta:
{ "result": [ { "a1_cod": "000231", "a1_loja": "01" } ] }Se não vier nada, o cliente é cadastrado antes por um endpoint de entrada (ExecAuto ou RecLock) e o pedido vai em seguida. Quem orquestra essa sequência é o sistema que chama.
Quem chama o endpoint
Loja virtual ou sistema próprio
Faz o POST direto, com o token do REST do Protheus de um usuário autorizado no endpoint.
Marketplace
A própria plataforma ou um middleware de vocês converte o pedido para os campos do Protheus e chama o endpoint.
Middleware
Recebe o aviso da loja ou do marketplace, consulta a SA1, monta o cabec e os itens e faz a chamada da MATA410.
Não há conector pronto por marca: Shopify, VTEX e Mercado Livre são exemplos de quem chama. O HyperSync também não recebe webhook de outro sistema. Mais sobre isso em Integrar o Protheus a e-commerce e marketplace.
Perguntas frequentes
Dá para mandar o cabeçalho e os itens do pedido na mesma chamada?+
O pedido incluído por API passa pelas validações da MATA410?+
O que acontece se o cliente do pedido não existir na SA1?+
Consigo testar a inclusão do pedido sem gravar de verdade?+
Quando usar o modo assíncrono para pedidos de venda?+
O HyperSync tem conector pronto para Shopify, VTEX ou Mercado Livre?+
Veja o endpoint de pedido de venda ficar pronto para produção.
A demonstração monta o endpoint numa conversa, no visual do configurador. Nenhum Protheus real é acessado.