use Date::Format 'time2str';
use File::Temp;
-use vars qw( $opt_t $opt_v );
-getopts('vt');
+use vars qw( $opt_t $opt_v $opt_a );
+getopts('vta:');
#$Net::SFTP::Foreign::debug = -1;
sub usage { '
Usage:
- paymentech-download [ -v ] [ -t ] user
+ paymentech-download [ -v ] [ -t ] [ -a archivedir ] user
'
}
my $user = shift or die &usage;
adminsuidsetup $user;
+if ( $opt_a ) {
+ die "no such directory: $opt_a\n"
+ unless -d $opt_a;
+ die "archive directory $opt_a is not writeable by the freeside user\n"
+ unless -w $opt_a;
+}
+
my $tmpdir = File::Temp->newdir();
my $conf = new FS::Conf;
die "no response files found\n" if !@files;
BATCH: foreach my $filename (@files) {
- $filename =~ s/\_resp\.zip$//;
+
+ #get file
+ $filename =~ s/_resp\.zip$//;
print STDERR "Retrieving $filename\n" if $opt_v;
- $sftp->get("$filename\_resp.zip", "$tmpdir/$filename\_resp.zip");
+ $sftp->get("$filename\_resp.zip", "$tmpdir/${filename}_resp.zip");
if($sftp->error) {
warn "failed to download $filename\n";
next BATCH;
}
- system("unzip -P $password -q $tmpdir/$filename\_resp.zip -d $tmpdir");
- if(! -f "$tmpdir/$filename\_resp.xml") {
- warn "failed to extract $filename\_resp.xml\n";
+
+ #unzip file
+ system("unzip -P $password -q $tmpdir/${filename}_resp.zip -d $tmpdir");
+ if(! -f "$tmpdir/${filename}_resp.xml") {
+ warn "failed to extract ${filename}_resp.xml\n";
next BATCH;
}
- open my $fh, "<$tmpdir/$filename\_resp.xml";
+
+ #copy to archive dir
+ if ( $opt_a ) {
+ print STDERR "Copying $tmpdir/${filename}_resp.xml to archive dir $opt_a\n"
+ if $opt_v;
+ system 'cp', "$tmpdir/${filename}_resp.xml", $opt_a;
+ warn "failed to copy $tmpdir/${filename}_resp.xml to $opt_a: $@" if $@;
+ }
+
+ #get batchnum & retrieve pending batch
+ open my $fh, "<$tmpdir/${filename}_resp.xml";
my ($batchnum) = split ('-', $filename);
$batchnum = sprintf("%d", $batchnum); # remove leading zeroes
my $batch = qsearchs('pay_batch', { batchnum => $batchnum });
warn "batch '$batchnum' not found\n";
next BATCH;
}
+
+ #and import results
print STDERR "Importing batch #$batchnum\n" if $opt_v;
my $error = $batch->import_results( filehandle => $fh,
format => 'paymentech' );
warn "error: $error\n" if $error;
-};
+
+}
+
print STDERR "Finished!\n" if $opt_v;
=head1 NAME
=head1 SYNOPSIS
- paymentech-download [ -v ] [ -t ] user
+ paymentech-download [ -v ] [ -t ] [ -a archivedir ] user
=head1 DESCRIPTION
-t: Use the test server.
+-a directory: Archive response files in the provided directory.
+
user: freeside username
=head1 BUGS