carloswgama / php-moip
Biblioteca para realizar compras no MoIP com e sem checkout transparente
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-11-10 01:34:16 UTC
README
Classe para realizar pagamentos normais no ambiente MoIP ou com checkout transparente
Está biblioteca é baseada na Versão 1 do Moip (Uma vez que a Versão 2 ainda está em Beta e com alguns bugs) e usa por trás a SDK V1 do Moip
Ambientes
Primeiro é necessário saber que o Moip possui dois ambientes: Produção e Sandbox (Ambiente de teste) e duas versões:
Moip V2 - Atual e ainda em Beta Moip V1 - Antigo, funcional e o mais usado ainda nos projetos.
Os links para acessos são:
Moip V2 - Produção Moip V2 - Sandbox
Moip V1 - Produção Moip V1 - Sandbox
O ambiente V2 ainda estão em desenvolvimento, por isso alguns recursos podem apresentar falhas ou não estar disponíveis ainda, mas todos recursos que formos usar no V2, também está disponível e 100% funcional no V1.
Configurando
Buscando o Token e a Key
O primeiro passo é logar na conta do MoiP.
MoIP V2
Após logar, ir na opção Minha Conta >> Configurações >> Chaves de Acesso e buscar o Token e a Chave (key):
MoIP V1
Após logar, ir na opção Ferramentas >> API MoIP >> Chaves de Acesso e buscar o Token e a Chave (key):
Configurando URL de notificação
a URL de notifcação é o link para onde será enviado todas as notificações de atualização do status da compra (Ex: Foi iniciada, cancelada, aprovada...)
MoIP V2
Ir na opção Minha Conta >> Configurações >> Notificações e inserir o link para onde as notificações serão enviadas
MoIP V1
Ir na opção Meus Dados >> Preferências >> Notificação de Transações e inserir o link para onde as notificações serão enviadas
Instalando a biblioteca
Para usar a biblioteca em seu projeto, baixe esse repositório e importe as classes MoipPagamento.php e MoipNASP.php ou importe no seu projeto através do Composer (Mais indicado):
composer require carloswgama/php-moip:1.*
Caso seu projeto já possua um arquivo composer.json, você pode também adiciona-lo nas dependências require e rodar um composer install:
{
"require": {
"carloswgama/php-moip": "1.*"
}
}
Atualização 1.2.0
- Novo recurso do MoIP Marketplace
Permitir na mesma venda adicionar produtos de diferentes vendedores. Caso o produto náo seja do vendedor principal, basta informar no terceiro parametro o login do vendedor que receberá pela venda daquele produto
- addProduto($produto, $valor, $login = '')
Permitir adicionar uma porcentagem que será cobrada dos outros vendedores e dado ao vendedor principal
- setComissaoVendedorPrincipal($porcentagem)
Usando a biblioteca
Checkout no Ambiente MoIP
Criando uma nova compra simples
<?php require dirname(__FILE__).'/vendor/autoload.php'; use CWG\Moip\MoipPagamento; $token = 'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2'; $key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER'; $sandbox = true; $moipPag = new MoipPagamento($token, $key, $sandbox); $urlPagamento = $moipPag->setID('CWG_001') //ID unico da compra ->setPreco(10.00) //Preço da compra ->setDescricao('Descrição da Compra') ->pagar(); //Cria a compra e retorna o link para checkout if (!$urlPagamento) die ($moipPag->getErro()); //Apresenta mensagem, caso tenha ocorrido algum erro echo "URL para o checkout do moip: " . $urlPagamento;
Criando uma nova compra informando Produtos
<?php require dirname(__FILE__).'/vendor/autoload.php'; use CWG\Moip\MoipPagamento; $token = 'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2'; $key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER'; $sandbox = true; $moipPag = new MoipPagamento($token, $key, $sandbox); $urlPagamento = $moipPag->setID(uniqid()) //ID unico para identificar a compra (OPCIONAL) ->addProduto('Caderno', 23.99) //Preço do Caderno ->addProduto('Lápis', 2.00) //Preço do Lápis ->pagar(); if (!$urlPagamento) die ($moipPag->getErro()); //Apresenta mensagem, caso tenha ocorrido algum erro echo "URL para o checkout do moip: " . $urlPagamento;
A biblioteca para realizar a compra através do ambiente do MoIP possuio os seguintes métodos:
Criando uma nova compra avançada
Como vimos na tabela acima, podemos ainda definir quais tipos de formas de pagamentos estarão liberadas assim como adicionar informações ao boleto:
require dirname(__FILE__).'/vendor/autoload.php'; use CWG\Moip\MoipPagamento; $token = 'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2'; $key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER'; $sandbox = true; $moipPag = new MoipPagamento($token, $key, $sandbox); $urlPagamento = $moipPag->setID(uniqid()) //ID unico para a compra ->setPreco(50.00) //Preço da compra ->addFormaPagamento(MoipPagamento::CHECKOUT_BOLETO) //Libera forma de pagamento via Boleto ->configurarBoleto('2017-03-01', 'http://site.com.br/logo.png', array('Linha 1', 'Linha 2')) //Informações do boleto ->addFormaPagamento(MoipPagamento::CHECKOUT_CARTAO) //Libera forma de pagamento via cartão ->setDescricao('Descrição da Compra') ->setVendedor('carloswgama@gmail.com') //Adiciona quem deverá receber o apagamento ao invés da conta vinculada a API ->addComissao('carloswgama2@gmail.com', 10) //Adiciona outro vendedor que irá receber 10 reais de comissão do vendedor principal dessa venda ->addComissao('carloswgama3@gmail.com', 10, TRUE) //Adiciona outro vendedor que irá receber 10% (5 reais) de comissão do vendedor principal dessa venda ->pagar(); if (!$urlPagamento) die ($moipPag->getErro()); echo "URL para o checkout do moip: " . $urlPagamento;
Checkout com Marketplace
Também é possível setar os produtos da venda, onde poderá ter produtos de vendedores diferentes. Os produtos que forem de outros vendedores, deverá ser informado o login da conta MoIP do vendedor que irá receber por aquele produto.
Também é possível informar uma comissão em porcentgaem que irá reduzir dos valores de recebimento dos outros vendedores e dado ao vendedor principal.
require dirname(__FILE__).'/vendor/autoload.php'; use CWG\Moip\MoipPagamento; $token = 'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2'; $key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER'; $sandbox = true; $moipPag = new MoipPagamento($token, $key, $sandbox); //Adicionando produtos de diferentes vendedores $urlPagamento = $moipPag->setID(uniqid()) //ID unico para identificar a compra (OPCIONAL) ->addProduto('Caderno', 20) //Produto do vendedor principal ->addProduto('Tenis', 140.50, 'carloswgama@gmail.com') //produto de carloswgama@gmail.com ->addProduto('Camiseta', 40.00, 'carloswgama@gmail.com') //produto de carloswgama@gmail.com ->addProduto('Storage 500GB', 300.00, 'informatica@gmail.com') //produto de 'informatica@gmail.com' ->setComissaoVendedorPrincipal(10) //(Opcional) 10% dos outros vendedores será dado ao vendedor principal ->setDescricao('Compra Marketplace') ->pagar(); if (!$urlPagamento) die ($moipPag->getErro()); echo "URL para o checkout do moip: " . $urlPagamento;
Checkout transparente
Pagando com Boleto (Checkout Transparente)
O comando é bastante semelhante ao Checktou no ambiente MoIP, porém aqui iremos gerar alguns scripts (javascripts) para realizar o processo todo no ambiente do cliente:
require dirname(__FILE__).'/vendor/autoload.php'; use CWG\Moip\MoipPagamento; $token = 'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2'; $key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER'; $sandbox = true; $moipPag = new MoipPagamento($token, $key, $sandbox); $scripts = $moipPag->setID(uniqid()) //ID unico para identificar a compra ->setPreco(50.00) //Preço da compra ->setDescricao('Descrição da Compra') ->addFormaPagamento(MoipPagamento::CHECKOUT_BOLETO) //Gera apenas scripts para o Boleto ->configurarBoleto('2017-03-01', 'http://site.com.br/logo.png', array('Linha 1', 'Linha 2')) ->addVendedorSecundario('carloswgama2@gmail.com', 10) //Adiciona outro vendedor que irá receber 10 reais dessa venda ->addVendedorSecundario('carloswgama3@gmail.com', 10, TRUE) //Adiciona outro vendedor que irá receber 10% (5 reais) dessa venda ->getCheckoutTransparente(); ?> <?php echo $scripts['default'] ?> <!-- PAGAR BOLETO --> <h1>Boleto</h1> <button onclick="MoipPagarBoleto();">Imprimir Boleto</button> <br/>
O método getCheckoutTransparente(), irá retornar um array contendo todos os scripts necessários para rodar o checkout transparente. Na sua forma mais básica basta chamar o valor 'default' do array, que já contem todos os scripts prontos.
Para chamar o boleto basta chamar a função javascript: MoipPagarBoleto() que uma nova aba irá abrir com o boleto
No ambiente Sandbox, ao invés de abrir o banco ou o boleto sempre irá abrir o ambiente de teste do MoIP
Além dos métodos citados na tabela anterior, para usar o checkout transparente haverão os seguintes metodos a mais disponíveis:
Entre os javascripts gerados pelo método temos:
- MoipFuncaoSucesso(data) -> Função chamada caso a requisição seja realizada com sucesso. Na variável data é enviado alguns informações pelo MoIP como Status da compra caso pago com o cartão
- MoipFuncaoFalha(data) -> Função chamada caso houve alguma falha ao realizar o pedido como cartão inválido. Na variável data é enviado algumas informações pelo MoIP como Mensagem e código da falha
- MoipPagarBoleto() -> Inicia o checkout transparente para gerar o boleto
- MoipPagarDebitoBancario() -> Inicia o checkout transparente para compra por debito bancário
- MoipPagarCartao() -> Inicia o checkout transparente para compra com cartão de crédito
Pagando com Debito Bancário (Checkout Transparente)
Para realizar o pagamento por Debito Bancário com checkout transparente, é preciso informar qual será o banco que irá ser realizado o deposito. Os bancos disponíveis, podem ser pegos através do método getInstituicoesDebito(). O bancos disponíveis são:
- Banco do Brasil (BancoDoBrasil)
- Bradesco (Bradesco)
- Itau (Itau)
- Barinsul (Barinsul)
Para selecionar o banco, o campo input ou select deverá conter o id "moip_debito_instituicao" que será usado pela função javascript MoipPagarDebitoBancario():
require dirname(__FILE__).'/vendor/autoload.php'; use CWG\Moip\MoipPagamento; $token = 'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2'; $key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER'; $sandbox = true; $moipPag = new MoipPagamento($token, $key, $sandbox); $scripts = $moipPag->setID(uniqid()) //ID unico para identificar a compra ->addProduto('Caderno', 20) //Produto do vendedor principal ->addProduto('Storage 500GB', 300.00, 'informatica@gmail.com') //produto de 'informatica@gmail.com' ->setComissaoVendedorPrincipal(10) //(Opcional) 10% do vendedor informatica@gmail.com será dado ao vendedor principal ->addFormaPagamento(MoipPagamento::CHECKOUT_DEBITO_BANCARIO) //Libera forma de pagamento ->getCheckoutTransparente(); $instituicoesDebito = $moipPag->getInstituicoesDebito(); ?> <?php echo $scripts['default'] ?> <!-- PAGAR DEBITO BANCARIO --> <h1>Debito Bancário</h1> <select id="moip_debito_instituicao"> <?php foreach($instituicoesDebito as $key => $value): ?> <option value="<?php echo $key ?>"> <?php echo $value?></option> <?php endforeach; ?> </select> <button onclick="MoipPagarDebitoBancario();">Pagar com Debito Bancário</button>
Pagando com Cartão (Checkout Transparente)
Para realizar o pagamento por cartão de crédito com checkout transparente o processo é semelhante aos demais, porém para iniciar o pagamento usamos a função javascript MoipPagarCartao()
Essa função irá buscar por 8 campos que deverão estar com os seguintes id's:
- moip_cartao_titular_nome => Nome do títular do cartão igual a como está no cartão
- moip_cartao_titular_nascimento => Data de nascimento do títular do Cartão (DD/MM/YYYY)
- moip_cartao_titular_telefone => Telefone do Títular do Cartão. Ex: (99)99999-9999
- moip_cartao_titular_cpf => CPF do títular do cartão (999.999.999-99)
- moip_cartao_parcelas => Em quantas parcelas será a compra (1-12 acima de 3 há juros)
- moip_cartao_numero => Número do cartão
- moip_cartao_validade => Período que o cartão expira (MM/YYYY). Ex: 07/2018
- moip_cartao_codigo_seguranca => Código de segurança CVV que vem atrás do cartão
Exemplo:
require dirname(__FILE__).'/vendor/autoload.php'; use CWG\Moip\MoipPagamento; $token = 'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2'; $key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER'; $sandbox = true; $moipPag = new MoipPagamento($token, $key, $sandbox); $scripts = $moipPag->setID(uniqid()) //ID unico para identificar a compra ->setPreco(10.00) //Preço da compra ->setDescricao('Descrição da Compra') ->addFormaPagamento(MoipPagamento::CHECKOUT_CARTAO) //Libera forma de pagamento por cartão ->getCheckoutTransparente(); ?> <?php echo $scripts['default'] ?> <!-- PAGAR CARTÃO --> <h1>Cartão de Crédito</h1> <p>Nome do Titular como Consta no Cartão</p> <input type="text" id="moip_cartao_titular_nome" placeholder="CARLOS W GAMA"/> <p>CPF do títular </p> <input type="text" id="moip_cartao_titular_cpf" placeholder="000.000.000-00"/> <p>Data de Nascimento do títular</p> <input type="text" id="moip_cartao_titular_nascimento" placeholder="01/01/2017"/> <p>Telefone do títular</p> <input type="text" id="moip_cartao_titular_telefone" placeholder"(99)99999-9999"/> <p>Número do Cartão</p> <input type="text" id="moip_cartao_numero" placeholder="4012001037141112"/> <p>Data de Expiração</p> <input type="text" id="moip_cartao_validade" placeholder="05/2018"/> <p>Código de Segurança do Cartão</p> <input type="text" id="moip_cartao_codigo_seguranca" placeholder="123"/> <p>Parcelas</p> <select id="moip_cartao_parcelas"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <button onclick="MoipPagarCartao();">Pagar com Cartão de Crédito</button>
Mais de uma opção de Pagamento com checkout transparente
Para dar ao cliente mais de uma opção de compra usando o checkout transparente, basta seleciona a forma de pagamento (Caso nenhuma seja informada, todas as 3 estarão disponíveis) e chamar a função javascript relacionada ao tipo de pagamento:
- MoipPagarBoleto() -> Boleto
- MoipPagarDebitoBancario() -> Debito Bancário
- MoipPagarCartao() -> Cartão de Crédito
OBS: Lembrar de ver quais campos os pagamentos por Debito Bancário e Cartão de Crédito necessitam
Personalizando scripts de pagamentos
As funções usadas pelo MoIP que são chamadas quando houve uma falha ou sucesso na requisição da compra, podem facilmente receber scripts extras simplesmente passando os scripts como parametros no método getCheckoutTransparente():
require dirname(__FILE__).'/vendor/autoload.php'; use CWG\Moip\MoipPagamento; $token = 'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2'; $key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER'; $sandbox = true; $moipPag = new MoipPagamento($token, $key, $sandbox); $extraScriptSucesso = 'alert(data.Mensagem);'; $extraScriptFalha = 'alert(data.Mensagem);'; $scripts = $moipPag->setID(uniqid()) //ID unico para identificar a compra ->setPreco(10.00) //Preço da compra ->setDescricao('Descrição da Compra') ->getCheckoutTransparente($extraScriptSucesso, $extraScriptFalha); ?> <?php echo $scripts['default'] ?> [...] <button onclick="MoipPagarBoletoPersonalizado();">Imprimir Boleto</button> <button onclick="MoipPagarDebitoBancario();">Pagar com Debito Bancário</button> <button onclick="MoipPagarCartao();">Pagar com Cartão de Crédito</button>
Caso deseje alterar os métodos MoipPagarBoletoPersonalizado(), MoipPagarDebitoBancario() e MoipPagarCartao(), ao invés de chamar o script default retornado através do método getCheckoutTransparente(), usar os scripts separadamente:
- ["scriptMoip"] -> Obrigatório, é ele quem inica a comunicação com o MoIP
- ["scriptSucesso"] -> Gera a função MoipFuncaoSucesso(data), caso não deseje criar sua própria, basta chamar esse campo
- ["scriptFalha"] -> Gera a função MoipFuncaoFalha(data), caso não deseje criar sua própria, basta chamar esse campo
- ["scriptPagamentos"]["boleto"] -> Gera a função MoipPagarBoleto(), caso não deseje criar sua própria, basta chamar esse campo
- ["scriptPagamentos"]["debito_bancario"] -> Gera a função MoipPagarDebitoBancario(), caso não deseje criar sua própria, basta chamar esse campo
- ["scriptPagamentos"]["cartao"] -> Gera a função MoipPagarCartao(), caso não deseje criar sua própria, basta chamar esse campo
Exemplo:
require dirname(__FILE__).'/vendor/autoload.php'; use CWG\Moip\MoipPagamento; $token = 'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2'; $key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER'; $sandbox = true; $moipPag = new MoipPagamento($token, $key, $sandbox); $scripts = $moipPag->setID(uniqid()) //ID unico para identificar a compra ->setPreco(10.00) //Preço da compra ->setDescricao('Descrição da Compra') ->addFormaPagamento(MoipPagamento::CHECKOUT_DEBITO_BANCARIO) //Libera forma de pagamento ->addFormaPagamento(MoipPagamento::CHECKOUT_BOLETO) //Libera forma de pagamento ->getCheckoutTransparente(); ?> <!-- OBRIGATORIO scriptMoip --> <?php echo $scripts['scriptMoip'] ?> <!-- CHAMANDO MoipFuncaoSucesso(data) PADRÃO--> <?php echo $scripts['scriptSucesso'] ?> <!-- CHAMANDO MoipFuncaoFalha(data) PADRÃO--> <?php echo $scripts['scriptFalha'] ?> <!-- CHAMANDO MoipPagarBoleto() PADRÃO--> <?php echo $scripts['scriptPagamentos']['boleto'] ?> <!-- CRIANDO MEU PRÓPRIO MÉTODO MoipPagarDebitoBancarioPersonalizado() com o banco já definido --> <script type='text/javascript'> function MoipPagarDebitoBancarioPersonalizado() { var settings = { "Forma": "DebitoBancario" , "Instituicao": "BancoDoBrasil" } MoipWidget(settings); } </script> <!-- PAGAR BOLETO --> <h1>Boleto chamando script separado</h1> <button onclick="MoipPagarBoletoPersonalizado();">Imprimir Boleto</button> <br/> <!-- PAGAR DEBITO BANCARIO --> <h1>Debito Bancário com Script Personalizado</h1> <button onclick="MoipPagarDebitoBancarioPersonalizado();">Pagar com Debito Bancário</button>
Para mais informações de como criar seu próprio javascript, pode olhar a documentação do MoIP de Pagamentos via JavaScripts Javascript de Pagamento MOIP
NASP
O NASP (Notificação de Alteração de Status de Pagamento) é a notificação enviada para o link configurado na sua conta Moip. A requisição é enviada POST.
A classe MoipNASP ajuda a traduzir alguns códigos enviados pelo MoIP como:
Exemplo:
require dirname(__FILE__).'/vendor/autoload.php'; use CWG\Moip\MoipNASP; $nasp = $_POST; //Em caso de falha $classificacao = MoipNASP::getClassificacao($nasp['classificacao']); //Descrição do status do pagamento $statusPagamento = MoipNASP::getStatusPagamento($nasp['status_pagamento']); //Descição da forma de pagamento $formasPagamento = MoipNASP::getFormaPagamento($nasp['forma_pagamento']); //Todos os itens acima, mas os dados restantes $naspFormatado = MoipNASP::formateNASP($nasp);
MoipNASP::getClassificacao($_POST['classificacao'])
Retorna uma descrição do que o código 'classificacao' enviado significa. Normalmente é enviado em compras cancelas.
MoipNASP::getStatusPagamento($_POST['status_pagamento'])
Retorna uma descrição do que o código 'status_pagamento' enviado significa. As opções podem ser:
- Autorizado
- Iniciado
- Boleto Impresso
- Concluído
- Cancelado
- Em Análise
- Estornado
- Reembolsado
MoipNASP::getFormaPagamento($_POST['forma_pagamento'])
Retorna uma descrição do que o código 'forma_pagamento' enviado significa, podendo ser o saldo da carteira moip (checkout no ambient moip), cartões, boleto ou debitos.
MoipNASP::formateNASP($_POST)
Formata todo o post enviado documentando os códigos enviados como nos método acima.
Links extras:
Documentação Oficial do Moip V1 Conta do Moip V1 Conta Sandbox do Moip V1
Autor: Carlos W. Gama (carloswgama@gmail.com) Licença: MIT Livre para usar, modificar como desejar e destribuir como quiser