Code Monkey home page Code Monkey logo

melhorenvio-sdk-php's Introduction

SDK para Melhor Envio

🚀 SDK para facilitar a integração com a plataforma Melhor Envio. Utilizando a liguagem PHP.

Índice

Pré-requisitos

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:

É necessario possuir um cadastro na plataforma Melhor Envio

Instalação

Para instalar esse componente em seu projeto utilize o composer. composer require duug-com-br/melhorenvio-sdk-php

Autenticação

Primeiro você deve solicitar a permissão para utilização do aplicativo. Para isso utilize esse codigo de exemplo.

// Instancia o objeto
$MelhorEnvio = new MelhorEnvio\MelhorEnvio(
    "CLIENT ID",
    "SECRET KEY",
    "NOME DO APP",
    "EMAIL TECNICO"
);

// Adiciona a url de callback  
$MelhorEnvio->setCallbackURL("URL PARA RETORNO");

// Solicita a autenticacao
// O usuario será redirecionado para uma página da melhor envio.
$MelhorEnvio->requestAuthorization();

Após a solicitação de permissão o usuário será redirecionado para a url de callback informada. Nessa url será passado um código via GET que será utilizado para a geração de token.

// Solicita o token
$retorno = $MelhorEnvio->requestToken($_GET["code"]);

// Verifica se não ocorreu erro 
if(!$retorno["error"])
{
    // Recupera as informações 
    $retorno = $retorno["data"];
}

Dentro do retorno data é retornado um array com as seguintes informações

(Array)
[
    "accessToken" => "TOKEN PARA REQUISIÇÕES",
    "refreshToken" => "TOKEN PARA RENOVAÇÂO DO accessToken",
    "tokenValidate" => "Data de validade do token (+ 30 dias)"
]

Renovando Token

Exemplo de como renovar um token expirado

// Solicita a atualizacao
$resposta = $MelhorEnvio->refreshToken($refreshToken);

// Verifica se deu certo
if(!$resposta["error"])
{
    // Armaze os novos tokens 
    $resposta["data"];
}

Calculando Frete

Exemplo de como calcular um frete para um determindado produto. Caso haja mais de um produto é apenas replicar a linha onde configuramos o produto.

// Informa o token
$MelhorEnvio->setAccessToken("Access Token");

// Instancia o produto
$Product = new MelhorEnvio\Product();

// Seta as informações do produto.
// Pode duplicar esse item para adicionar mais produtos
$Product->setProducts(
    "Id do produto",
    "Nome do produto",
    "Largura",
    "Altura",
    "Comprimento",
    "Peso",
    "Valor do Produto",
    "Quantidade"
);

// Realiza o calculo do frete
$resposta = $MelhorEnvio->calculate("CEP do remetente", "CEP do destinatario", $Product);

// Verifica se deu certo
if(!$resposta["error"])
{
    // As informações do frete estão no array 
    $resposta["data"]
}

Veja um exemplo do array data retornado no calculo do frete.

(Array)
[
    company" => [
         "name" => Nome da transportadora
         "image" => Imagem da logo da transportadora
    ],
    "service" => Nome do serviço (ex: Pac, Sedex...)
    "timeDays" => Prazo em dias para entrega
    "code" => Codigo do servico
    "packages" => (Array) Lista dos pacotes que serão enviados
]

Etiquetas

Com esse SDK é possivel realizar a compra de etiquetas atraves da plataforma Melhor Envio. Lembrando que é necessário ter

Solicitando compra

Primeiro é necessário realizar uma solicitação de compra de etiqueta. Veja o código de exemplo:

// Informa o token
$MelhorEnvio->setAccessToken("Access Token");

// Destinatario e Remetente
$Destinatario = new MelhorEnvio\User();
$Remetente = new MelhorEnvio\User();


// Adiciona as informações
$Destinatario->setDocumentos("CPF");

$Destinatario->setInformacaoPessoal("NOME", "EMAIL", "CELULAR");

$Destinatario->setEndereco([
    "endereco" => "Rua xyz",
    "numero" => 123,
    "bairro" => "Jardim São José",
    "cidade" => "São Paulo",
    "cep" => 11200363
]);



// Adiciona as informações do remetente
$Remetente->setDocumentos("CPF", "CNPJ", "INCRICAO ESTADUAL");

$Remetente->setInformacaoPessoal("NOME", "EMAIL", "CELULAR");

$Remetente->setEndereco([
    "endereco" => "Rua xyz",
    "numero" => 123,
    "bairro" => "Jardim São José",
    "cidade" => "São Paulo",
    "cep" => 11200363
]);



