Fix transret format change Business_OnlinePayment_WesternACH_0_07
authormark <mark>
Wed, 19 Aug 2009 05:47:08 +0000 (05:47 +0000)
committermark <mark>
Wed, 19 Aug 2009 05:47:08 +0000 (05:47 +0000)
Changes
lib/Business/OnlinePayment/WesternACH.pm

diff --git a/Changes b/Changes
index 937b5d3..e1eeb67 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,8 @@
 Revision history for Business-OnlinePayment-WesternACH
 
+0.07    Tue Aug 18 22:45:10 PDT 2009
+        - Handle format change to transret.php results.
+
 0.06    Thu Aug 13 14:56:12 PDT 2009
         - Make transret.php the default returns method.
         - Old method is still available via returns_method => 'requester'.
index e81f0a3..4a73897 100644 (file)
@@ -11,7 +11,7 @@ use Date::Parse  'str2time';
 use vars qw($VERSION @ISA $me $DEBUG);
 
 @ISA = qw(Business::OnlinePayment::HTTPS);
-$VERSION = '0.06';
+$VERSION = '0.07';
 $me = 'Business::OnlinePayment::WesternACH';
 
 $DEBUG = 0;
@@ -229,6 +229,7 @@ sub get_returns {
           $self->is_success(0);
           return;
         }
+        my $index_date_ret = 2; # Usual position of 'Date Returned'
         foreach my $trans (split("\cJ", $page)) {
           my @fields = split(',', $trans);
           # fields:
@@ -237,8 +238,13 @@ sub get_returns {
 
           # we only care about id and date.
           next if scalar(@fields) < 10;
+          if($fields[0] eq 'id') {
+            # Use this header row to find the 'Date Returned' field.
+            ($index_date_ret) = grep { lc($fields[$_]) eq 'date returned' } ( 0..scalar(@fields)-1 );
+            $index_date_ret ||= 2;
+          }
           next if not($fields[0] =~ /^\d+$/);
-          my $rettime = str2time($fields[1]);
+          my $rettime = str2time($fields[$index_date_ret]);
           next if (!$rettime or $rettime < $starttime or $rettime > $endtime);
           carp $trans if $DEBUG > 1;
           push @tids, $fields[0];