Confusion around card types
[Business-OnlinePayment-InternetSecure.git] / InternetSecure.pm
index 1442894..e3855cf 100755 (executable)
@@ -18,8 +18,9 @@ our $VERSION = '0.01';
 use constant CARD_TYPES => {
                                VI => 'Visa',
                                MC => 'MasterCard',
-                               AX => 'American Express',
+                               AX => 'American Express', # FIXME: AM?
                                NN => 'Discover',
+                               # JB?
                        };
 
 
@@ -43,6 +44,18 @@ sub set_defaults {
                        ));
 }
 
+# OnlinePayment's get_fields now filters out undefs in 3.x. :(
+#
+sub get_fields {
+       my ($self, @fields) = @_;
+
+       my %content = $self->content;
+
+       my %new = map +($_ => $content{$_}), @fields;
+
+       return %new;
+}
+
 # OnlinePayment's remap_fields is buggy, so we simply rewrite it
 #
 sub remap_fields {
@@ -63,10 +76,6 @@ sub get_remap_fields {
        $self->remap_fields(reverse %map);
        my %data = $self->get_fields(keys %map);
 
-       foreach (values %data) {
-               $_ = '' unless defined;
-       }
-
        return %data;
 }
 
@@ -149,7 +158,7 @@ sub to_xml {
        $content{taxes} = uc $content{taxes};
 
        my %data = $self->get_remap_fields(qw(
-                       xxxCardNumber           card_number
+                       xxxCard_Number          card_number
 
                        xxxName                 name
                        xxxCompany              company
@@ -174,7 +183,7 @@ sub to_xml {
        
        $data{MerchantNumber} = $self->merchant_id;
 
-       $data{xxxCardNumber} =~ tr/ //d;
+       $data{xxxCard_Number} =~ tr/ //d;
 
        my ($y, $m) = $self->parse_expdate($content{exp_date});
        $data{xxxCCYear} = sprintf '%.4u' => $y;
@@ -207,6 +216,7 @@ sub to_xml {
        xml_out(\%data,
                NoAttr => 1,
                RootName => 'TranxRequest',
+               SuppressEmpty => undef,
                XMLDecl => '<?xml version="1.0" encoding="utf-8" standalone="yes"?>',
        );
 }
@@ -339,7 +349,7 @@ Business::OnlinePayment::InternetSecure - InternetSecure backend for Business::O
 
 Business::OnlinePayment::InternetSecure is an implementation of
 L<Business::OnlinePayment> that allows for processing online credit card
-payments through Internet Secure.
+payments through InternetSecure.
 
 See L<Business::OnlinePayment> for more information about the generic
 Business::OnlinePayment interface.
@@ -348,7 +358,7 @@ Business::OnlinePayment interface.
 
 Object creation is done via L<Business::OnlinePayment>; see its manpage for
 details.  The I<merchant_id> processor option is required, and corresponds
-to the merchant ID assigned to you by Internet Secure.
+to the merchant ID assigned to you by InternetSecure.
 
 =head1 METHODS
 
@@ -430,7 +440,7 @@ C<CAD> (default) or C<USD>.
 =item taxes
 
 Taxes to be added automatically.  These should not be included in B<amount>;
-they will be automatically added by Internet Secure later on.
+they will be automatically added by InternetSecure later on.
 
 Available taxes are C<GST>, C<PST> and C<HST>.  Taxes can be combined by
 separating them with spaces, such as C<GST HST>.
@@ -481,9 +491,14 @@ following:
 
 =item avs_response() / cvv2_response()
 
-Results of the AVS and CVV2 checks.  See the Internet Secure documentation for
+Results of the AVS and CVV2 checks.  See the InternetSecure documentation for
 the list of possible values.
 
+=item products_raw()
+
+...
+
+
 =back
 
 
@@ -525,14 +540,17 @@ When using a products list, the B<amount> field passed to B<content()> should
 be left undefined.
 
 
-=head2 Character encodings
-
-...
+=head2 Character encoding
 
+Since communication to/from InternetSecure is encoded with UTF-8, all Unicode
+characters are theoretically available when submitting information via
+B<submit()>.  (Further restrictions may be imposed by InternetSecure itself.)
 
-=head2 products_raw
-
-...
+When using non-ASCII characters, all data provided to B<submit()> should either
+be in the current native encoding (typically latin-1, unless it was modified
+via the C<encoding> pragma), or be decoded via the C<Encode> module.
+Conversely, all data returned after calling B<submit()> will be automatically
+decoded.
 
 
 =head1 EXPORT
@@ -546,11 +564,11 @@ L<Business::OnlinePayment>
 
 =head1 AUTHOR
 
-Frederic Briere, E<lt>fbriere@fbriere.netE<gt>
+Frédéric Brière, E<lt>fbriere@fbriere.netE<gt>
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2006 by Frederic Briere
+Copyright (C) 2006 by Frédéric Brière
 
 This library is free software; you can redistribute it and/or modify
 it under the same terms as Perl itself, either Perl version 5.8.4 or,