get_fields now filters out undefs in 3.x
[Business-OnlinePayment-InternetSecure.git] / InternetSecure.pm
index a6240bc..b90f187 100755 (executable)
@@ -43,6 +43,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 {
@@ -79,13 +91,13 @@ sub parse_expdate {
 
        my ($y, $m);
 
-       if (/^(\d{4})\W(\d{1,2})$/ ||           # 2004.07  or  2004-7
-                       /^(\d\d)\W(\d)$/ ||     # 04/7
-                       /^(\d\d)[.-](\d\d)$/) { # 04-07
+       if (/^(\d{4})\W(\d{1,2})$/ ||           # YYYY.MM  or  YYYY-M
+                       /^(\d\d)\W(\d)$/ ||     # YY/M  or  YY-M
+                       /^(\d\d)[.-](\d\d)$/) { # YY-MM
                ($y, $m) = ($1, $2);
-       } elsif (/^(\d{1,2})\W(\d{4})$/ ||      # 07-2004  or  7/2004
-                       /^(\d)\W(\d\d)$/ ||     # 7/04
-                       /^(\d\d)\/(\d\d)$/) {   # 07/04
+       } elsif (/^(\d{1,2})\W(\d{4})$/ ||      # MM-YYYY  or  M/YYYY
+                       /^(\d)\W(\d\d)$/ ||     # M/YY  or  M-YY
+                       /^(\d\d)\/?(\d\d)$/) {  # MM/YY  or  MMYY
                ($y, $m) = ($2, $1);
        } else {
                croak "Unable to parse expiration date: $str";
@@ -230,9 +242,6 @@ sub parse_response {
 
        $self->server_response($response);
        
-       # (It's not quite clear whether there should be some decoding, or if
-       # the result is already utf8.)
-
        $response = xml_in($response,
                        ForceArray => [qw(product flag)],
                        GroupTags => { qw(Products product flags flag) },
@@ -342,7 +351,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.
@@ -351,7 +360,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
 
@@ -394,23 +403,24 @@ Transaction type, being one of the following:
 
 =item card_number (required)
 
-Credit card number.  Any spaces will be removed.
+Credit card number.  Spaces are allowed, and will be automatically removed.
 
 =item exp_date (required)
 
-Credit card expiration date.  Since L<Business::OnlinePayment> does not
-specify any syntax, this module is rather lax in what it will accept.  It is
-recommended to use either I<YYYY-MM> or I<MM/YYYY>, to avoid any nasty
-surprises.
+Credit card expiration date.  Since L<Business::OnlinePayment> does not specify
+any syntax, this module is rather lax regarding what it will accept.  The
+recommended syntax is I<YYYY-MM>, but forms such as I<MM/YYYY> or I<MMYY> are
+allowed as well.
 
 =item cvv2
 
 Three- or four-digit verification code printed on the card.  This can be left
 blank or undefined, in which case no check will be performed.  Whether or not a
-transaction will be declined in case of a mismatch depends on the merchant.
+transaction will be declined in case of a mismatch depends on the merchant
+account configuration.
 
 This number may be called Card Verification Value (CVV2), Card Validation
-Code (CVC2) or Card Identification number (CID).
+Code (CVC2) or Card Identification number (CID), depending on the card issuer.
 
 =item description
 
@@ -427,21 +437,21 @@ L<"Products list syntax">.
 =item currency
 
 Currency of all amounts for this order.  This can currently be either
-C<CAN> (default) or C<USD>.
+C<CAD> (default) or C<USD>.
 
 =item taxes
 
 Taxes to be added automatically.  These should not be included in B<amount>;
-they will be 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>; multiple taxes must be
-separated by spaces.
+Available taxes are C<GST>, C<PST> and C<HST>.  Taxes can be combined by
+separating them with spaces, such as C<GST HST>.
 
 =item name / company / address / city / state / zip / country / phone / email
 
 Facultative customer information.  B<state> should be either a postal
 abbreviation or a two-letter code taken from ISO 3166-2, and B<country> should
-be a two-letter code taken from in ISO 3166-1.
+be a two-letter code taken from ISO 3166-1.
 
 =back
 
@@ -483,9 +493,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
 
 
@@ -527,14 +542,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
@@ -548,11 +566,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) 2004 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,