X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpay_batch%2Fpaymentech.pm;h=133f8f1ce3381c0fd17f9cdf96f8e0798455d402;hb=744b17e5c9a5de68ad8a24b7a35449b535f02731;hp=89f0c77238056be7f6801e0d4328eb947895438f;hpb=624b2d44625f69d71175c3348cae635d580c890b;p=freeside.git diff --git a/FS/FS/pay_batch/paymentech.pm b/FS/FS/pay_batch/paymentech.pm index 89f0c7723..133f8f1ce 100644 --- a/FS/FS/pay_batch/paymentech.pm +++ b/FS/FS/pay_batch/paymentech.pm @@ -2,6 +2,7 @@ package FS::pay_batch::paymentech; use strict; use vars qw(@ISA %import_info %export_info $name); +use FS::Record 'qsearchs'; use Time::Local; use Date::Format 'time2str'; use Date::Parse 'str2time'; @@ -9,9 +10,11 @@ use Tie::IxHash; use FS::Conf; my $conf; -my ($bin, $merchantID, $terminalID, $username); +my ($bin, $merchantID, $terminalID, $username, $password, $with_recurringInd); $name = 'paymentech'; +my $gateway; + %import_info = ( filetype => 'XML', xmlrow => [ qw(transResponse newOrderResp) ], @@ -19,18 +22,42 @@ $name = 'paymentech'; 'paybatchnum', '_date', 'approvalStatus', + 'order_number', + 'authorization', ], xmlkeys => [ 'orderID', 'respDateTime', 'approvalStatus', + 'txRefNum', + 'authorizationCode', ], 'hook' => sub { + if ( !$gateway ) { + # find a gateway configuration that has the same merchantID + # as the batch config, if there is one. If not, leave + # gateway out entirely. + my $merchant = (FS::Conf->new->config('batchconfig-paymentech'))[2]; + my $g = qsearchs({ + 'table' => 'payment_gateway', + 'addl_from' => ' JOIN payment_gateway_option USING (gatewaynum) ', + 'hashref' => { disabled => '', + optionname => 'merchant_id', + optionvalue => $merchant, + }, + }); + $gateway = ($g ? $g->gatewaynum . '-' : '') . 'PaymenTech'; + } my ($hash, $oldhash) = @_; my ($mon, $day, $year, $hour, $min, $sec) = $hash->{'_date'} =~ /^(..)(..)(....)(..)(..)(..)$/; $hash->{'_date'} = timelocal($sec, $min, $hour, $day, $mon-1, $year); $hash->{'paid'} = $oldhash->{'amount'}; + $hash->{'paybatch'} = join(':', + $gateway, + $hash->{'authorization'}, + $hash->{'order_number'}, + ); }, 'approved' => sub { my $hash = shift; $hash->{'approvalStatus'} @@ -53,7 +80,7 @@ my %paytype = ( eval "use XML::Writer"; die $@ if $@; my $conf = shift; - ($bin, $terminalID, $merchantID, $username) = + ($bin, $terminalID, $merchantID, $username, $password, $with_recurringInd) = $conf->config('batchconfig-paymentech'); }, # Here we do all the work in the header function. @@ -72,6 +99,7 @@ my %paytype = ( foreach (@cust_pay_batch) { $xml->startTag('newOrder', BatchRequestNo => $count++); + my $status = $_->cust_main->status; tie my %order, 'Tie::IxHash', ( industryType => 'EC', transType => 'AC', @@ -80,7 +108,7 @@ my %paytype = ( terminalID => $terminalID, ($_->payby eq 'CARD') ? ( ccAccountNum => $_->payinfo, - ccExp => time2str('%m%y', str2time($_->exp)) + ccExp => $_->expmmyy, ) : ( ecpCheckRT => ($_->payinfo =~ /@(\d+)/), ecpCheckDDA => ($_->payinfo =~ /(\d+)@/), @@ -97,6 +125,13 @@ my %paytype = ( orderID => $_->paybatchnum, amount => $_->amount * 100, ); + # only do this if recurringInd is enabled in config, + # and the customer has at least one non-canceled recurring package + if ( $with_recurringInd and $status =~ /^active|suspended|ordered$/ ) { + # then send RF if this is the first payment on this payinfo, + # RS otherwise. + $order{'recurringInd'} = $_->payinfo_used ? 'RS' : 'RF'; + } foreach my $key (keys %order) { $xml->dataElement($key, $order{$key}) } @@ -113,5 +148,18 @@ my %paytype = ( row => sub {}, ); +# Including this means that there is a Business::BatchPayment module for +# this gateway and we want to upgrade it. +# Must return the name of the module, followed by a hash of options. + +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{'industryType'} = 'EC'; + ( 'Paymentech', %options ); +} + 1;