X-Git-Url: http://git.freeside.biz/gitweb/?p=Business-OnlinePayment-InternetSecure.git;a=blobdiff_plain;f=InternetSecure.pm;h=0029e9161d9cb28fd72a888894e9c490170ebb3b;hp=30ef58442863d95b107fcd366461a3f065a9ede4;hb=7f30025e73ae69403e8fe0ffd922f5bb4feada11;hpb=bd2cf25a9423cf84c0ce97e694e8d2f035669df0 diff --git a/InternetSecure.pm b/InternetSecure.pm index 30ef584..0029e91 100755 --- a/InternetSecure.pm +++ b/InternetSecure.pm @@ -38,6 +38,7 @@ sub set_defaults { $self->build_subs(qw( receipt_number sales_number + date card_type total_amount avs_response cvv2_response @@ -181,7 +182,7 @@ sub to_xml { $data{MerchantNumber} = $self->merchant_id; $data{xxxCard_Number} =~ tr/ //d; - $data{xxxCard_Number} =~ s/^[0-36-9]/4/ if $self->test_transaction; + $data{xxxCard_Number} =~ s/^[^3-6]/4/ if $self->test_transaction; my ($y, $m) = $self->parse_expdate($content{exp_date}); $data{xxxCCYear} = sprintf '%.4u' => $y; @@ -212,10 +213,11 @@ sub to_xml { } xml_out(\%data, - NoAttr => 1, - RootName => 'TranxRequest', - SuppressEmpty => undef, - XMLDecl => '', + NoAttr => 1, + NumericEscape => 2, + RootName => 'TranxRequest', + SuppressEmpty => undef, + XMLDecl => '', ); } @@ -237,6 +239,8 @@ sub parse_response { my ($self, $response) = @_; $self->server_response($response); + + local $/ = "\n"; # Make sure to avoid bug #17687 $response = xml_in($response, ForceArray => [qw(product flag)], @@ -251,6 +255,7 @@ sub parse_response { $self->infuse($response, qw( ReceiptNumber receipt_number SalesOrderNumber sales_number + Date date CardType card_type Page result_code ApprovalCode authorization @@ -284,15 +289,16 @@ sub submit { undef, make_form( xxxRequestMode => 'X', - xxxRequestData => Encode::encode_utf8( - $self->to_xml - ), + xxxRequestData => $self->to_xml, ) ); croak 'Error connecting to server' unless $page; croak 'Server responded, but not in XML' unless $page =~ /^<\?xml/; + # The response is marked UTF-8, but it's really Latin-1. Sigh. + $page =~ s/^(<\?xml.*?) encoding="utf-8"/$1 encoding="iso-8859-1"/si; + $self->parse_response($page); } @@ -460,9 +466,19 @@ Customer information. B should be a two-letter code taken from ISO =over 4 -=item receipt_number() / sales_number() +=item receipt_number() + +Receipt number of this transaction; this is actually a string, unique to all +InternetSecure transactions. + +=item sales_number() + +Sales order number of this transaction. This is a number, unique to each +merchant, which is incremented by 1 each time. + +=item date() -Receipt number and sales order number of submitted order. +Date and time of the transaction. Format is C. =item total_amount()