ecomplus / app-bling-erp Goto Github PK
View Code? Open in Web Editor NEWE-Com Plus app to integrate Bling ERP
License: GNU General Public License v3.0
E-Com Plus app to integrate Bling ERP
License: GNU General Public License v3.0
Algumas lojas que têm meu contato privado e outras que mandaram na central da comunidade, informaram que receberam email de que não foi completado e a resposta é Bad request, isso está desabilitando os callbacks das lojas, 3 que me reportaram foram:
Artestore (1094), que me mandou o print abaixo:
Strong Nutrition (1119) e Fishing Co (1154)
Segundo o Bling, existem duas formas de importar código de rastreio, quando há alteração de pedido e ele já está dentro do pedido, conforme o corpo abaixo:
{"retorno":{"pedidos":[{"pedido":{"desconto":"0,00","observacoes":"Confirmo pedido de camiseta na cor cinza","observacaointerna":"","data":"2020-12-08","numero":"5398","numeroOrdemCompra":"","vendedor":"John Robert Hoffmann","valorfrete":"0.00","totalprodutos":"140.00","totalvenda":"140.00","situacao":"Atendido","loja":"203168377","numeroPedidoLoja":"5398","tipoIntegracao":"Api","cliente":{"id":"10486197519","nome":"Eli Magno Faleiros","cnpj":"XXX.XXX.XXX-XX","ie":"","rg":"","endereco":"Rua Floriano Peixoto","numero":"1560","complemento":"apto 81","cidade":"Franca","bairro":"Centro","cep":"14.400-760","uf":"SP","email":"[email protected]","celular":"16999993786","fone":"31999999999"},"pagamento":{"categoria":"SITE"},"nota":{"serie":"2","numero":"000149","dataEmissao":"2020-12-09 13:47:02","situacao":"7","valorNota":"140.00","chaveAcesso":"00001200527306000109550020000001491996792554"},"transporte":{"transportadora":"MIOR TRANSPORTES LTDA","cnpj":"05.756.860/0001-73","tipo_frete":"R","qtde_volumes":"1","enderecoEntrega":{"nome":"Eli Magno Faleiros","endereco":"Rua Floriano Peixoto","numero":"10","complemento":"apto 81","cidade":"Franca","bairro":"Centro","cep":"14.400-760","uf":"SP"},"volumes":[{"volume":{"id":"10499665973","idServico":"10226330878","idOrigem":"10486197530","servico":"JADLOG","codigoServico":"3","codigoRastreamento":"","valorFretePrevisto":"0.00","remessa":null,"dataSaida":"","prazoEntregaPrevisto":"","valorDeclarado":"0.00","avisoRecebimento":false,"maoPropria":false,"dimensoes":{"peso":"0.210","altura":"0","largura":"0","comprimento":"0","diametro":"0"},"urlRastreamento":"www2.correios.com.br/sistemas/rastreamento/"}}],"servico_correios":"JADLOG"},"itens":[{"item":{"codigo":"001082GG000021","descricao":"CAMISETA MASCULINA ZIPER Cor:MESCLA;Tamanho 1:GG","quantidade":"1.0000","valorunidade":"140.0000000000","precocusto":"52.5000000000","descontoItem":"0.00","un":"un","pesoBruto":"0.21000","largura":"2cm","altura":"21cm","profundidade":"29.7cm","descricaoDetalhada":"","unidadeMedida":"cm","gtin":"7898427180039"}}],"parcelas":[{"parcela":{"idLancamento":"0","valor":"140.00","dataVencimento":"2020-12-08 00:00:00","obs":"Cart\u00e3o de cr\u00e9dito (1/1)","destino":"1","forma_pagamento":{"id":"1310089","descricao":"Pagar.me","codigoFiscal":"3","bandeira":"1"}}}],"codigosRastreamento":{"codigoRastreamento":""}}}]}}
https://bling.com.br/Api/v2/pedido/5398/json/?apikey=xxxx
Já da nota fiscal está aqui um exemplo
https://ajuda.bling.com.br/hc/pt-br/articles/360046379674-GET-notafiscal-numero-serie-
Algumas lojas estão perdendo sincronização com o Bling, pois está desativando pelo callback. Então segundo o que informaram no ticket, eles querem ter nossa resposta 200, independente de qualquer coisa, para saber que a notificação chegou.
Error: No authentication found
at noAuthReject (/workspace/node_modules/@ecomplus/application-sdk/lib/methods/get-auth.js:17:21)
at /workspace/node_modules/@ecomplus/application-sdk/lib/methods/get-auth.js:75:15
at processTicksAndRejections (internal/process/task_queues.js:95:5) {..
Descreva o erro
O status do pedido foi alterado no bling, o mesmo chegou na plataforma, pois temos no log:
10:05:35.929 AM
Starting #1077 ___importation/order_numbers/6047
Até encontrou o pedido:
10:05:37.253 AM
#1077 found order 6047
Mas o status não foi alterado.
Não mostra nenhum erro posterior, ao filtrar por esse evento:
A documentação ainda ficou sem falar do "Código da loja no Bling", acho que isto é importante.
A parte sobre status de pedido acho que está errada (ou só incompleta) e a instrução que consta sobre reserva de estoque não sei se é válida, acho que isto vai depender da operação da loja no ERP, não tem ligação específica com a integração...
Ocorreu o webhook, conforme podemos ver aqui:
18 de mar. de 2021
12:33:22.682 PM app
Webhook #1225 603852139332dd6865df4a8b [products]
12:33:22.682 PM app
Starting #1225 _exportation/product_ids/603852139332dd6865df4a8b
Porém não surtiu efeito no Bling. Tenho a conta da cliente aqui do Bling, esperei meia hora, mas não teve resposta.
Ela me indicou outros produtos para olhar também
Várias lojas relataram que estão tendo problema com status de pedidos, de exportar pedidos automaticamente para o bling ou importar e no log o erro informado é:
Error: timeout of 30000ms exceeded
at createError (/workspace/node_modules/axios/lib/core/createError.js:16:15)
at RedirectableRequest.handleRequestTimeout (/workspace/node_modules/axios/lib/adapters/http.js:280:16)
at RedirectableRequest.emit (events.js:375:28)
at RedirectableRequest.emit (domain.js:532:15)
at Timeout._onTimeout (/workspace/node_modules/follow-redirects/index.js:166:12)
at listOnTimeout (internal/timers.js:557:17)
at processTimers (internal/timers.js:500:7)
Já tem mais ou menos 1 mes que isso está ocorrendo, com algumas lojas tendo pedidos estornados, porque o pedido entra na loja e não é exportado para o Bling, dai a loja só acompanha pedido direto no bling. Ontem isso ocorreu de forma mais assídua, tentei fazer exportação manual e deu esse erro. Alguns, segundo o log, nem pra fila de exportação foi, porque eu pesquisava pelo ID e não mostrava no log, no caso ai deve ser até outro problema com o trigger
Alguns pedidos não estão sendo enviados ao Bling de forma automática, peguei um exemplo no log:
7:45:16.233 AM
app
Webhook #1162 60420b586d50911b6054e2d7 [orders]
7:45:16.233 AM
app
Starting #1162 _exportation/order_ids/60420b586d50911b6054e2d7
7:45:16.341 AM
app
Function execution took 556 ms, finished with status code: 202
7:45:17.406 AM
app
Unhandled rejection
Essa foi uma segunda tentativa e mesmo assim o Bling não aceitou o pedido e assim, ficou perdido no meio dos pedidos do cliente, que acabou sendo acionado por receber um pedido e não enviar ao cliente.
Quando clico pra filtrar vejo só isso
labels.execution_id = "txrepbw2z5k6" (primeira tentativa)
labels.execution_id = "txrelhgzbbyx" (segunda tentativa)
O callback de situação de nota não foi concluído corretamente.
Dados enviados:
{“retorno”:{“notasfiscais”:[{“notafiscal”:{“serie”:“2”,“numero”:“000293”,“loja”:“203497102”,“numeroPedidoLoja”:“5545”,“tipo”:“S”,“situacao”:“Emitida DANFE”,“cliente”:{“nome”:“Ricardo Gandolfi”,“cnpj”:“xxxxxxxxxxx”,“ie”:"",“rg”:"",“endereco”:“Rua S\u00e3o Pedro”,“numero”:“637”,“complemento”:“Ap 51",“cidade”:“Curitiba”,“bairro”:“Cabral”,“cep”:“80.035-020”,“uf”:“PR”,“email”:"[email protected]”,“fone”:“xxxx1823606”},“contato”:“Ricardo Gandolfi”,“cnpj”:“xxxxxxxxxxx”,“vendedor”:"",“dataEmissao”:“2020-12-17 13:45:38”,“valorNota”:“96.75”,“chaveAcesso”:“43201206051394000193550020000002931155433452”,“xml”:“https://www.bling.com.br/b/relatorios/nfe.xml.php?s%26chaveAcesso=43201206051394000193550020000002931155433452",“linkDanfe”:“https://www.bling.com.br/b/doc.view.php?id=b0c37f559c68a45e6c1a87e33457928d”,“codigosRastreamento”:{“codigoRastreamento”:“OM804811292BR”},“cfops”:[“6108”],“tipoIntegracao”:“Api”,“transporte”:{“volumes”:[{“volume”:{“id”:“10615541050”,“idServico”:“10299909884”,“servico”:"SEDEX CONTRATO AG”,“codigoServico”:“03220”,“codigoRastreamento”:“OM804811292BR”,“valorFretePrevisto”:“27.82”,“remessa”:null,“dataSaida”:"",“prazoEntregaPrevisto”:"",“valorDeclarado”:“0.00”,“avisoRecebimento”:false,“maoPropria”:false,“dimensoes”:{“peso”:“0.056”,“altura”:“0”,“largura”:“0”,“comprimento”:“0”,“diametro”:“0”},“urlRastreamento”:“www2.correios.com.br/sistemas/rastreamento?objetos=OMOM804811292BRBR"}}],“servico_correios”:"SEDEX CONTRATO AG”,“enderecoEntrega”:{“nome”:“Ricardo Gandolfi”,“endereco”:“Rua S\u00e3o Pedro”,“numero”:“637”,“complemento”:“Ap 51”,“cidade”:“Curitiba”,“bairro”:“Cabral”,“cep”:“80.035-020”,“uf”:“PR”}}}}]}}
Não sei se é o certo, mas vamos lá:
https://github.com/ecomplus/app-bling-erp/blob/master/functions/lib/integration/export-product.js#L36
Faz um get no produto no Bling, se der erro, retorna aqui, se não der tem o retorno da promise. Quando faz um get de um produto que não existe no Bling, o retorno é:
{
"retorno": {
"erros": [
{
"erro": {
"cod": 14,
"msg": "A informacao desejada nao foi encontrada"
}
}
]
}
}
Com status 200
Ou seja, continua e aparentemente passa por aqui https://github.com/ecomplus/app-bling-erp/blob/master/functions/lib/integration/export-product.js#L51 pra criar o produto e está rolando algum erro (não mostra no log) e ai acho que segue pra próxima then e vai para tentar um POST em
/produtoLoja/${blingStore}/${codigo}, porém o produto não foi criando no then anterior e ai dá erro, resultando em um log:
Error: Status 404 {"retorno":{"erros":{"123":"O produto com este código não foi encontrado no sistema"}}} -- Request -- post /produtoLoja/203758074/cat0049/json/ undefined /
Isso ai já rolou em várias lojas, mas ultimamente isso está frequente.
Na documentação do Bling tem um quadro mostrando que para buscar as imagens dos produtos, precisa ter o parâmetro imagem
com valor S
, conforme:
Parâmetro | Descrição | Tipo |
apikey |
Sua apikey | string |
estoque |
Parâmetro opcional, informar "S" para incluir estoque atual por depósito e total no retorno | string |
loja |
Parâmetro opcional, informar o "Código da Loja" para incluir informações específicas de uma loja vinculada ao produto | string |
imagem |
Parâmetro opcional, informar "S" para incluir as imagens vinculadas ao produto. | string |
Para estoque, mesma coisa, como o tem um tópico disso na comunidade, fui verificar e não vi esses parâmetros na requisição. Fiz um teste:
https://bling.com.br/Api/v2/produto/300936/json/?estoque=S&imagem=S&apikey=xxxx e funcionou:
{
"retorno": {
"produtos": [
{
"produto": {
"id": "10855930936",
"codigo": "300936",
"descricao": "Popsockets Graphic Gen2 Checker Black Suporte Celular Clip",
"tipo": "P",
"situacao": "Ativo",
"unidade": "un",
"preco": "59.9000000000",
"precoCusto": "0.0000000000",
"descricaoCurta": "",
"descricaoComplementar": "",
"dataInclusao": "2021-01-11",
"dataAlteracao": "2021-01-12",
"imageThumbnail": null,
"urlVideo": "",
"nomeFornecedor": "POPSOCKETS",
"codigoFabricante": "800467",
"marca": "",
"class_fiscal": "3926.90.90",
"cest": "",
"origem": "1",
"idGrupoProduto": "0",
"linkExterno": "",
"observacoes": "",
"grupoProduto": null,
"garantia": "3",
"descricaoFornecedor": "",
"idFabricante": "10340759284",
"categoria": {
"id": "2196560",
"descricao": "CAPA SMARTPHONE"
},
"pesoLiq": "0.02000",
"pesoBruto": "0.05000",
"estoqueMinimo": "3.00",
"estoqueMaximo": "8.00",
"gtin": "842978135052",
"gtinEmbalagem": "",
"larguraProduto": "8",
"alturaProduto": "15",
"profundidadeProduto": "1",
"unidadeMedida": "Centímetros",
"itensPorCaixa": 0,
"volumes": 0,
"localizacao": "",
"crossdocking": "1",
"condicao": "Novo",
"freteGratis": "N",
"producao": "T",
"dataValidade": "0000-00-00",
"spedTipoItem": "04",
"imagem": [
{
"link": "http://www.comercial.customic.com.br/news/popsocket/todos/fotos_pop/300936-CheckerBlackBK/Checker-Black_02_Grip-Expanded 1.png",
"validade": "S/ Validade",
"tipoArmazenamento": "externo"
},
{
"link": "http://www.comercial.customic.com.br/news/popsocket/todos/fotos_pop/300936-CheckerBlackBK/Checker-Black_01_Top-View 1.png",
"validade": "S/ Validade",
"tipoArmazenamento": "externo"
},
{
"link": "http://www.comercial.customic.com.br/news/popsocket/todos/fotos_pop/300936-CheckerBlackBK/Checker-Black_03_Collapsed 1.png",
"validade": "S/ Validade",
"tipoArmazenamento": "externo"
},
{
"link": "http://www.comercial.customic.com.br/news/popsocket/todos/fotos_pop/300936-CheckerBlackBK/Checker-Black_04_Device-Black-Collapsed 1.png",
"validade": "S/ Validade",
"tipoArmazenamento": "externo"
},
{
"link": "http://www.comercial.customic.com.br/news/popsocket/todos/fotos_pop/300936-CheckerBlackBK/Checker-Black_05_Device-Black-Expanded 1.png",
"validade": "S/ Validade",
"tipoArmazenamento": "externo"
},
{
"link": "http://www.comercial.customic.com.br/news/popsocket/todos/fotos_pop/300936-CheckerBlackBK/Checker-Black_06_Device-White-Collapsed 1.png",
"validade": "S/ Validade",
"tipoArmazenamento": "externo"
},
{
"link": "http://www.comercial.customic.com.br/news/popsocket/todos/fotos_pop/300936-CheckerBlackBK/Checker-Black_07_Device-White-Expanded 1.png",
"validade": "S/ Validade",
"tipoArmazenamento": "externo"
},
{
"link": "http://www.comercial.customic.com.br/news/popsocket/todos/fotos_pop/300936-CheckerBlackBK/Checker-Black_08_Top-Expanded 1.png",
"validade": "S/ Validade",
"tipoArmazenamento": "externo"
}
],
"camposCustomizados": {
"precisaDeBateriasOuPilhas": "Não",
"regulamentacoesAplicaveisAProdutosPerigosos": "Não se aplica",
"marcaDaCapa": "Original Usa",
"modeloDaCapa": "Graphic - Generation 2 / Geração 2 (Nova Versão)",
"marcaDeCelular": "Suporte Celular",
"modeloDeCelular": "Pop Socket / Popsocket / Pop Sockets",
"alturaDoPacotecm": "18",
"larguraDoPacotecm": "9",
"profundidadeDoPacotecm": "9",
"codigoAuxiliar": "800467",
"material": "800467",
"tipoDeCapa": "Popgrip / Popclip / Ring / Selfie / Dedo / Tablet / Ipad / Iphone / Samsung / Motorola / Lg / Tripé / Kindle / Capa / Capinha / Suporte Carro / Suporte Veicular",
"tipotamanhoDaBateria": "Bateria ou Pilha 9 V",
"bateriasOuPilhasInclusas": "Sim",
"composicaoDaBateria": "Alcalina",
"embalagemDaBateriaOuPilhaDeLitio": "Pilhas ou baterias contidas no equipamento"
},
"estoqueAtual": 8,
"depositos": [
{
"deposito": {
"id": "9585657589",
"nome": "Geral",
"saldo": "8.0000000000",
"desconsiderar": "N",
"saldoVirtual": "8.0000000000"
}
},
{
"deposito": {
"id": "10835075497",
"nome": "VIRTUAL",
"saldo": 0,
"desconsiderar": "N",
"saldoVirtual": 0
}
}
]
}
}
]
}
}
Alguns lojistas que possuem um volume maior de pedidos recebem constantemente que o callback de pedidos e estoque não estão sendo concluídos corretamente, a resposta é sempre:
Error: could not handle the request
O pedido https://app.e-com.plus/#/resources/orders/6043b4286d50911b60560894 entrou com sku "sku\":\"150350_Sarja_Preta_GG\"
, conforme dá pra ser visto no log 80570 da loja e assim ficou dentro do pedido na plataforma, porém no bling subiu como 150350_Sarja_Preta_G, de acordo com o corpo:
#1035 {"numero_loja":"1800","data":"06/03/2021","numero":"1800","loja":203419468,"cliente":{"nome":"PAULO XXX","tipoPessoa":"F","cpf_cnpj":"xxx","email":"[email protected]","celular":"XXX","endereco":"xxx","numero":"1277","complemento":"LOJA","bairro":"CENTRO","cep":"00.600-000","cidade":"São Joaquim da Barra","uf":"SP"},"itens":[{"item":{"codigo":"150350_Sarja_Preta_G","descricao":"Camisa Sarja Masculina Preta Manga Curta / GG","un":"Un","qtde":1,"vlr_unit":79.9}}],"parcelas":[{"parcela":{"data":"06/03/2021","vlr":89.29,"obs":"Pagar com Pix (1/1)"}}],"transporte":{"transportadora":"Correios","servico_correios":"SEDEX","peso_bruto":0.00035,"dados_etiqueta":{"nome":"PAULO XXXX","endereco":"XX","numero":"XXX","complemento":"LOJA","bairro":"CENTRO","cep":"00.600-000","municipio":"São Joaquim da Barra","uf":"SP"}},"vlr_frete":15.78,"vlr_desconto":6.39}
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
Warning
These dependencies are deprecated:
Datasource | Name | Replacement PR? |
---|---|---|
npm | querystring |
|
npm | standard-version |
These updates are currently rate-limited. Click on a checkbox below to force their creation now.
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
@google-cloud/pubsub
, firebase-admin
, firebase-functions
, node
, npm
, uglify-js
)@commitlint/cli
, @commitlint/config-conventional
)These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.
.github/workflows/create-release.yml
actions/checkout v3
actions/create-release v1
.github/workflows/deploy.yml
actions/checkout v3
actions/setup-node v3
actions/cache v2
actions/checkout v3
actions/setup-node v3
actions/cache v2
.github/workflows/publish.yml
actions/checkout v3
actions/setup-node v3
actions/cache v2
functions/package.json
@ecomplus/application-sdk ^22.0.0-firestore.1.15.7
@google-cloud/firestore ^4.15.1
@google-cloud/pubsub ^3.4.1
axios ^0.27.2
express ^4.18.2
firebase-admin ^11.10.0
firebase-functions ^4.4.1
form-data ^3.0.1
js2xmlparser ^4.0.2
querystring ^0.2.1
eslint ^6.8.0
eslint-plugin-promise ^4.3.1
firebase-functions-test ^0.3.3
node 16
npm ^8.19.0
package.json
dotenv ^10.0.0
firebase-tools ^12.4.4
uglify-js ^3.17.4
@commitlint/cli ^13.2.1
@commitlint/config-conventional ^13.2.0
husky ^4.3.8
standard ^16.0.4
standard-version ^9.5.0
node 16
npm ^8.19.0
.nvmrc
node 16
Produto não foi encontrado para atualizar o estoque, gerando o seguinte erro:
9:08:45.550 AM |
---|
app > Bling callback: #1035 150350_Sarja_Vinho_GG => 0 |
---|
9:08:46.825 AM |
---|
app #1035 skipping 150350_Sarja_Vinho_GG / undefined |
---|
Se na configuração do app estiver configurado um depósito, buscar o estoque do depósito.
{
"retorno": {
"estoques": [
{
"estoque": {
"id": "12345",
"codigo": "prod",
"nome": "Produto",
"estoqueAtual": 2,
"depositos": [
{
"deposito": {
"id": "1234561",
"nome": "Deposito 1",
"saldo": "3.00",
"desconsiderar": "N"
"saldoVirtual": 2
}
},
{
"deposito": {
"id": "1234562",
"nome": "Deposito 2 (desconsidera o saldo)",
"saldo": 0,
"desconsiderar": "S"
"saldoVirtual": -1
}
}
]
}
}
]
}
}
Solicitação do grupo customic para trabalho com depósitos diferentes
Segundo lojistas, não existe parâmetro de venda aprovada, é possível criar isso no Bling, mas muitos não usam. Pelo que conversei com lojistas, normalmente é enviado só pedido aprovado, se for cancelado, atualiza para cancelado. Porque todos os marketplaces fazem isso, entao é um fluxo normal. Se cai pedido aguardando pagamento, teria que fazer reserva de estoque e enviar pro Bling essa reserva de estoque. Porque quem normalmente tira nota fiscal, nem olha status, se cai no Bling, já retira nota e dá sequencia.
@leomp12
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.