Catalyst-Model-PayPal-IPN

 view release on metacpan or  search on metacpan

lib/Catalyst/Model/PayPal/IPN.pm  view on Meta::CPAN

    Handle PayPal IPN stuff

    =cut

    sub ipn : Path('payment/ipn') {
        my ( $self, $c ) = @_;

        my $ipn = $c->model('Paypal::IPN');

        if ( $ipn->is_completed ) {
            my %ipn_vars = $ipn->buyer_info();
            $c->stash->{ipn_vars} = \%ipn_vars;

            Do stuff here

            # Just so we reply with something, which in turn sends a HTTP Status 200
            # OK, which we need to stop PayPal.
            # We don't get as we don't use a template and RenderView looks for a
            # template, a body or status equal to 3XX
            $c->res->body('ok');
        }
        else {

        # Just so we reply with something, which in turn sends a HTTP Status 200
        # OK, which we need to stop PayPal.
        # We don't get as we don't use a template and RenderView looks for a
        # template, a body or status equal to 3XX
            $c->res->body('not_ok');
            $c->log->debug( $record_payment_result->transmsgtext ) if $c->debug;
            $c->log->debug( $ipn->error ) if $ipn->error && $c->debug;
        }
    }

    =head2 cancelled

    Cancelled Payment

    =cut

    sub cancelled : Path('payment/cancelled') {
        my ( $self, $c ) = @_;

        Do stuff on cancel

        $c->stash->{template} = 'user/subscribe/cancelled.tt';
    }

    =head2 generate_paypal_buttons

    =cut

    sub generate_paypal_buttons : Private {
        my ( $self, $c ) = @_;

        if ( $c->stash->{all_buttons} ) {
            $c->stash->{subtypes} = [
                $c->model('FTMAdminDB::FTMTariffs')->search(
                    {
                        objectname => 'FTM_SUB_TARIFFS',
                        objectitem => 'TARIFFTYPENO',
                        lovlangid  => $langid,
                    },
                )
            ];

            for my $tariff ( @{ $c->stash->{subtypes} } ) {
                next if $tariff->tariffid == 1;
                my %data = (
                    #cert_id     => $c->config->{paypal}->{cert_id},
                    cmd         => '_xclick',
                    item_name   => $tariff->itemdesc,
                    item_number => $tariff->tariffid,
                    amount      => $tariff->peruser,
                    page_style  => $c->config->{paypal}->{page_style},
                    no_shipping => $c->config->{paypal}->{no_shipping},
                    no_note     => $c->config->{paypal}->{no_note},
                    'lc'        => $c->config->{paypal}->{lc},
                    bn          => $c->config->{paypal}->{bn},
                    custom      => $c->req->param('subid'),
                );

                if ( $c->debug ) {
                    for my $param ( keys %data ) {
                        $c->log->debug( $param . '=' . $data{$param} );
                    }
                }
                $c->stash->{unencrypted_form_data} =
                  $c->model('Paypal::IPN')->form_info( \%data );

                my @button_info = (
                    $tariff->itemdesc, $tariff->peruser,
                    $c->stash->{unencrypted_form_data}
                );
                push @{ $c->stash->{unencrypted_buttons} }, \@button_info;

                #$c->stash->{encrypted_form_data} =
                #  $c->model('Paypal::IPN')->encrypt_form( \%data );

                #my @button_info = (
                #    $tariff->itemdesc, $tariff->peruser,
                #    $c->stash->{encrypted_form_data}
                #);
                #push @{ $c->stash->{encrypted_buttons} }, \@button_info;
            }
        }
    }

    buttons.tt

    <table>
        [% FOREACH button IN unencrypted_buttons %]
            <tr>
                <td><b>[% button.0 %]</b></td>
                <td><b>Price:</b> £[% button.1 %]</td>
                <td class="content">
                    <form method="post" action="[% c.model('Paypal::IPN').paypal_gateway %]">
                    <input type="hidden" name="cmd" value="_xclick">
                    <input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif" border="0"
                    name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
                    <img alt="" border="0" src="https://www.paypal.com/en_GB/i/scr/pixel.gif" width="1" height="1">
            [% FOREACH key IN button.2.keys %]



( run in 0.446 second using v1.01-cache-2.11-cpan-97f6503c9c8 )