Business-CPI-Gateway-Moip
view release on metacpan or search on metacpan
lib/Business/CPI/Gateway/Moip.pm view on Meta::CPAN
use Business::CPI::Cart::Moip;
use Business::CPI::Gateway::Moip;
my $cpi = Business::CPI::Gateway::Moip->new(
currency => 'BRL',
sandbox => 1,
token_acesso => 'YC110LQX7UQXEMQPLYOPZ1LV9EWA8VKD',
chave_acesso => 'K03JZXJLOKJNX0CNL0NPGGTHTMGBFFSKNX6IUUWV',
receiver_email => 'teste@oemail.com.br',
receiver_label => 'Nome Cliente ou Loja',
id_proprio => 'ID_INTERNO_'.int rand(int rand(99999999)),
);
my $cart = $cpi->new_cart({
buyer => {
name => 'Mr. Buyer',
email => 'sender@andrewalker.net',
address_street => 'Rua das Flores',
address_number => '360',
address_district => 'Vila Mariana',
address_complement => 'Ap 35',
address_city => 'São Paulo',
address_state => 'SP',
address_country => 'Brazil',
address_zip_code => '04363-040',
phone => '11-9911-0022',
id_pagador => 'O11O22X33X',
},
mensagens => [
'Produto adquirido no site X',
'Total pago + frete - Preço: R$ 144,10',
'Mensagem linha3',
],
boleto => {
expiracao => {
dias => 7,
tipo => 'corridos', #ou uteis
},
data_vencimento => '2012/12/30T24:00:00.0-03:00',
instrucao1 => 'Primeira linha de instrução de pagamento do boleto bancário',#OPT
instrucao2 => 'Segunda linha de instrução de pagamento do boleto bancário', #OPT
instrucao3 => 'Terceira linha de instrução de pagamento do boleto bancário',#OPT
logo_url => 'http://www.nixus.com.br/img/logo_nixus.png', #OPT
},
formas_pagamento => [
'BoletoBancario',
'CartaoDeCredito',
'DebitoBancario',
'CartaoDeDebito',
'FinanciamentoBancario',
'CarteiraMoIP',
],
url_retorno => 'http://www.url_retorno.com.br',
url_notificacao => 'http://www.url_notificacao.com.br',
entrega => {
destino => 'MesmoCobranca',
calculo_frete => [
{
tipo => 'proprio', #ou correios
valor_fixo => 2.30, #ou valor_percentual
prazo => {
tipo => 'corridos', #ou uteis
valor => 2,
}
},
{
tipo => 'correios',
valor_percentual => 12.30,
prazo => {
tipo => 'corridos',#ou uteis
valor => 2,
},
correios => {
peso_total => 12.00,
forma_entrega => 'Sedex10', #ou sedex sedexacobrar sedexhoje
mao_propria => 'PagadorEscolhe', #ou SIM ou NAO
valor_declarado => 'PagadorEscolhe', #ou SIM ou NAO
aviso_recebimento => 'PagadorEscolhe', # ou SIM ou NAO
cep_origem => '01230-000',
},
},
{
tipo => 'correios',
valor_percentual => 12.30,
prazo => {
tipo => 'corridos',#ou uteis
valor => 2,
},
correios => {
peso_total => 12.00,
forma_entrega => 'Sedex10', #ou sedex sedexacobrar sedexhoje
mao_propria => 'PagadorEscolhe', #ou SIM ou NAO
valor_declarado => 'PagadorEscolhe', #ou SIM ou NAO
aviso_recebimento => 'PagadorEscolhe', # ou SIM ou NAO
cep_origem => '01230-000',
},
},
]
}
},
);
my $item = $cart->add_item({
id => 2,
quantity => 1,
price => 222,
description => 'produto2',
});
my $item = $cart->add_item({
id => 1,
quantity => 2,
price => 111,
description => 'produto1',
});
my $res = $cpi->make_xml_transaction( $cart );
Return on success:
$res = {
code "SUCCESS",
id 201301231157322850000001500872,
token "C2R0A1V3K0P132J3Q1C1S5M7R3N2P2N8B5L0Q0M0J05070U1W5K0P018D7T2"
}
Return on error:
$res = {
code "ERROR",
raw_error "<ns1:EnviarInstrucaoUnicaResponse xmlns:ns1="http://www.moip.com.br/ws/alpha/"><Resposta><ID>201301231158069350000001500908</ID><Status>Falha</Status><Erro Codigo="2">O valor do pagamento deverá ser enviado obrigator
iamente</Erro></Resposta></ns1:EnviarInstrucaoUnicaResponse>"
}
=head1 EXAMPLE USING Business:CPI
The following example will use Business::CPI directly
use Business::CPI;
use Data::Printer;
my $moip = Business::CPI->new(
gateway => "Moip",
sandbox => 1,
token_acesso => 'YC110LQX7UQXEMQPLYOPZ1LV9EWA8VKD',
chave_acesso => 'K03JZXJLOKJNX0CNL0NPGGTHTMGBFFSKNX6IUUWV',
lib/Business/CPI/Gateway/Moip.pm view on Meta::CPAN
$xml = $self->add_mensagens ( $xml, $cart );
$xml = $self->add_razao ( $xml, $cart );
$xml = $self->add_valores ( $xml, $cart );
$xml = $self->add_id_proprio ( $xml, $cart );
$xml = $self->add_pagador ( $xml, $cart );
$xml = $self->add_boleto ( $xml, $cart );
$xml = $self->add_parcelas ( $xml, $cart );
$xml = $self->add_comissoes ( $xml, $cart );
$xml = $self->add_entrega ( $xml, $cart );
$xml .= "\n</InstrucaoUnica>
</EnviarInstrucao>";
return $xml;
}
sub add_url_retorno {
my ( $self, $xml , $cart ) = @_;
if ( defined $cart->url_retorno ) {
$xml .= "<URLRetorno>".$cart->url_retorno."</URLRetorno>";
}
return $xml;
}
sub add_url_notificacao {
my ( $self, $xml , $cart ) = @_;
if ( defined $cart->url_notificacao ) {
$xml .= "<URLNotificacao>".$cart->url_notificacao."</URLNotificacao>";
}
return $xml;
}
sub add_formas_pagamento {
my ( $self, $xml , $cart ) = @_;
if ( defined $cart->formas_pagamento and ref $cart->formas_pagamento eq ref [] ) {
$xml .= "<FormasPagamento>";
foreach my $forma ( @{ $cart->formas_pagamento } ) {
$xml .= "<FormaPagamento>".$forma."</FormaPagamento>";
}
$xml .= "</FormasPagamento>";
}
return $xml;
}
sub add_entrega {
my ( $self, $xml, $cart ) = @_;
if ( defined $cart->entrega ) {
$xml .= "<Entrega>";
if ( exists $cart->entrega->{destino} ) {
$xml .= "<Destino>".$cart->entrega->{destino}."</Destino>";
}
foreach my $e ( @{ $cart->entrega->{ calculo_frete } } ) {
$xml .= "<CalculoFrete>";
if ( exists $e->{ tipo } ) {
$xml .= "<Tipo>Proprio</Tipo>" if $e->{ tipo } =~ m/proprio/ig;
$xml .= "<Tipo>Correios</Tipo>" if $e->{ tipo } =~ m/correio/ig;
}
if ( exists $e->{ valor_fixo } ) {
$xml .= "<ValorFixo>".$e->{ valor_fixo }."</ValorFixo>";
}
if ( exists $e->{ valor_percentual } ) {
$xml .= "<ValorPercentual>". $e->{ valor_percentual } ."</ValorPercentual>";
}
if ( exists $e->{ prazo } and
exists $e->{ prazo }->{ valor } and
exists $e->{ prazo }->{ tipo }
) {
if ( $e->{ prazo }->{ tipo } =~ m/corridos/ig ) {
$xml .= '<Prazo Tipo="Corridos">'.$e->{ prazo }->{ valor }.'</Prazo>' ;
}
if ($e->{ prazo }->{ tipo } =~ m/uteis/ig ) {
$xml .= '<Prazo Tipo="Uteis">'. $e->{ prazo }->{ valor }.'</Prazo>' ;
}
}
if ( exists $e->{ correios } ) {
$xml .= "<Correios>";
if ( exists $e->{correios}->{peso_total} ) {
$xml .= "<PesoTotal>".$e->{correios}->{peso_total}."</PesoTotal>";
}
if ( exists $e->{correios}->{forma_entrega} ) {
$xml .= "<FormaEntrega>".$e->{correios}->{forma_entrega}."</FormaEntrega>";
}
if ( exists $e->{correios}->{mao_propria} ) {
$xml .= "<MaoPropria>".$e->{correios}->{mao_propria}."</MaoPropria>";
}
if ( exists $e->{correios}->{valor_delarado} ) {
$xml .= "<ValorDeclarado>".$e->{correios}->{valor_declarado}."</ValorDeclarado>";
}
if ( exists $e->{correios}->{aviso_recebimento} ) {
$xml .= "<AvisoRecebimento>".$e->{correios}->{aviso_recebimento}."</AvisoRecebimento>";
}
if ( exists $e->{correios}->{cep_origem} ) {
$xml .= "<CepOrigem>".$e->{correios}->{cep_origem}."</CepOrigem>";
}
$xml .= "</Correios>";
}
$xml .= "</CalculoFrete>";
}
$xml .= "</Entrega>";
}
return $xml;
}
sub add_razao {
my ( $self, $xml, $cart ) = @_;
$xml .= "<Razao>Pagamento para loja ".$self->receiver_label." </Razao>";
return $xml;
}
sub add_comissoes {
my ( $self, $xml, $cart ) = @_;
if ( defined $cart->comissoes || defined $cart->pagador_taxa ) {
$xml .= "\n<Comissoes>";
if ( defined $cart->comissoes ) {
foreach my $comissao ( @{ $cart->comissoes } ) {
$xml .= "\n<Comissionamento>";
if ( exists $comissao->{razao} ) {
$xml .= "\n<Razao>".$comissao->{razao}."</Razao>" if exists $comissao->{razao};
}
if ( exists $comissao->{login_moip} ) {
$xml .= "\n<Comissionado><LoginMoIP>".$comissao->{login_moip}."</LoginMoIP></Comissionado>"
}
if ( exists $comissao->{valor_percentual} ) {
$xml .= "\n<ValorPercentual>".$comissao->{valor_percentual}."</ValorPercentual>";
}
if ( exists $comissao->{valor_fixo} ) {
$xml .= "\n<ValorFixo>".$comissao->{valor_fixo}."</ValorFixo>";
}
$xml .= "\n</Comissionamento>";
}
}
if ( defined $cart->pagador_taxa ) {
$xml .= "\n<PagadorTaxa><LoginMoIP>".$cart->pagador_taxa."</LoginMoIP></PagadorTaxa>";
}
$xml .= "\n</Comissoes>";
}
return $xml;
}
sub add_parcelas {
my ( $self, $xml, $cart ) = @_;
if ( defined $cart->parcelas and scalar @{ $cart->parcelas } > 0 ) {
$xml .= "\n<Parcelamentos>";
foreach my $parcela ( @{ $cart->parcelas } ) {
if ( defined $parcela->{parcelas_max} and defined $parcela->{parcelas_min} ) {
$xml .= "\n<Parcelamento>";
if ( defined $parcela->{parcelas_min} ) {
$xml .= "\n<MinimoParcelas>".$parcela->{parcelas_min}."</MinimoParcelas>";
}
if ( defined $parcela->{parcelas_max} ) {
$xml .= "\n<MaximoParcelas>".$parcela->{parcelas_max}."</MaximoParcelas>";
}
$xml .= "\n<Juros>"; $xml .= ( defined $parcela->{juros} )?$parcela->{juros}:'0'; $xml .= "</Juros>";
$xml .= "\n</Parcelamento>";
}
}
$xml .= "\n</Parcelamentos>";
}
return $xml;
}
sub add_id_proprio {
my ( $self, $xml, $cart ) = @_;
# id proprio
if ( $self->id_proprio ) {
$xml .= "\n<IdProprio>". $self->id_proprio ."</IdProprio>";
}
return $xml;
}
sub add_valores {
my ( $self, $xml, $cart ) = @_;
$xml .= "<Valores>";
# valores
foreach my $item ( @{$cart->_items} ) {
$xml .= "\n<Valor moeda=\"BRL\">".$item->price."</Valor>";
}
$xml .= "\n</Valores>";
return $xml;
}
sub add_mensagens {
my ( $self, $xml, $cart ) = @_;
if ( defined $cart->mensagens and scalar @{ $cart->mensagens } > 0 ) {
( run in 3.837 seconds using v1.01-cache-2.11-cpan-5735350b133 )