NAME

Net::Moip - Interface com o gateway de pagamentos Moip

SYNOPSE

use Net::Moip;

my $gateway = Net::Moip->new(
    token => 'MY_MOIP_TOKEN',
    key   => 'MY_MOIP_KEY',
);

my $resposta = $gateway->pagamento_unico({
    razao           => 'Pagamento para a Loja X',
    tipo_validacao  => 'Transparente',
    valor           => 59.90,
    id_proprio      => 1,
    url_retorno     => 'http://exemplo.com/callback',
    url_notificacao => 'http://exemplo.com/notify',
    pagador => {
        id_pagador => 1,
        nome       => 'Cebolácio Júnior Menezes da Silva',
        email      => 'cebolinha@exemplo.com',
        endereco_cobranca => {
            logradouro    => 'Rua do Campinho',
            numero        => 9,
            bairro        => 'Limoeiro',
            cidade        => 'São Paulo',
            estado        => 'SP',
            pais          => 'BRA',
            cep           => '11111-111',
            telefone_fixo => '(11)93333-3333',
        },
    },
});

if ($resposta->{status} eq 'Sucesso') {
    print $resposta->{token};
    print $resposta->{id};
}

Don't speak portuguese?

This module provides an interface to talk to the Moip API. Moip is a popular brazilian online payments gateway. Since the target audience for this distribution is mainly brazilian developers, the documentation is provided in portuguese only. If you need any help or want to translate it to your language, please send us some pull requests! :)

DESCRIÇÃO

Este módulo funciona como interface entre sua aplicação e a API do Moip. Por enquanto apenas a versão 1 da API é suportada, e apenas pagamentos únicos.

Toda a API de pagamentos únicos é manipulada através de XMLs sem schema, mas com estrutura documentada no site do Moip. Com o método pagamento_unico deste módulo você tem acesso direto ao endpoint de pagamentos únicos do Moip e, enquanto a documentação deste módulo não está completa, pode se guiar por lá.

A conversão entre tags XML e a estrutura de dados que você passa é direta, exceto pelas tags Valor, Acrescimo e Deducao, que por questões práticas podem opcionalmente ficar no nível mais alto da estrutura, como mostrado no exemplo da Sinopse.

Outra mudança é que as tags são escritas em snake_case como é padrão em Perl, em vez de CamelCase como estão no XML do Moip. Em outras palavras, a estrutura:

<EnderecoCobranca>
    <Cidade>São Paulo</Cidade>
    <Estado>SP</Estado>
</EnderecoCobranca>

deve ser passada na forma:

endereco_cobranca => {
    cidade => 'São Paulo',
    estado => 'SP',
}

Atenção com o encoding!

O Moip espera que seus dados estejam em iso-8859-1. Este módulo fará a coisa certa se seus dados estiverem no formato interno do Perl. Se por acaso seus dados já estiverem codificados em utf-8 ou qualquer outro formato, defina o atributo ""decode_as"" para o formato desejado.

EXEMPLOS

Pagamentos únicos via checkout transparente

my $resposta = $gateway->pagamento_unico({
    razao          => 'Pagamento para a Loja X',
    tipo_validacao => 'Transparente',
    valor          => 59.90,
    id_proprio     => 1,
    pagador => {
        id_pagador => 1,
        nome       => 'Cebolácio Júnior Menezes da Silva',
        email      => 'cebolinha@exemplo.com',
        endereco_cobranca => {
            logradouro    => 'Rua do Campinho',
            numero        => 9,
            bairro        => 'Limoeiro',
            cidade        => 'São Paulo',
            estado        => 'SP',
            pais          => 'BRA',
            cep           => '11111-111',
            telefone_fixo => '(11)93333-3333',
        },
    },
});

decode_as

my $gateway = Net::Moip->new(
    token     => '...',
    key       => '...',
    decode_as => 'utf-8',
);

ou, a qualquer momento:

$gateway->decode_as( 'utf-8' );

Por padrão, as strings da sua estrutura de dados não são decodificadas. Utilize esse atributo para decodificá-las no formato desejado antes de recodificá-las em 'iso-8859-1' e enviá-las ao Moip.

Compatibilidade e SSL/TLS

Como mencionado na descrição, o Net::Moip é compatível apenas com a v1 da API do Moip.

Este módulo utiliza os novos endpoints do Moip (api.moip.com.br) desde a versão 0.04 do Net::Moip. Se você usa esse módulo, certifique-se de que está atualizado. O endpoint antigo da API (www.moip.com.br) foi DESATIVADO pelo Moip em 30/9/2015.

Por questões de segurança, o endpoint do Moip exige conexão com TLS 1.1 ou 1.2, usando um certificado digital assinado com SHA-256. Os protocolos SSLv3 e TLS 1.0 foram completamente desativados.

Para garantir compatibilidade com a API do Moip, este módulo por padrão carrega um user agent forçando o uso de TLS 1.2, o que gera uma exceção fatal caso seu sistema não aceite o protocolo.

Portanto, se a sua aplicação está retornando exceções com mensagens como:

SSL connect attempt failed because of handshake problems

ou

Cannot create SSL connection: SSL Version TLSv1_2 not supported

Você provavelmente precisa atualizar sua versão do OpenSSL para uma que entenda TLS 1.2. Uma forma rápida de descobrir é digitar na linha de comando:

openssl ciphers -sv 'TLSv1.2'

O resultado desse comando deve ser uma lista de cifras separadas por ":". Se em vez disso o comando retornar erro ou nenhum resultado, você precisa atualizar seu OpenSSL e, em seguida, reinstalar os módulos Net::SSLeay e IO::Socket::SSL (nessa ordem). Sugerimos também instalar/atualizar o módulo Mozilla::CA, que contém uma cópia dos certificados das CAs da Mozilla e é usado pelo IO::Socket::SSL.

Mais detalhes no blog oficial do Moip.

VEJA TAMBÉM

Business::CPI, Business::CPI::Gateway::Moip

https://desenvolvedor.moip.com.br

LICENÇA E COPYRIGHT

Copyright 2014-2015 Breno G. de Oliveira garu at cpan.org. Todos os direitos reservados.

Este módulo é software livre; você pode redistribuí-lo e/ou modificá-lo sob os mesmos termos que o Perl. Veja a licença perlartistic para mais informações.

DISCLAIMER

PORQUE ESTE SOFTWARE É LICENCIADO LIVRE DE QUALQUER CUSTO, NÃO HÁ GARANTIA ALGUMA PARA ELE EM TODA A EXTENSÃO PERMITIDA PELA LEI. ESTE SOFTWARE É OFERECIDO "COMO ESTÁ" SEM QUALQUER GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA. TODO O RISCO RELACIONADO À QUALIDADE, DESEMPENHO E COMPORTAMENTO DESTE SOFTWARE É DE QUEM O UTILIZAR.