no longer needed
This commit is contained in:
parent
74258fb349
commit
b56a13fdfc
1 changed files with 0 additions and 417 deletions
|
|
@ -1,417 +0,0 @@
|
|||
package WebGUI::Commerce::Payment::PayFlowPro;
|
||||
|
||||
use strict;
|
||||
use WebGUI::Session;
|
||||
use WebGUI::HTMLForm;
|
||||
use WebGUI::Commerce::Payment;
|
||||
use Tie::IxHash;
|
||||
use PFProAPI qw( pfpro );
|
||||
use WebGUI::International;
|
||||
|
||||
our @ISA = qw(WebGUI::Commerce::Payment);
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub cancelRecurringPayment {
|
||||
my ($self, $recurring);
|
||||
$self = shift;
|
||||
$recurring = shift;
|
||||
|
||||
if ($recurring) {
|
||||
$self->{_type} = 'R';
|
||||
$self->{_recurring} = 1;
|
||||
$self->{_transactionParams} = {
|
||||
ORIGPROFILEID => $recurring->{id},
|
||||
ACTION => 'C',
|
||||
};
|
||||
}
|
||||
|
||||
return $self->submit;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub connectionError {
|
||||
my ($self, $resultCode);
|
||||
$self = shift;
|
||||
|
||||
$resultCode = $self->resultCode;
|
||||
return $self->resultMessage if ($resultCode < 0);
|
||||
return undef;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub checkoutForm {
|
||||
my ($self, $u, $f, %months, %years, $i18n);
|
||||
$self = shift;
|
||||
|
||||
$i18n = WebGUI::International->new('CommercePaymentPayFlowPro');
|
||||
|
||||
$u = WebGUI::User->new($session{user}{userId});
|
||||
|
||||
$f = WebGUI::HTMLForm->new;
|
||||
$f->text(
|
||||
-name => 'name',
|
||||
-label => $i18n->get('name'),
|
||||
-value => $session{form}{name} || $u->profileField('firstName').' '.$u->profileField('lastName')
|
||||
);
|
||||
$f->text(
|
||||
-name => 'address',
|
||||
-label => $i18n->get('address'),
|
||||
-value => $session{form}{address} || $u->profileField('homeAddress')
|
||||
);
|
||||
$f->text(
|
||||
-name => 'city',
|
||||
-label => $i18n->get('city'),
|
||||
-value => $session{form}{city} || $u->profileField('homeCity')
|
||||
);
|
||||
$f->text(
|
||||
-name => 'state',
|
||||
-label => $i18n->get('state'),
|
||||
-value => $session{form}{state} || $u->profileField('homeState')
|
||||
);
|
||||
$f->zipcode(
|
||||
-name => 'zipcode',
|
||||
-label => $i18n->get('zipcode'),
|
||||
-value => $session{form}{zipcode} || $u->profileField('homeZip')
|
||||
);
|
||||
$f->email(
|
||||
-name => 'email',
|
||||
-label => $i18n->get('email'),
|
||||
-value => $session{form}{email} || $u->profileField('email')
|
||||
);
|
||||
$f->text(
|
||||
-name => 'cardNumber',
|
||||
-label => $i18n->get('cardNumber'),
|
||||
-value => $session{form}{cardNumber}
|
||||
);
|
||||
tie %months, "Tie::IxHash";
|
||||
%months = map {sprintf('%02d',$_) => sprintf('%02d',$_)} 1..12;
|
||||
tie %years, "Tie::IxHash";
|
||||
%years = map {substr($_,2,2) => $_} 2004..2099;
|
||||
$f->readOnly(
|
||||
-label => $i18n->get('expiration date'),
|
||||
-value =>
|
||||
WebGUI::Form::selectList({name => 'expMonth', options => \%months, value => [$session{form}{expMonth}]}).
|
||||
" / ".
|
||||
WebGUI::Form::selectList({name => 'expYear', options => \%years, value => [$session{form}{expYear}]})
|
||||
);
|
||||
$f->integer(
|
||||
-name => 'cvv2',
|
||||
-label => $i18n->get('cvv2'),
|
||||
-value => $session{form}{cvv2}
|
||||
);
|
||||
|
||||
return $f->printRowsOnly;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub configurationForm {
|
||||
my ($self, $f, $i18n);
|
||||
$self = shift;
|
||||
$i18n = WebGUI::International->new('CommercePaymentPayFlowPro');
|
||||
|
||||
$f = WebGUI::HTMLForm->new;
|
||||
$f->text(
|
||||
-name => $self->prepend('vendor'),
|
||||
-label => $i18n->get('vendor'),
|
||||
-value => $self->get('vendor')
|
||||
);
|
||||
$f->text(
|
||||
-name => $self->prepend('partner'),
|
||||
-label => $i18n->get('partner'),
|
||||
-value => $self->get('partner')
|
||||
);
|
||||
$f->text(
|
||||
-name => $self->prepend('username'),
|
||||
-label => $i18n->get('username'),
|
||||
-value => $self->get('username')
|
||||
);
|
||||
$f->text(
|
||||
-name => $self->prepend('password'),
|
||||
-label => $i18n->get('password'),
|
||||
-value => $self->get('password')
|
||||
);
|
||||
$f->yesNo(
|
||||
-name => $self->prepend('testModeEnabled'),
|
||||
-label => $i18n->get('test mode'),
|
||||
-value => $self->get('testModeEnabled'),
|
||||
-subText=> $i18n->get('testModeEnabled')
|
||||
);
|
||||
|
||||
return $self->SUPER::configurationForm($f->printRowsOnly);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub confirmTransaction {
|
||||
# This function should never be called with site side payment gateways!
|
||||
return 0;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub init {
|
||||
my ($class, $self);
|
||||
$class = shift;
|
||||
|
||||
$self = $class->SUPER::init('PayFlowPro');
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub gatewayId {
|
||||
my $self = shift;
|
||||
|
||||
return $self->{_response}->{PROFILEID} if $self->{_recurring};
|
||||
return $self->{_response}->{PNREF};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub getRecurringPaymentStatus {
|
||||
my ($self, $term, $recurringId, $response, %paymentHistory);
|
||||
$self = shift;
|
||||
$recurringId = shift;
|
||||
$term = shift;
|
||||
|
||||
if ($recurringId) {
|
||||
$self->{_type} = 'R';
|
||||
$self->{_recurring} = 1;
|
||||
$self->{_transactionParams} = {
|
||||
ORIGPROFILEID => $recurringId,
|
||||
PAYMENTHISTORY => 'Y',
|
||||
ACTION => 'I',
|
||||
};
|
||||
}
|
||||
|
||||
$self->submit;
|
||||
|
||||
$response = $self->{_response};
|
||||
|
||||
# Process the response
|
||||
if ($term) {
|
||||
return undef unless (defined $response->{'P_RESULT'.$term});
|
||||
return {
|
||||
resultCode => $response->{'P_RESULT'.$term},
|
||||
gatewayId => $response->{'P_PNREF'.$term},
|
||||
transferState => $response->{'P_TRANSTATE'.$term},
|
||||
transferDate => $response->{'P_TRANSTIME'.$term},
|
||||
amount => $response->{'P_AMOUNT'.$term},
|
||||
};
|
||||
}
|
||||
|
||||
$term = 1;
|
||||
while (defined $response->{'P_RESULT'.$term}) {
|
||||
$paymentHistory{$term} = {
|
||||
resultCode => $response->{'P_RESULT'.$term},
|
||||
gatewayId => $response->{'P_PNREF'.$term},
|
||||
transferState => $response->{'P_TRANSTATE'.$term},
|
||||
transferDate => $response->{'P_TRANSTIME'.$term},
|
||||
amount => $response->{'P_AMT'.$term},
|
||||
};
|
||||
$term++;
|
||||
}
|
||||
|
||||
return \%paymentHistory;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub errorCode {
|
||||
my ($self, $resultCode);
|
||||
$self = shift;
|
||||
|
||||
$resultCode = $self->{_response}->{RESULT};
|
||||
return $self->{_response}->{TRXRESULT} if ($resultCode == 36 && $self->{_recurring} && $self->{_response}->{TRXRESULT});
|
||||
return $resultCode unless ($resultCode eq '0');
|
||||
return undef;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub name {
|
||||
return WebGUI::International::get('module name', "CommercePaymentPayFlowPro");
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub namespace {
|
||||
my $self = shift;
|
||||
|
||||
return $self->{_namespace};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub normalTransaction {
|
||||
my ($self, $normal);
|
||||
$self = shift;
|
||||
$normal = shift;
|
||||
|
||||
if ($normal) {
|
||||
$self->{_type} = 'S';
|
||||
$self->{_recurring} = 0;
|
||||
$self->{_transactionParams} = {
|
||||
AMT => sprintf('%.2f', $normal->{amount}),
|
||||
COMMENT1 => $normal->{description},
|
||||
COMMENT2 => $normal->{invoiceNumber},
|
||||
ORGID => $normal->{id},
|
||||
};
|
||||
}
|
||||
|
||||
return $self->submit;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub recurringTransaction {
|
||||
my ($self, $recurring);
|
||||
$self = shift;
|
||||
$recurring = shift;
|
||||
|
||||
my %resolve = (
|
||||
Weekly => 'WEEK',
|
||||
BiWeekly => 'BIWK',
|
||||
FourWeekly => 'FRWK',
|
||||
Monthly => 'MONT',
|
||||
Quarterly => 'QTER',
|
||||
HalfYearly => 'SMYR',
|
||||
Yearly => 'YEAR',
|
||||
);
|
||||
|
||||
if ($recurring) {
|
||||
$self->{_type} = 'R';
|
||||
$self->{_recurring} = 1;
|
||||
$self->{_transactionParams} = {
|
||||
START => $recurring->{start} || WebGUI::DateTime::epochToHuman(WebGUI::DateTime::addToDate(time, 0, 0, 1), '%m%d%y'),
|
||||
AMT => sprintf('%.2f', $recurring->{amount}),
|
||||
TERM => $recurring->{term},
|
||||
PAYPERIOD => $resolve{$recurring->{payPeriod}},
|
||||
PROFILENAME => $recurring->{profilename},
|
||||
COMMENT1 => $recurring->{description},
|
||||
COMMENT2 => $recurring->{invoiceNumber},
|
||||
ORGID => $recurring->{id},
|
||||
ACTION => 'A',
|
||||
};
|
||||
$self->{_transactionParams}->{OPTIONALTRX} = 'A' if ($recurring->{checkCard});
|
||||
}
|
||||
|
||||
return $self->submit;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub resultCode {
|
||||
my $self = shift;
|
||||
|
||||
return $self->{_response}->{RESULT};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub resultMessage {
|
||||
my $self = shift;
|
||||
|
||||
return $self->{_response}->{RESPMSG};
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub submit {
|
||||
my ($payflow, $self, $purchase, %properties, $expirationDate);
|
||||
$self = shift;
|
||||
$purchase = shift;
|
||||
|
||||
my $server = 'payflow.verisign.com';
|
||||
$server = 'test-payflow.verisign.com' if $self->get('testModeEnabled');
|
||||
my $port = 443;
|
||||
my %cardData = %{$self->{_cardData}} if $self->{_cardData};
|
||||
my %userData = %{$self->{_userData}} if $self->{_userData};
|
||||
my %specificTranasctionParams = %{$self->{_transactionParams}};
|
||||
my %baseParams = (
|
||||
USER => $self->get('username'),
|
||||
VENDOR => $self->get('vendor'),
|
||||
PARTNER => $self->get('partner'),
|
||||
PWD => $self->get('password'),
|
||||
|
||||
TRXTYPE => $self->{_type},
|
||||
TENDER => 'C',
|
||||
);
|
||||
|
||||
%properties = (%baseParams, %specificTranasctionParams, %userData, %cardData);
|
||||
|
||||
my ( $response, $resultstr ) = pfpro( \%properties, $server, $port );
|
||||
|
||||
$self->{_response} = $response;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub supports {
|
||||
return {
|
||||
single => 1,
|
||||
recurring => 1,
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub transactionCompleted {
|
||||
my ($self) = shift;
|
||||
return ($self->{_response}->{RESULT} eq '0');
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub transactionError {
|
||||
my ($self, $resultCode);
|
||||
$self = shift;
|
||||
|
||||
$resultCode = $self->resultCode;
|
||||
return $self->{_response}->{TRXRESPMSG} if ($resultCode == 36 && $self->{_recurring} && $self->{_response}->{TRXRESULT});
|
||||
return $self->resultMessage if ($resultCode > 0);
|
||||
return undef;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub transactionPending {
|
||||
return ($_[0]->errorCode == 126);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub validateFormData {
|
||||
my ($self, @error, $i18n, $currentYear, $currentMonth);
|
||||
$self = shift;
|
||||
|
||||
$i18n = WebGUI::International->new('CommercePaymentPayFlowPro');
|
||||
|
||||
push (@error, $i18n->get('invalid name')) unless ($session{form}{name});
|
||||
push (@error, $i18n->get('invalid address')) unless ($session{form}{address});
|
||||
push (@error, $i18n->get('invalid city')) unless ($session{form}{city});
|
||||
push (@error, $i18n->get('invalid zip')) unless ($session{form}{zipcode});
|
||||
push (@error, $i18n->get('invalid email')) unless ($session{form}{email});
|
||||
|
||||
push (@error, $i18n->get('invalid card number')) unless ($session{form}{cardNumber} =~ /^\d+$/);
|
||||
push (@error, $i18n->get('invalid cvv2')) unless ($session{form}{cvv2} =~ /^\d+$/);
|
||||
|
||||
($currentYear, $currentMonth) = WebGUI::DateTime::localtime;
|
||||
$currentYear -= 2000;
|
||||
|
||||
# Check if expDate and expYear have sane values
|
||||
unless (($session{form}{expMonth} =~ /^(0[1-9]|1[0-2])$/) && ($session{form}{expYear} =~ /^\d\d$/)) {
|
||||
push (@error, $i18n->get('invalid expiration date'));
|
||||
} elsif (($session{form}{expYear} < $currentYear) ||
|
||||
(($session{form}{expYear} == $currentYear) && ($session{form}{expMonth} < $currentMonth))) {
|
||||
push (@error, $i18n->get('invalid expiration date'));
|
||||
}
|
||||
|
||||
unless (@error) {
|
||||
$self->{_cardData} = {
|
||||
ACCT => $session{form}{cardNumber},
|
||||
EXPDATE => $session{form}{expMonth}.$session{form}{expYear},
|
||||
CVV2 => $session{form}{cvv2},
|
||||
};
|
||||
|
||||
$self->{_userData} = {
|
||||
STREET => $session{form}{address},
|
||||
ZIP => $session{form}{zipcode},
|
||||
CITY => $session{form}{city},
|
||||
NAME => $session{form}{name},
|
||||
EMAIL => $session{form}{email},
|
||||
STATE => $session{form}{state},
|
||||
};
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return \@error;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue