X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=InternetSecure.pm;h=0dd4d2aa24178983903b6553463528da87789746;hb=70860c963fab13b6c28e998519936fcb0af5d083;hp=af622414a78f859480a089d9b0afae7021f45652;hpb=4a8e54667a9e6199714cf5b4106ae6fba39bfdab;p=Business-OnlinePayment-InternetSecure.git diff --git a/InternetSecure.pm b/InternetSecure.pm index af62241..0dd4d2a 100755 --- a/InternetSecure.pm +++ b/InternetSecure.pm @@ -37,8 +37,9 @@ sub set_defaults { $self->path('/process.cgi'); $self->build_subs(qw( - receipt_number sales_order_number - cardholder card_type + receipt_number sales_number + date + card_type total_amount avs_response cvv2_response )); @@ -108,14 +109,13 @@ sub parse_expdate { # Convert a single product into a product string # sub prod_string { - my ($self, $currency, $taxes, %data) = @_; + my ($self, $currency, %data) = @_; croak "Missing amount in product" unless defined $data{amount}; my @flags = ($currency); - $taxes = uc $data{taxes} if defined $data{taxes}; - foreach (split ' ' => $taxes) { + foreach (split ' ' => uc($data{taxes} || '')) { croak "Unknown tax code $_" unless /^(GST|PST|HST)$/; push @flags, $_; } @@ -149,13 +149,11 @@ sub to_xml { croak 'Unsupported action' unless $content{action} =~ /^Normal Authori[zs]ation$/i; - $content{currency} ||= 'CAD'; - $content{currency} = uc $content{currency}; + $content{currency} = uc($content{currency} || 'CAD'); croak "Unknown currency code ", $content{currency} unless $content{currency} =~ /^(CAD|USD)$/; - $content{taxes} ||= ''; - $content{taxes} = uc $content{taxes}; + $content{taxes} = uc($content{taxes} || ''); my %data = $self->get_remap_fields(qw( xxxCard_Number card_number @@ -184,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; @@ -200,16 +198,16 @@ sub to_xml { if (ref $content{description}) { $data{Products} = join '|' => map $self->prod_string( - $content{currency}, - $content{taxes}, - %$_), - @{ $content{description} }; + $content{currency}, + taxes => $content{taxes}, + %$_), + @{ $content{description} }; } else { $self->required_fields(qw(amount)); $data{Products} = $self->prod_string( $content{currency}, - $content{taxes}, - amount => $content{amount}, + taxes => $content{taxes}, + amount => $content{amount}, description => $content{description}, ); } @@ -253,8 +251,8 @@ sub parse_response { $self->infuse($response, qw( ReceiptNumber receipt_number - SalesOrderNumber sales_order_number - xxxName cardholder + SalesOrderNumber sales_number + Date date CardType card_type Page result_code ApprovalCode authorization @@ -366,7 +364,8 @@ to the merchant ID assigned to you by InternetSecure. =head1 METHODS -(See L for more methods.) +(Other methods are also available -- see L for more +details.) =head2 Before order submission @@ -429,12 +428,14 @@ Code (CVC2) or Card Identification number (CID), depending on the card issuer. A short description of the purchase. See L<"Products list syntax"> for an alternate syntax that allows a list of products to be specified. -=item amount +=item amount (usually required) + +Total amount to be billed, excluding taxes if they are to be added separately +by InternetSecure. -Total amount to be billed, excluding taxes if they are to be added separately. -This field is required if B is a string, and should be left -undefined if B contains a list of products, as outlined in -L<"Products list syntax">. +This field is required if B is a string, but should be left +undefined if B contains a list of products instead, as outlined +in L<"Products list syntax">. =item currency @@ -443,17 +444,15 @@ C (default) or C. =item taxes -Taxes to be added automatically. These should not be included in B; -they will be automatically added by InternetSecure later on. +Taxes to be added automatically to B by InternetSecure. -Available taxes are C, C and C. Taxes can be combined by -separating them with spaces, such as C. +Available taxes are C, C and C. Multiple taxes can specified +by concatenating them with spaces, such as C. =item name / company / address / city / state / zip / country / phone / email -Facultative customer information. B should be either a postal -abbreviation or a two-letter code taken from ISO 3166-2, and B should -be a two-letter code taken from ISO 3166-1. +Customer information. B should be a two-letter code taken from ISO +3166-1. =back @@ -463,18 +462,23 @@ be a two-letter code taken from ISO 3166-1. =over 4 -=item receipt_number() / sales_order_number() +=item receipt_number() -Receipt number and sales order number of submitted order. +Receipt number of this transaction; this is actually a string, unique to all +InternetSecure transactions. -=item total_amount() +=item sales_number() -Total amount billed for this order, including taxes. +Sales order number of this transaction. This is a number, unique to each +merchant, which is incremented by 1 each time. -=item cardholder() +=item date() -Cardholder's name. This is currently a mere copy of the B field passed -to B. +Date and time of the transaction. Format is C. + +=item total_amount() + +Total amount billed for this order, including taxes. =item card_type()