=cut
use Business::BatchPayment;
+use DateTime;
use Moose;
with 'Business::BatchPayment::Processor';
-our $VERSION = '0.02';
+our $VERSION = '0.03';
has [ qw(username password) ] => (
is => 'ro',
sub upload {
my ($self,$request,$batch) = @_;
my @tokens = ();
- # get date from batch
- my ($date) = $batch->process_date =~ /^(....-..-..)/;
# login
my $resp = $self->xmlrpc_post('xmlrpc_tp_Login.asp','',$self->username,$self->password);
my $sid = $resp->{'ResponseData'}->{'sessionID'};
die "Could not parse sessionid from gateway response" unless $sid;
+ # get date from login, to ensure we're using upstream date
+ my ($year,$mon,$mday,$hour,$min,$sec) = $resp->{'ResponseTimestamp'} =~ /^(....)-(..)-(..)\s+(..):(..):(..)/;
+ # then add a day and a bit, because "processs date need to be a date in the future"
+ my $date = DateTime->new(
+ year => $year,
+ month => $mon,
+ day => $mday,
+ hour => $hour,
+ minute => $min,
+ second => $sec,
+ # timezone on object mostly doesn't matter,
+ # but this does appear to be the tz being passed by BillBuddy,
+ # and this should avoid DST troubles (Queensland does not do DST)
+ time_zone => 'Australia/Queensland',
+ )->add_duration(
+ # extra hour is buffer for upload to run, hopefully that's plenty
+ DateTime::Duration->new( hours => 25 )
+ )->ymd;
# start a payment batch
$resp = $self->xmlrpc_post('xmlrpc_tp_DDRBatch_Open.asp',$sid,$self->username,$date);
my $batchno = $resp->{'ResponseData'}->{'batchno'};
error_message => $error,
authorization => '',
);
- #not sure what format date gets returned in, item creation will fail on bad format,
- #so I'm taking a guess, and not recording the date if my guess is wrong
if ($resp->{'ResponseData'}->{'actualprocessdate'} =~ /^(\d\d\d\d).(\d\d).(\d\d)/) {
$item->payment_date($1.'-'.$2.'-'.$3);
+ } else {
+ warn "Could not parse actualprocessdate ".$resp->{'ResponseData'}->{'actualprocessdate'};
}
push(@batchitems,$item);
}