X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpay_batch%2Fpaymentech.pm;h=95627bcd61202e7b5a09c864a9ff5259bfe912f0;hb=dc83512c36dc6bea2585abada4f88d714c600e55;hp=1ecf35afdbc23b53f3329a0815676862f2a6e6aa;hpb=54a357b171aa44f9399b4c146acd2afd3b686075;p=freeside.git diff --git a/FS/FS/pay_batch/paymentech.pm b/FS/FS/pay_batch/paymentech.pm index 1ecf35afd..95627bcd6 100644 --- a/FS/FS/pay_batch/paymentech.pm +++ b/FS/FS/pay_batch/paymentech.pm @@ -8,6 +8,7 @@ use Date::Format 'time2str'; use Date::Parse 'str2time'; use Tie::IxHash; use FS::Conf; +use Unicode::Truncate 'truncate_egc'; my $conf; my ($bin, $merchantID, $terminalID, $username, $password, $with_recurringInd); @@ -66,12 +67,8 @@ my $gateway; $hash->{'error_message'} = $hash->{'procStatusMessage'}; } }, - 'approved' => sub { my $hash = shift; - $hash->{'approvalStatus'} - }, - 'declined' => sub { my $hash = shift; - ! $hash->{'approvalStatus'} - }, + 'approved' => sub { shift->{'approvalStatus'} == 1 }, + 'declined' => sub { shift->{'approvalStatus'} != 1 }, ); my %paytype = ( @@ -98,7 +95,13 @@ my %paymentech_countries = map { $_ => 1 } qw( US CA GB UK ); my @cust_pay_batch = @{(shift)}; my $count = 1; my $output; - my $xml = new XML::Writer(OUTPUT => \$output, DATA_MODE => 1, DATA_INDENT => 2); + my $xml = XML::Writer->new( + OUTPUT => \$output, + DATA_MODE => 1, + DATA_INDENT => 2, + ENCODING => 'utf-8' + ); + $xml->xmlDecl(); # it is in the spec $xml->startTag('transRequest', RequestCount => scalar(@cust_pay_batch) + 1); $xml->startTag('batchFileID'); $xml->dataElement(userID => $username); @@ -121,15 +124,17 @@ my %paymentech_countries = map { $_ => 1 } qw( US CA GB UK ); ) : ( ecpCheckRT => ($_->payinfo =~ /@(\d+)/), ecpCheckDDA => ($_->payinfo =~ /(\d+)@/), - ecpBankAcctType => $paytype{lc($_->cust_main->paytype)}, + ecpBankAcctType => $paytype{lc($_->paytype)}, ecpDelvMethod => 'A', ), - avsZip => substr($_->zip, 0, 10), - avsAddress1 => substr($_->address1, 0, 30), - avsAddress2 => substr($_->address2, 0, 30), - avsCity => substr($_->city, 0, 20), - avsState => substr($_->state, 0, 2), - avsName => substr($_->first. ' '. $_->last, 0, 30), + # truncate_egc will die() on empty string + avsZip => $_->zip ? truncate_egc($_->zip, 10, '') : undef, + avsAddress1 => $_->address1 ? truncate_egc($_->address1, 30, '') : undef, + avsAddress2 => $_->address2 ? truncate_egc($_->address2, 30, '') : undef, + avsCity => $_->city ? truncate_egc($_->city, 20, '') : undef, + avsState => $_->state ? truncate_egc($_->state, 2, '') : undef, + avsName => ($_->first || $_->last) + ? truncate_egc($_->first. ' '. $_->last, 30, '') : undef, ( $paymentech_countries{ $_->country } ? ( avsCountryCode => $_->country ) : () @@ -168,10 +173,16 @@ sub _upgrade_gateway { my $conf = FS::Conf->new; my @batchconfig = $conf->config('batchconfig-paymentech'); my %options; - @options{ qw(bin terminalID merchantID login password ) } = @batchconfig; + @options{ qw( + bin + terminalID + merchantID + login + password + with_recurringInd + ) } = @batchconfig; $options{'industryType'} = 'EC'; ( 'Paymentech', %options ); } 1; -