// Instancia o produto
$Product = new MelhorEnvio\Product();

// Seta as informações do produto.
// Pode duplicar esse item para adicionar mais produtos
$Product->setProducts(
    "Id do produto",
    "Nome do produto",
    "Largura",
    "Altura",
    "Comprimento",
    "Peso",
    "Valor do Produto",
    "Quantidade"
);

// Pacote 
// Quando foi calculado o valor do frete, ele retorno os pacotes disponiveis
$pacotes = []; 


/**
* OBS: 
* Em caso de vários pacotes para a transportadora correios 
* deverá realizar uma solicitação por pacote. As demais poderá 
* realizar apenas uma solicitação passando um array de pacotes, 
* da maneira que iremos fazer agora.
**/

// Percorre os pacotes 
foreach ($packages as $package)
{
    $pacotes[] = [
        "height" => $packages->dimensions->height,
        "width" => $packages->dimensions->width,
        "length" => $packages->dimensions->length,
        "weight" => $packages->weight
    ];
}

// Codigo do serviço de envio
$code = "CODIGO DO SERVICO (RETORNADO NA BUSCA DO VALOR)";

// Realiza a solicitação de compra das etiqueta
$resposta = $MelhorEnvio->requestBuyTag($Destinatario, $Remetente, $Product, $pacote, $code, "Identificador do Pedido");

// Verifica se deu certo
if(!$resposta["error"])
{
    // Será retorno os ids da solicitação
    // Armaze os ids para poder realizar a compra da etiqueta
    $ids = $resposta["data"];
}

Processar Compra

Com os ids da solicitação em mão você agora deverá realizar a compra da etiqueta. Para esse processo funcionar é necessário que possua saldo na plataforma.

// Verifica se o id retornado não é um array 
if(!is_array($ids))
{
    // Força ser um array
    $ids = [$ids];
}

// Realiza a compra da etiqueta
$resposta = $MelhorEnvio->processBuyTag($ids);

// Verifica se deu certo
if(!$resposta["error"])
{
    // Apos o pagamento é necessário realizar a solicitação 
    // para impressão da etiqueta.
}

Gerar Etiquetas

Após a etiqueta ser comprada deve-se solicitar a impressão da mesma, onde a plataforma retornará um link com o arquivo PDF da etiqueta.

// Solicita a impressão das etiquetas
$resposta = $MelhorEnvio->printTag($ids);

// Verifica se deu certo
if(!$resposta["error"])
{
    // É retornado um array contendo a url para impressão 
    $resposta["data"]
    
    // Exemplo do array retornado no item data
    // (Array) ["url" => "URL DO PDF DA ETIQUETA"]
}

Recuperar Código de Rastreio

Após ter gerado a etique é possivel solicitar o código de rastreio para informar ao cliente.

veja o código de exemplo:

// Gera o codigo de rastreio
$rasteio = $MelhorEnvio->getTracking($ids);

// Verifica se deu certo
if(!$resposta["error"])
{
    // É retornado um array contendo os códigos 
    $resposta["data"]
}

Veja um exemplo do retorno na array data:

(Array)
[
    [
        "tracking" => "CÓDIGO DE RASTREIO"
    ],
    [
        "tracking" => "CÓDIGO DE RASTREIO"
    ]
]

Caso seja apenas um pacote será retornado apenas 1 item no array contendo o código de rastreio.

Licença

Lançado sob a licença [MIT](http://www.opensource.org/licenses/MIT)

melhorenvio-sdk-php's People

Contributors

igorcacerez avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

melhorenvio-sdk-php's Issues

Erros na função requestBuyTag

Bom dia, achei dois problemas com o código:

Na classe MelhorEnvio.php na função requestBuyTag...

chama: $produto->nome onde na verdade é $produto->name

// Adiciona o produto
$conteudo->products[] = [
"name" => $produto->nome,
"quantity" => $produto->quantity,
"unitary_value" => $produto->insurance_value
];

Outro detalhe é que a lista de produtos não é um json, e sim um array. Então não funciona.

// Recupera os produtos
$produtos = json_decode(json_encode($Products->getProducts()));

Corrigir variável do sandbox

No arquivo MelhorEnvio.php no método activeSandbox o variável da url está com o nome $this->baseUrl, porém a constante é $url, portanto deve trocar para $this->url.

Obrigado,
ótima lib

Erro na função requestToken()

A requisição do $MelhorEnvio->requestAuthorization(); acontece normalmente, mas na call do $retorno = $MelhorEnvio->requestToken($_GET["code"]); recebo o erro: Uncaught Error: Call to a member function requestToken() on null.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.