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 )