X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=InternetSecure.pm;h=c7f71b7d71ebb523076545fa11dbfccf12c76610;hb=303113808d37201863a56a5dc48e96eff9dc8ee6;hp=a7b1d0f5d23a83a220b268298e3ae5c822b8c837;hpb=227f87ababc68077ac00d2fb5ee52f080370cbff;p=Business-OnlinePayment-InternetSecure.git diff --git a/InternetSecure.pm b/InternetSecure.pm index a7b1d0f..c7f71b7 100755 --- a/InternetSecure.pm +++ b/InternetSecure.pm @@ -42,12 +42,12 @@ sub set_defaults { receipt_number sales_number uuid guid date card_type cardholder - total_amount taxes + total_amount tax_amounts avs_response cvv2_response )); - # Just in case someone tries to call taxes() *before* submit() - $self->taxes( {} ); + # Just in case someone tries to call tax_amounts() *before* submit() + $self->tax_amounts( {} ); } # OnlinePayment's get_fields now filters out undefs in 3.x. :( @@ -108,9 +108,16 @@ sub prod_string { my @flags = ($currency); - foreach (split ' ' => uc($data{taxes} || '')) { - croak "Unknown tax code $_" unless /^(GST|PST|HST)$/; - push @flags, $_; + my @taxes; + if (ref $data{taxes}) { + @taxes = @{ $data{taxes} }; + } elsif ($data{taxes}) { + @taxes = split ' ' => $data{taxes}; + } + + foreach (@taxes) { + croak "Unknown tax code $_" unless /^(GST|PST|HST)$/i; + push @flags, uc $_; } if ($self->test_transaction) { @@ -146,8 +153,6 @@ sub to_xml { croak "Unknown currency code ", $content{currency} unless $content{currency} =~ /^(CAD|USD)$/; - $content{taxes} = uc($content{taxes} || ''); - my %data = $self->get_remap_fields(qw( xxxCard_Number card_number @@ -205,13 +210,14 @@ sub to_xml { ); } - xml_out(\%data, + # The encode() makes sure to a) strip off non-Latin-1 characters, and + # b) turn off the utf8 flag, which confuses XML::Simple + encode('ISO-8859-1', xml_out(\%data, NoAttr => 1, - NumericEscape => 2, RootName => 'TranxRequest', SuppressEmpty => undef, XMLDecl => '', - ); + )); } # Map the various fields from the response, and put their values into our @@ -226,10 +232,10 @@ sub infuse { } } -sub extract_taxes { +sub extract_tax_amounts { my ($self, $response) = @_; - my %taxes; + my %tax_amounts; my $products = $response->{Products}; return unless $products; @@ -240,11 +246,11 @@ sub extract_taxes { grep($_ eq '{TAX}', @$flags) && grep($_ eq '{CALCULATED}', @$flags)) { - $taxes{ $node->{code} } = $node->{subtotal}; + $tax_amounts{ $node->{code} } = $node->{subtotal}; } } - return %taxes; + return %tax_amounts; } # Parse the server's response and set various fields @@ -291,7 +297,7 @@ sub parse_response { $self->card_type(CARD_TYPES->{$self->card_type}); - $self->taxes( { $self->extract_taxes($response) } ); + $self->tax_amounts( { $self->extract_tax_amounts($response) } ); return $self; } @@ -465,10 +471,12 @@ C (default) or C. =item taxes -Taxes to be added automatically to B by InternetSecure. +Taxes to be added automatically to B by InternetSecure. Available +taxes are C, C and C. -Available taxes are C, C and C. Multiple taxes can specified -by concatenating them with spaces, such as C. +This argument can either be a single string of taxes concatenated with spaces +(such as C), or a reference to an array of taxes (such as C<[ "GST", +"PST" ]>). =item name / company / address / city / state / zip / country / phone / email @@ -537,10 +545,11 @@ Date and time of the transaction. Format is C. Total amount billed for this order, including taxes. -=item taxes() +=item tax_amounts() -Returns a I to a hash that maps tax names (such as C) to the -amount that was billed for each. +Returns a I to a hash that maps taxes, which were listed under the +B argument to B(), to the amount that was calculated by +InternetSecure. =item cardholder() @@ -579,7 +588,7 @@ the following fields: =over 4 -=item amount +=item amount (required) Unit price of this product.