flyingluscas / correios-php Goto Github PK
View Code? Open in Web Editor NEWUma maneira fácil de interagir com as principais funcionalidades dos Correios.
License: MIT License
Uma maneira fácil de interagir com as principais funcionalidades dos Correios.
License: MIT License
Laravel 8 requer guzzle 7
Por que essa mudança é importante para você? Como você usaria isso?
Pra que possa ser usado no Laravel 8
Como pode beneficiar outros usuários?
Poderao usar no Laravel 8
Testar com Guzzle 7 e Atualizar o composer.json
Inclua detalhes relevantes sobre o ambiente em que você identificou o bug e como reproduzi-lo.
PHP 7.4
Laravel 8
Existe opção para adicionar o numero do contrato?
O que acontece quando um pacote excede o peso e o volume, ele automaticamente cria um novo pacote.
Olá, gostaria de sugerir uma adição no código para adicionar múltiplos itens de só uma vez através de um método.
A mudança é importante para mim porque atualmente não é possível inserir múltiplos itens de forma dinâmica. Apenas de forma estática, invocado cada método por vez.
Como pode beneficiar outros usuários?
Adicionando multiplos itens de só uma vez.
/**
* array de arrays com Dimensões, peso e quantidade do items.
* @param array|arrays $items
*
* @return self
*/
public function items($items)
{
foreach($items as $item){
$this->items[] = [
'width' => $item[0],
'height' => $item[1],
'length' => $item[2],
'weight' => $item[3],
'quantity' => $item[4],
];
}
return $this;
}
$correios = new Client;
$items = [
[10, 10, 15, .5, 1 ], // largura, altura, comprimento, peso e quantidade
[10, 10, 15, .5, 1 ], // largura, altura, comprimento, peso e quantidade
[10, 10, 15, .5, 1 ], // largura, altura, comprimento, peso e quantidade
[10, 10, 15, .5, 1 ], // largura, altura, comprimento, peso e quantidade
[10, 10, 15, .5, 1 ], // largura, altura, comprimento, peso e quantidade
[10, 10, 15, .5, 1 ] // largura, altura, comprimento, peso e quantidade
];
$correios->freight()
->origin('01001-000')
->destination('87047-230')
->services(Service::SEDEX, Service::PAC)
->items($items)
->calculate();
PHP 7.3.9 (cli) (built: Aug 28 2019 09:28:48) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Windows 10 / x64
There is no reason at all for the method fetchZipCodeAddress to be public, sorry :)
A consulta de preços e prazos com múltiplos serviços já na mesma consulta, conforme indicado no README, parou de funcionar. Acredito que não seja um bug na biblioteca, mas sim uma mudança na resposta do serviços dos correios. Antes, eu realizava a consulta da seguinte forma:
$correios = new Client;
$correios->freight()
->origin('01001-000')
->destination('87047-230')
->services(Service::SEDEX, Service::PAC)
->item(16, 16, 16, .3, 1) // largura, altura, comprimento, peso e quantidade
->item(16, 16, 16, .3, 3) // largura, altura, comprimento, peso e quantidade
->item(16, 16, 16, .3, 2) // largura, altura, comprimento, peso e quantidade
->calculate();
Porém hoje de manhã essa consulta começou a retornar a seguinte resposta:
array(1) {
[0]=>
array(12) {
["Codigo"]=>
string(1) "0"
["Valor"]=>
string(1) "0"
["PrazoEntrega"]=>
string(1) "0"
["ValorMaoPropria"]=>
string(1) "0"
["ValorAvisoRecebimento"]=>
string(1) "0"
["ValorValorDeclarado"]=>
string(1) "0"
["EntregaDomiciliar"]=>
object(stdClass)#458 (0) {
}
["EntregaSabado"]=>
object(stdClass)#449 (0) {
}
["Erro"]=>
string(2) "99"
["MsgErro"]=>
string(76) "Erro inesperado. Descrição: Máximo de 1 código de serviço por consulta."
["ValorSemAdicionais"]=>
string(1) "0"
["obsFim"]=>
object(stdClass)#451 (0) {
}
}
}
Note a mensagem de erro retornada pelos correios: "Erro inesperado. Descrição: Máximo de 1 código de serviço por consulta.". Essa mensagem aparece mesmo acessando o serviço dos correios diretamente pela url http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrecoPrazo no meu browser.
Após identificar o problema, mudei meu código para consultar um serviço de cada vez e depois fazer o merge das respostas:
$freight->services(CorreiosService::SEDEX);
$sedexFreight = $freight->calculate();
$freight->services(CorreiosService::PAC);
$pacFreight = $freight->calculate();
return array_merge($sedexFreight, $pacFreight);
Utilizo a biblioteca correios-php na minha aplicação para calcular o preço e prazo de entregas via Pac e Sedex. Essa consulta é feita diariamente pelos usuários do site. Fui supreendido essa manhã quando esse erro começou a ocorrer em todas as requisições. Decidi criar essa issue como forma de informar os mantenedores e usuários da biblioteca sobre esse problema, para que possam ser tomadas ações a fim de evitá-lo.
Ao fazer um cálculo de preço para determinado cep, caso o correios não possua o complemento definido para o endereço, a aplicação retorna um alert Notice.
O arquivo que apresenta erro esta na pasta vendor/flyingluscas/correios-php/src/Services/ZipCode.php na linha 200. Testei com o cep 13960-000
Pelo que testei, não dá pra saber se um CEP é de área de risco ou não...
Então, esta issue seria uma Feature Request
Este aqui, p.ex., é um desses CEPs: 21862250
A gente pode consultar as áreas de risco aqui:
http://www2.correios.com.br/sistemas/precosPrazos/restricaoentrega/resultado.cfm
Isso já é um problema antigo.
2014: https://extra.globo.com/economia/correios-omite-restricao-de-entrega-em-areas-de-risco-13750185.html
2018: https://www.ecommercebrasil.com.br/noticias/quase-metade-ceps-rio-de-janeiro-restricao-entrega/
Encontrei um plugin pra Magento que consegue reconhecer esses CEPs:
pedro-teixeira/correios#29
E pelo que localizei no plugin, os soft_errors
são os códigos de erro que indicam isso.
Config.xml
<postmethods>40010</postmethods>
<hard_errors>-3,-6,-10,-33,-888,7,99</hard_errors>
<soft_errors>009,010,011</soft_errors>
CorreiosMethod.php
protected function _getSoftErrorMsg($error)
{
$msg = "";
if ($this->getConfigFlag('show_soft_errors')) {
$softErrorList = explode(',', $this->getConfigData('soft_errors'));
$isSoftError = in_array($error, $softErrorList);
if ($isSoftError) {
$msg.= " / Área de Risco";
}
}
return $msg;
}
[edit]
Acabo de inspecionar a resposta da consulta SIGEP no seu código e não vejo nenhuma mensagem de "soft error"...
Estou tendo problemas de obter cotação com alguns CEPs um deles é 13.203-541 alguém sabe como contornar isso?
Ao solicitar a instalação via composer, esse erro é gerado:
Package flyingluscas/correios-php has requirements incompatible with your PHP version, PHP extensions and Composer version:
- flyingluscas/correios-php v2.4.0 requires php ~5.6|~7.0 which does not match your installed version 8.1.0.
Sem essa correção não é possível fazer a instalação da biblioteca.
Teste feito no Xammp, localhost
Hoje baixei o Composer última versão e quando rodo a instalação me aparece um erro de versão de PHP incompatível com a versão deles.
Gostaria de saber se isso é algum erro na minha máquina ou se será corrigido.
A API dos correios foi atualizada: https://ajuda.simplo7.com.br/hc/pt-br/articles/9177898907035-Veja-sobre-a-atualiza%C3%A7%C3%A3o-da-API-dos-Correios
Gostaria de saber se essa biblioteca está funcionando com a nova atualização da API dos correios, pois gostaria de implementá-la em um projeto.
Estou num caso onde preciso adicionar vários itens, mas me deparei com o erro de dimensões fora do limite dos correios, pensei em atribuir o envio a uma variável qualquer, adicionar o item e usar o calculate() para simular o erro, caso erro criar uma nova entrega, só que mesmo em outra variável o Client é o mesmo e o item ainda fica naquela entrega.
Teria como simular o mesmo ou verificar se o próximo item cabe na entrega?
Porque no método "protected function length()" você não esta multiplicando o comprimento com a quantidade de itens?
Forneça uma descrição detalhada da alteração ou adição que você está propondo.
Deixe claro se o problema é um bug, um aprimoramento ou apenas uma pergunta.
Por que essa mudança é importante para você? Como você usaria isso?
Como pode beneficiar outros usuários?
Não é obrigatório, mas sugere uma idéia para implementar adição ou mudança.
Inclua detalhes relevantes sobre o ambiente em que você identificou o bug e como reproduzi-lo.
Boas, uma mudança no webservice e n permite consultar múltiplos serviços
Seria para uma alteração na doc e também no código para permitir somente um ou alguma alteração que possa colocar vários serviços mas fazendo consultas separadas
Como seria possível calcular vários produtos com CEPs diferentes e fazer a soma no final?
Estou tentando implementar em um módulo de frete do Opencart para dropshipping.
Olá Lucas! Tive que fazer uma extensão da class Freght, pois o cliente tem produtos com tamanho menor do que os correios pedem. No inicio eu limitava o tamanho dos produtos com o mínimo necessário, porém passei a pensar se isso não teria que ser feito ao calcular todas as dimensões para envio para API. Então passei a limitar as dimensões mínimas para 1, porém quando um cliente adicionava apenas o produto com as dimensões menores no carrinho e calculava o frete, retornava erro na API dos Correios. Para contornar, tive que adicionar esse item pra definir um mínimo na largura, altura e comprimento.
Eu poderia não limitar no cadastro do produto e apenas adicionar os tamanhos mínimos dos correios no banco, porém com a soma da altura e comprimento, isso seria refletido no valor passado para o cliente, certo?
Acha que posso estar fazendo algo errado para ter surgido essa necessidade? Ou acha que isso seria necessário implementar na lib?
Rastreamento de objetos usando o código SRO dos Correios
Bom dia,
Estou usando pela primeira vez o pacote, e como sabemos as vezes os correios deixam a desejar em estabilidade.
Estou desenvolvendo usando o pacote, porém com gatilho de tabela caso esteja fora do ar.
Como consigo definir o timeout para retornar um erro quando passar de 5 segundos.
Obrigado.
Este código esta funcionando em PHP 5, 5.6, 7.0, 7.1 ou até mesmo em 7.2 ?
São muitas dúvidas e nada pessoal... (Já deixo claro)
Este código esta nas normativas novas dos correios (2017) e que pelo visto já existe novas normativas em (2018)...
Bom, este não é o único que visualizamos que aparentemente esta tudo correto.
Mas, tenho que ser este USUÁRIO questionador, já que estamos enfrentando tantos problemas seja eles em PHP, AJAX ou qualquer impulso anterior á 2017.
E assim vem as dúvidas...
Gostaria de saber se podemos implementar este código em outras ferramentas e até mesmo em outas plataformas...
Espero que tenhamos uma resposta satisfatória e um UPGRADE. (O que neste notamos que o upgrade é notavel).
Por que essa mudança é importante para você? Como você usaria isso?
Como pode beneficiar outros usuários?
Não é obrigatório, mas sugere uma idéia para implementar adição ou mudança.
Inclua detalhes relevantes sobre o ambiente em que você identificou o bug e como reproduzi-lo.
Quando eu envio 1 item com a dimensão 1x1x1, ele dá o erro de ERP-008: Dimensões não Localizadas.
Mas quando eu coloco um item com a dimensão 16x16x16 esse erro não acontece.
Qual o caso? O Pacote não calcula o mínimo automaticamente? E quando eu precisar enviar vários itens, terei que fazer uma checagem antes para validar o valor total das dimensões e peso?
O exemplo do README.md para consulta de CEP gera um erro do cURL.
Código:
use FlyingLuscas\Correios\Client;
require 'vendor/autoload.php';
$correios = new Client;
$correios->zipcode()->find('01001-000');
Mensagem de erro:
Fatal error: Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) in C:\xampp\htdocs\modulo12\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:201 Stack trace: #0 C:\xampp\htdocs\modulo12\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(155): GuzzleHttp\Handler\CurlFactory::createRejection(Object(GuzzleHttp\Handler\EasyHandle), Array) #1 C:\xampp\htdocs\modulo12\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(105): GuzzleHttp\Handler\CurlFactory::finishError(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory)) #2 C:\xampp\htdocs\modulo12\vendor\guzzlehttp\guzzle\src\Handler\CurlHandler.php(43): GuzzleHttp\Handler\CurlFactory::finish(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory)) #3 C:\xampp\htdocs\modulo12\vendor\guzzlehttp\guzzle\src\Handler\Pr in C:\xampp\htdocs\modulo12\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 201
Ao procurar por alguns CEPS, o sistema não identifica o erro e retorna um erro. Por favor, utilize o cep "122430-049" e veja o que acontece.
Este conserto é importante pois alguns sistemas estão quebrando por conta disso.
O método que busca por erros "hasErrorMessage" talvez precise buscar por resultados vazios também!
macOS bigSUR
PHP 7.3
Buscar pelo cep citado acima
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.