better error message when LinkPoint does not return a statusMessage
[Business-OnlinePayment-LinkPoint.git] / LinkPoint.pm
index 88a8ac2..b0c496a 100644 (file)
@@ -1,6 +1,6 @@
 package Business::OnlinePayment::LinkPoint;
 
-# $Id: LinkPoint.pm,v 1.2 2002-02-26 08:24:00 ivan Exp $
+# $Id: LinkPoint.pm,v 1.7 2003-03-31 20:41:56 ivan Exp $
 
 use strict;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
@@ -43,6 +43,15 @@ sub map_fields {
     $self->content(%content);
 }
 
+sub build_subs {
+    my $self = shift;
+    foreach(@_) {
+        #no warnings; #not 5.005
+        local($^W)=0;
+        eval "sub $_ { my \$self = shift; if(\@_) { \$self->{$_} = shift; } return \$self->{$_}; }";
+    }
+}
+
 sub remap_fields {
     my($self,%map) = @_;
 
@@ -141,12 +150,22 @@ sub submit {
 
     #print "$_ => $post_data{$_}\n" foreach keys %post_data;
 
-    my %response = $lperl->$action(\%post_data);
+    my %response;
+    {
+      local($^W)=0;
+      %response = $lperl->$action(\%post_data);
+    }
 
     if ( $response{'statusCode'} == 0 ) {
       $self->is_success(0);
       $self->result_code('');
-      $self->error_message($response{'statusMessage'});
+      if ( exists($response{'statusMessage'})
+           && defined($response{'statusMessage'}) ) { # "normal" error
+        $self->error_message($response{'statusMessage'});
+      } else { # "should not happen" error (should this die/croak?)
+        $self->error_message("No statusMessage returned!  Response follows:".
+          join(' / ', map { "$_=>".$response{$_} } keys %response )           );
+      }
     } else {
       $self->is_success(1);
       $self->result_code($response{'AVCCode'});
@@ -221,7 +240,7 @@ Based on Busienss::OnlinePayment::AuthorizeNet written by Jason Kohles.
 
 =head1 SEE ALSO
 
-perl(1). L<Business::OnlinePayment>.
+perl(1), L<Business::OnlinePayment>.
 
 =cut