X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=OnlinePayment.pm;h=00a34c15e8049659e04473b10ea9a9c1a1b1398d;hb=06aef4f2a899ed6d6aaaf77c23567aea7db8847c;hp=05d89bd5b1a2fbb014966d1378a8a8a4129a53a4;hpb=7b3f32e925e0acec89f1ea2421a25d5decc6216f;p=Business-OnlinePayment.git diff --git a/OnlinePayment.pm b/OnlinePayment.pm index 05d89bd..00a34c1 100644 --- a/OnlinePayment.pm +++ b/OnlinePayment.pm @@ -1,12 +1,12 @@ package Business::OnlinePayment; use strict; -use vars qw($VERSION); +use vars qw($VERSION %_info_handler); use Carp; require 5.005; -$VERSION = '3.01_01'; +$VERSION = '3.01_04'; $VERSION = eval $VERSION; # modperlstyle: convert the string into a number # Remember subclasses we have "wrapped" submit() with _pre_submit() @@ -30,8 +30,52 @@ my @methods = qw( transaction_type fraud_score fraud_transaction_id + response_code + response_header + response_page ); +#fallback +sub _info { + my $class = shift; + ( my $gw = $class ) =~ s/^Business::OnlinePayment:://; + { + 'info_compat' => '0.00', + 'gateway_name' => $gw, + 'module_notes' => "Module does not yet provide info.", + }; +} + +#allow classes to declare info in a flexible way, but return normalized info +%_info_handler = ( + 'supported_types' => sub { + my( $class, $v ) = @_; + my $types = ref($v) ? $v : [ $v ]; + $types = { map { $_=>1 } @$types } if ref($v) eq 'ARRAY'; + $types; + }, + 'supported_actions' => sub { + my( $class, $v ) = @_; + return $v if ref($v) eq 'HASH'; + $v = [ $v ] unless ref($v); + my $types = $class->info('supported_types'); + { map { $_ => $v } keys %$types }; + }, +); + +sub info { + my $class = shift; #class or object + my $info = $class->_info; + if ( @_ ) { + my $key = shift; + exists($_info_handler{$key}) + ? &{ $_info_handler{$key} }( $class, $info->{$key} ) + : $info->{$key}; + } else { + wantarray ? ( keys %$info ) : [ keys %$info ]; + } +} + sub new { my($class,$processor,%data) = @_; @@ -291,10 +335,27 @@ processors support all transaction types. =item action -What to do with the transaction (currently available are: Normal -Authorization, Authorization Only, Credit, Post Authorization, -Recurring Authorization, Modify Recurring Authorization, -Cancel Recurring Authorization) +What action being taken by this transaction. Currently available are: + +=over 8 + +=item Normal Authorization + +=item Authorization Only + +=item Post Authorization + +=item Void + +=item Credit + +=item Recurring Authorization + +=item Modify Recurring Authorization + +=item Cancel Recurring Authorization + +=back =item amount @@ -431,14 +492,27 @@ IP Address from which the transaction originated. Credit card number. +=item expiration + +Credit card expiration. + =item cvv2 CVV2 number (also called CVC2 or CID) is a three- or four-digit security code used to reduce credit card fraud. -=item expiration +=item card_token -Credit card expiration. +If supported by your gateway, you can pass a card_token instead of a +card_number and expiration. + +=cut + +#=item card_response +# +#Some card_token schemes implement a challenge/response handshake. In those +#cases, this field is used for the response. In most cases the handshake +#it taken care of by the gateway module. =item track1 @@ -460,32 +534,36 @@ Recurring billing flag =item account_number -Bank account number for electronic checks or electronic funds -transfer. +Bank account number =item routing_code -Bank's routing code for electronic checks or electronic funds -transfer. +Bank's routing code =item account_type -Account type for electronic checks or electronic funds transfer. Can be -(case-insensitive): B, B, -B or B. +Account type. Can be (case-insensitive): B, +B, B or B. =item account_name -Account holder's name for electronic checks or electronic funds -transfer. +Account holder's name. =item bank_name -Bank's name for electronic checks or electronic funds transfer. +Bank name. + +=item bank_city + +Bank city. + +=item bank_state + +Bank state. =item check_type -Check type for electronic checks or electronic funds transfer. +Check type. =item customer_org @@ -493,18 +571,15 @@ Customer organization type. =item customer_ssn -Customer's social security number. Typically only required for -electronic checks or electronic funds transfer. +Customer's social security number. =item license_num -Customer's driver's license number. Typically only required for -electronic checks or electronic funds transfer. +Customer's driver's license number. =item license_dob -Customer's date of birth. Typically only required for electronic -checks or electronic funds transfer. +Customer's date of birth. =back @@ -587,6 +662,11 @@ later. The unique order number for the transaction generated by the gateway. Store this if you would like to run inquiries or refunds on the transaction later. +=head2 card_token() + +If supported by your gateway, a card_token can be used in a subsequent +transaction to refer to a card number. + =head2 fraud_score() Retrieve or change the fraud score from any Business::FraudDetect plugin @@ -595,6 +675,23 @@ Retrieve or change the fraud score from any Business::FraudDetect plugin Retrieve or change the transaction id from any Business::FraudDetect plugin +=head2 response_code() + +=head2 response_headers() + +=head2 response_page() + +These three fields are set by some processors (especially those which use +HTTPS) when the transaction fails at the communication level rather than +as a transaction. + +response_code is the HTTP response code and message, i.e. +'500 Internal Server Error'. + +response_headers is a hash reference of the response headers + +response_page is the raw content. + =head2 result_code() Returns the precise result code that the processor returned, these are @@ -602,6 +699,10 @@ normally one letter codes that don't mean much unless you understand the protocol they speak, you probably don't need this, but it's there just in case. +=head2 avs_code() + +=head2 cvv2_response() + =head1 MISCELLANEOUS INTERNAL METHODS =head2 transaction_type() @@ -654,9 +755,13 @@ Use this for handling boolean content like tax_exempt. =head1 AUTHORS +(v2 series) + Jason Kohles, email@jasonkohles.com -(v3 rewrite) Ivan Kohler +(v3 rewrite) + +Ivan Kohler Phil Lobbes Ephil at perkpartners dot comE