PayPal drivers converted to Moose.

This commit is contained in:
Colin Kuskie 2010-10-08 11:38:52 -07:00
parent 2fd37a7ed2
commit cd548fd671
3 changed files with 158 additions and 171 deletions

View file

@ -16,16 +16,75 @@ package WebGUI::Shop::PayDriver::PayPal::PayPalStd;
use strict;
use base qw/WebGUI::Shop::PayDriver::PayPal/;
use URI;
use URI::Escape;
use LWP::UserAgent;
use Readonly;
use Tie::IxHash;
Readonly my $I18N => 'PayDriver_PayPalStd';
use Moose;
use WebGUI::Definition::Shop;
extends qw/WebGUI::Shop::PayDriver::PayPal/;
define pluginName => [qw/PayPal PayDriver_PayPalStd/];
property vendorId => (
fieldType => 'text',
label => ['vendorId', 'PayDriver_PayPalStd'],
hoverHelp => ['vendorId help', 'PayDriver_PayPalStd'],
);
property signature => (
fieldType => 'textarea',
label => ['signature', 'PayDriver_PayPalStd'],
hoverHelp => ['signature help', 'PayDriver_PayPalStd'],
);
property identityToken => (
fieldType => 'text',
label => ['identity token', 'PayDriver_PayPalStd'],
hoverHelp => ['identity token help', 'PayDriver_PayPalStd'],
);
property currency => (
fieldType => 'selectBox',
label => ['currency', 'PayDriver_PayPalStd'],
hoverHelp => ['currency help', 'PayDriver_PayPalStd'],
default => 'USD',
options => \&_currency_options,
);
sub _currency_options {
my $self = shift;
return $self->getPaymentCurrencies();
}
property useSandbox => (
fieldType => 'yesNo',
label => ['use sandbox', 'PayDriver_PayPalStd'],
hoverHelp => ['use sandbox help', 'PayDriver_PayPalStd'],
default => 1,
);
property sandboxUrl => (
fieldType => 'text',
label => ['sandbox url', 'PayDriver_PayPalStd'],
hoverHelp => ['sandbox url help', 'PayDriver_PayPalStd'],
default => 'https://www.sandbox.paypal.com/cgi-bin/webscr',
);
property liveUrl => (
fieldType => 'text',
label => ['live url', 'PayDriver_PayPalStd'],
hoverHelp => ['live url help', 'PayDriver_PayPalStd'],
default => 'https://www.paypal.com/cgi-bin/webscr',
);
property buttonImage => (
fieldType => 'text',
label => ['button image', 'PayDriver_PayPalStd'],
hoverHelp => ['button image help', 'PayDriver_PayPalStd'],
default => '',
);
property summaryTemplateId => (
fieldType => 'template',
label => ['summary template', 'PayDriver_PayPalStd'],
hoverHelp => ['summary template help', 'PayDriver_PayPalStd'],
namespace => 'Shop/Credentials',
default => '',
);
=head1 NAME
PayPal Website payments standard
@ -65,82 +124,6 @@ sub handlesRecurring { 0 }
# Recurring TX stuff removed, for now.
#-------------------------------------------------------------------
sub definition {
my $class = shift;
my $session = shift;
WebGUI::Error::InvalidParam->throw( error => q{Must provide a session variable} )
unless ref $session eq 'WebGUI::Session';
my $definition = shift;
my $i18n = WebGUI::International->new( $session, $I18N );
tie my %fields, 'Tie::IxHash';
%fields = (
vendorId => {
fieldType => 'text',
label => $i18n->get('vendorId'),
hoverHelp => $i18n->get('vendorId help'),
},
signature => {
fieldType => 'textarea',
label => $i18n->get('signature'),
hoverHelp => $i18n->get('signature help'),
},
identityToken => {
fieldType => 'text',
label => $i18n->get('identity token'),
hoverHelp => $i18n->get('identity token help'),
},
currency => {
fieldType => 'selectBox',
label => $i18n->get('currency'),
hoverHelp => $i18n->get('currency help'),
defaultValue => 'USD',
options => $class->getPaymentCurrencies(),
},
useSandbox => {
fieldType => 'yesNo',
label => $i18n->get('use sandbox'),
hoverHelp => $i18n->get('use sandbox help'),
defaultValue => 1,
},
sandboxUrl => {
fieldType => 'text',
label => $i18n->get('sandbox url'),
hoverHelp => $i18n->get('sandbox url help'),
defaultValue => 'https://www.sandbox.paypal.com/cgi-bin/webscr',
},
liveUrl => {
fieldType => 'text',
label => $i18n->get('live url'),
hoverHelp => $i18n->get('live url help'),
defaultValue => 'https://www.paypal.com/cgi-bin/webscr',
},
buttonImage => {
fieldType => 'text',
label => $i18n->get('button image'),
hoverHelp => $i18n->get('button image help'),
defaultValue => '',
},
summaryTemplateId => {
fieldType => 'template',
label => $i18n->get('summary template'),
hoverHelp => $i18n->get('summary template help'),
namespace => 'Shop/Credentials',
defaultValue => '',
},
);
push @{$definition},
{
name => $i18n->get('PayPal'),
properties => \%fields,
};
return $class->SUPER::definition( $session, $definition );
}
#-------------------------------------------------------------------
=head2 getButton
@ -173,8 +156,8 @@ sub getButton {
my $button;
my $i18n = WebGUI::International->new( $session, 'PayDriver_PayPalStd' );
my $text = $i18n->get('PayPal');
if ( $self->get('buttonImage') ) {
my $raw = $self->get('buttonImage');
if ( $self->buttonImage ) {
my $raw = $self->buttonImage;
WebGUI::Macro::process( $session, \$raw );
$button = qq{
<input type='image'
@ -222,8 +205,8 @@ sub paymentVariables {
my %params = (
cmd => '_cart',
upload => 1,
business => $self->get('vendorId'),
currency_code => $self->get('currency'),
business => $self->vendorId,
currency_code => $self->currency,
no_shipping => 1,
return => $return->as_string,
@ -260,8 +243,8 @@ Returns the url of the paypal gateway, taking into account useSandbox.
sub payPalUrl {
my $self = shift;
my $field = $self->get('useSandbox') ? 'sandboxUrl' : 'liveUrl';
return $self->get($field);
my $field = $self->useSandbox ? 'sandboxUrl' : 'liveUrl';
return $self->$field;
}
#-------------------------------------------------------------------
@ -285,7 +268,7 @@ sub processPayment {
my %form = (
cmd => '_notify-synch',
tx => $tx,
at => $self->get('identityToken'),
at => $self->identityToken,
);
my $response = LWP::UserAgent->new->post($self->payPalUrl, \%form);
my ($status, @lines) = split("\n", uri_unescape($response->content));