The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Catalyst::Model::CPI - Business::CPI models for Catalyst

VERSION

version 0.03

SYNOPSIS

In the config:

    <model Payments>
        <gateway PayPal>
            api_username   ...
            api_password   ...
            signature      ...
            receiver_email seller@test.com
            sandbox 1
        </gateway>

        <gateway X> ... </gateway>

        <gateway Y> ... </gateway>
    </model>

In the controller:

    # It should be configured in PayPal's IPN, for example, the notify_url as:
    # http://myserver/api/store/notification/PayPal
    # Other gateways are similar.
    sub gtw_notification : Chained('/api/store') PathPart('notification') Args(1) {
        my ($self, $ctx, $gateway_name) = @_;

        my $model = $ctx->model('Payments');

        if ( !$model->exists($gateway_name) ) {
            my $gtw_list = join ", ", $model->available_gateways;
            die "$gateway_name is not available.\n"
              . "Available gateways are: $gtw_list.";
        }

        my $notification = $model->get($gateway_name)->notify;

        my $purchase = $ctx->model('DB::Purchase')->find( $notification->{payment_id} );
        $purchase->update({ payment_status => $notification->{status} });

        ...
    }

    sub checkout : Chained('/website/cart') PathPart Args(0) {
        my ($self, $ctx) = @_;

        my $model = $ctx->model('Payments');
        my $cart  = $ctx->session->{cart};

        # create a form for each available gateway
        my @forms = map {
            $model->get($_)->new_cart($cart)->get_form_to_pay("${_}_form")
        } $model->available_gateways;

        $ctx->stash->{checkout_forms} = \@forms;
    }

DESCRIPTION

This module connects CPI gateways to a Catalyst application. It automatically loads the configuration from Catalyst and uses it to instantiate the gateways when requested through this model.

METHODS

available_gateways

List all the class names for the installed CPI gateways.

    my @gateways = $ctx->model('Payments')->available_gateways;

get

Returns a new instance of the gateway, with all the configuration passed as arguments to the constructor.

    my $cart = $ctx->model('Payments')->get('PayPal')->new_cart(...);

exists

Check whether the provided gateway is really installed.

    if ($model->exists($gateway)) {
        ...
    }

ACCEPT_CONTEXT

Saves the request, so that $gateway->notify can receive it automatically. See the Catalyst docs for details.

CONFIGURATION

    <model Payments>
        <gateway PayPal>
            api_username   ...
            api_password   ...
            signature      ...
            receiver_email seller@test.com
            sandbox 1
        </gateway>

        <gateway PagSeguro>
            receiver_email seller@test.com
            ...
        </gateway>

        <gateway Custom>
            foo bar
        </gateway>
    </model>

AUTHOR

André Walker <andre@andrewalker.net>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by André Walker.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.