X-Git-Url: http://git.freeside.biz/gitweb/?p=Business-OnlinePayment-PayflowPro.git;a=blobdiff_plain;f=PayflowPro.pm;h=64399034a9d54a40e9145f7003b4d8873b1d2dda;hp=446a13476eedbc9e70bc28b2d27bcd032f48206e;hb=c32838a31b5447ccbe5682502f9332a4ec858edc;hpb=b07276604fe7412f98ad434dc7aef51b91a80b52 diff --git a/PayflowPro.pm b/PayflowPro.pm index 446a134..6439903 100644 --- a/PayflowPro.pm +++ b/PayflowPro.pm @@ -5,10 +5,11 @@ use vars qw($VERSION $DEBUG); use Carp qw(carp croak); use CGI; use Digest::MD5; +use Business::OnlinePayment::HTTPS 0.06; use base qw(Business::OnlinePayment::HTTPS); -$VERSION = '0.07_03'; +$VERSION = '0.07_04'; $VERSION = eval $VERSION; $DEBUG = 0; @@ -19,36 +20,6 @@ sub request_id { return $md5->hexdigest(); } -sub param { - my $self = shift; - my @args = @_; - - $self->{__PARAM} ||= {}; - my $param = $self->{__PARAM}; - - if (@args) { - if ( @args % 2 == 0 ) { - %$param = ( %$param, @args ); - } - elsif ( @args == 1 ) { - my $arg = shift; - if ( ref($arg) eq "HASH" ) { - %$param = ( %$param, %$arg ); - return keys %$arg; - } - else { - return $param->{$arg}; - } - } - else { - croak("param: invalid arguments: @_\n"); - } - } - else { - return ( keys %$param ); - } -} - sub debug { my $self = shift; @@ -65,44 +36,32 @@ sub debug { return ref($self) ? ( $self->{"__DEBUG"} || $DEBUG ) : $DEBUG; } -sub _deprecate { - my $self = shift; - carp( "method '", __PACKAGE__, "::$_[0]' is deprecated" ); - return $self->param(@_); -} - -# NOTE: for bigger picture perhaps we get rid of build_subs() some day -# and instead use something like param() as a standard method? - -# deprecated methods: -sub cert_path { return shift->_deprecate( "cert_path", @_ ); } - -# custom methods: -sub avs_code { return shift->param( "avs_code", @_ ); } -sub cvv2_code { return shift->param( "cvv2_code", @_ ); } -sub order_number { return shift->param( "order_number", @_ ); } -sub partner { return shift->param( "partner", @_ ); } -sub vendor { return shift->param( "vendor", @_ ); } - sub set_defaults { my $self = shift; my %opts = @_; # standard B::OP methods/data - $self->server("payflow.verisign.com"); + #$self->server("payflow.verisign.com"); + $self->server("payflowpro.verisign.com"); $self->port("443"); $self->path("/transaction"); + $self->build_subs(qw( + partner vendor client_certification_id + headers test_server + cert_path + order_number avs_code cvv2_response + response_page response_code response_headers + )); + # module specific data if ( $opts{debug} ) { $self->debug( $opts{debug} ); delete $opts{debug}; } - $self->param( - "test_server" => "pilot-payflowpro.verisign.com", - %opts, - ); + $self->test_server( "pilot-payflowpro.verisign.com" ); + } sub _map_fields { @@ -180,10 +139,10 @@ sub submit { my $zip = $content{'zip'}; $zip =~ s/[^[:alnum:]]//g; - $self->server( $self->param("test_server") ) if $self->test_transaction; + $self->server( $self->test_server ) if $self->test_transaction; - my $vendor = $self->param("vendor"); - my $partner = $self->param("partner"); + my $vendor = $self->vendor; + my $partner = $self->partner; $self->_revmap_fields( @@ -242,16 +201,17 @@ sub submit { ); # get header data, get request_id from %content if defined for ease of use - my %req_headers = %{ $self->param("headers") || {} }; + my %req_headers = %{ $self->headers || {} }; if ( defined $content{"request_id"} ) { - $req_headers{"X-VPS-REQUEST-ID"} = $content{"request_id"}; + $req_headers{"X-VPS-Request-ID"} = $content{"request_id"}; } - unless ( defined( $req_headers{"X-VPS-REQUEST-ID"} ) ) { - $req_headers{"X-VPS-REQUEST-ID"} = $self->request_id(); + unless ( defined( $req_headers{"X-VPS-Request-ID"} ) ) { + $req_headers{"X-VPS-Request-ID"} = $self->request_id(); } - unless ( defined( $req_headers{"X-VPS-VIT-CLIENT-CERTIFICATION-ID"} ) ) { - $req_headers{"X-VPS-VIT-CLIENT-CERTIFICATION-ID"} = - $self->param("client_certification_id"); + + unless ( defined( $req_headers{"X-VPS-VIT-Client-Certification-Id"} ) ) { + $req_headers{"X-VPS-VIT-Client-Certification-Id"} = + $self->client_certification_id; } my %options = ( @@ -262,13 +222,9 @@ sub submit { my ( $page, $resp, %resp_headers ) = $self->https_post( \%options, \%params ); - $self->param( - "transaction_response" => { - page => $page, - response => $resp, - headers => \%resp_headers, - }, - ); + $self->response_code( $resp ); + $self->response_page( $page ); + $self->response_headers( \%resp_headers ); # $page should contain name=value[[&name=value]...] pairs my $cgi = CGI->new("$page"); @@ -295,7 +251,7 @@ sub submit { } $self->avs_code($avs_code); - $self->cvv2_code( $cgi->param("CVV2MATCH") ); + $self->cvv2_response( $cgi->param("CVV2MATCH") ); $self->result_code( $cgi->param("RESULT") ); $self->order_number( $cgi->param("PNREF") ); $self->error_message( $cgi->param("RESPMSG") ); @@ -356,7 +312,7 @@ Business::OnlinePayment::PayflowPro - Payflow Pro backend for Business::OnlinePa print( "Card processed successfully: ", $tx->authorization, "\n", "order number: ", $tx->order_number, "\n", - "CVV2 code: ", $tx->cvv2_code, "\n", + "CVV2 response: ", $tx->cvv2_response, "\n", "AVS code: ", $tx->avs_code, "\n", ); } @@ -385,7 +341,7 @@ modules supports. =item set_defaults() -This method sets the 'server' attribute to 'payflow.verisign.com' and +This method sets the 'server' attribute to 'payflowpro.verisign.com' and the port attribute to '443'. This method also sets up the L described below. @@ -393,10 +349,11 @@ L described below. =back -=head1 Module specific methods +=head1 Unofficial methods -This module provides the following methods which are not currently -part of the standard Business::OnlinePayment interface: +This module provides the following methods which are not officially part of the +standard Business::OnlinePayment interface (as of 3.00_06) but are nevertheless +supported by multiple gateways modules and expected to be standardized soon: =over 4 @@ -404,25 +361,32 @@ part of the standard Business::OnlinePayment interface: =item L -=item L +=item L + +=back + +=head1 Module specific methods + +This module provides the following methods which are not currently +part of the standard Business::OnlinePayment interface: + +=over 4 =item L =item L -=item L - =item L =back =head2 Deprecated methods -The following methods are deprecated and may be removed in the next -release. Values for vendor and partner should now be set using the -param() method or as arguments to Business::OnlinePayment->new(). The -value for cert_path was used to support passing a path to PFProAPI.pm -(a Perl module/SDK from Verisign/Paypal) which is no longer used. +The following methods are deprecated and may be removed in a future +release. Values for vendor and partner should now be set as arguments to +Business::OnlinePayment->new(). The value for cert_path was used to support +passing a path to PFProAPI.pm (a Perl module/SDK from Verisign/Paypal) which is +no longer used. =over 4 @@ -442,7 +406,7 @@ The following default settings exist: =item server -payflow.verisign.com or test-payflow.verisign.com if +payflowpro.verisign.com or pilot-payflowpro.verisign.com if test_transaction() is TRUE =item port @@ -568,9 +532,9 @@ follows: N - no match undef - AVS values not available -=head2 cvv2_code() +=head2 cvv2_response() -The cvv2_code() method returns the CVV2MATCH field, which is a +The cvv2_response() method returns the CVV2MATCH field, which is a response message returned with the transaction result. =head2 expdate_mmyy() @@ -588,26 +552,6 @@ request_id for a transaction. It is recommended that you specify your own unique request_id for each transaction in %content. A request_id is REQUIRED by the PayflowPro processor. -=head2 param() - -The param() method is used to get/set object parameters. The param() -method may be called in several different ways: - -Get the value of 'myparam': - - my $value_or_reference = $self->param('myparam'); - -Get a list of all parameters that exist: - - my @params = $self->param(); - -Set multiple parameters at the same time: - - $self->param( - 'key1' => 'val1', - 'key2' => 'val2', - ); - =head2 debug() Enable or disble debugging. The value specified here will also set