--- name: Catálogo Bling - Fix envio de estoque (2026-04-23) description: OAuth Bling sem scope Depositos fazia pular envio de estoque. Fallback via /estoques/saldos resolve sem reautorizar. type: project originSessionId: b36e383a-8f99-440c-a4c8-ab2f0625f864 --- # Catálogo Bling - Envio de estoque com fallback (2026-04-23) ## Problema Após fix do cartesiano de variações, produtos enviados ao Bling ficavam com **saldo 0** em todas as variações. Log revelava: ``` WARNING - [CATALOGO-BLING] Erro ao buscar depositos: {"error":"insufficient_scope","description":"The request requires higher privileges than provided by the access token"} WARNING - [CATALOGO-BLING] Deposito padrao nao encontrado - estoque nao enviado ``` ## Causa O app OAuth do Bling (configurado no painel de apps do Bling pela conta do desenvolvedor) **não tem o scope `Depositos` liberado**. Então `GET /depositos` retorna `insufficient_scope` — e o sistema abortava o envio de estoque. Scopes por app são **fixos na configuração do aplicativo Bling**, não dá pra adicionar via OAuth flow. Precisaria reconfigurar o app no painel do Bling E reautorizar todas as contas. ## Fix `CatalogoBlingSync::obterDepositoPadrao` agora tem fallback: 1. Tenta `GET /depositos` (rápido, mas pode falhar por scope) 2. Se falhar, tenta `GET /estoques/saldos?idsProdutos[]={produtoId}` usando o produto **recém criado** — esse endpoint retorna depósitos junto do saldo e usa scope `Estoques` básico (que todo app tem) 3. Usa o primeiro depósito retornado Depósitos da GotechBr descobertos no teste: `8929029707` (padrão) e `14888449281` (secundário). ## Teste validado Produto 14 "Camiseta Teste Cartesiano GoTechBR": - 14 variações cartesianas (P/M/G/GG × Branco/Preto/Azul/Vermelho) - Todas com SKU único (CAMIS-P-BRANC7990 etc.) - Todas com saldo 10 (ou 5 para Vermelho, conforme input) - Deposito 8929029707 ## Arquivos modificados - `app/Libraries/CatalogoBlingSync.php` — método `obterDepositoPadrao($api, ?int $blingProdutoId = null)` com fallback para `/estoques/saldos` Deploy feito via pscp .tmp → php -l → mv atomic + pkill php-cgi (OPcache). ## How to apply - Todo produto novo enviado ao Bling vai carregar estoque junto automaticamente, independente de scope Depositos. - Se o usuário tiver outro cliente Bling com scope restrito, mesmo fallback se aplica. ## Relacionados - [[catalogo-variacoes-cartesiano-2026-04-23]] — fix cartesiano que precedeu este