From: ivan Date: Tue, 14 Jan 2003 05:55:50 +0000 (+0000) Subject: correct filename haha X-Git-Tag: BUSINESS_ONLINEPAYMENT_PAYFLOWPRO_0_01~1 X-Git-Url: http://git.freeside.biz/gitweb/?p=Business-OnlinePayment-PayflowPro.git;a=commitdiff_plain;h=b1085869cd350b0df23fcca35dc659e0d0cc46fa correct filename haha --- diff --git a/LinkPoint.pm b/LinkPoint.pm deleted file mode 100644 index 45d0fb8..0000000 --- a/LinkPoint.pm +++ /dev/null @@ -1,238 +0,0 @@ -package Business::OnlinePayment::PayflowPro; - -use strict; -use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); -use Carp qw(croak); -use AutoLoader; -use Business::OnlinePayment; - -use PFProAPI; #Payflow PRO SDK from Verisign - -require Exporter; - -@ISA = qw(Exporter AutoLoader Business::OnlinePayment); -@EXPORT = qw(); -@EXPORT_OK = qw(); -$VERSION = '0.02'; - -sub set_defaults { - my $self = shift; - - #$self->server('staging.linkpt.net'); - $self->server('secure.linkpt.net'); - $self->port('1139'); - -} - -sub map_fields { - my($self) = @_; - - my %content = $self->content(); - - #ACTION MAP - my %actions = ('normal authorization' => 'ApproveSale', - 'authorization only' => 'CapturePayment', - 'credit' => 'ReturnOrder', - 'post authorization' => 'BillOrders', - ); - $content{'action'} = $actions{lc($content{'action'})} || $content{'action'}; - - # stuff it back into %content - $self->content(%content); -} - -sub build_subs { - my $self = shift; - foreach(@_) { - #no warnings; #not 5.005 - local($^W)=0; - eval "sub $_ { my \$self = shift; if(\@_) { \$self->{$_} = shift; } return \$self->{$_}; }"; - } -} - -sub remap_fields { - my($self,%map) = @_; - - my %content = $self->content(); - foreach(keys %map) { - $content{$map{$_}} = $content{$_}; - } - $self->content(%content); -} - -sub revmap_fields { - my($self, %map) = @_; - my %content = $self->content(); - foreach(keys %map) { -# warn "$_ = ". ( ref($map{$_}) -# ? ${ $map{$_} } -# : $content{$map{$_}} ). "\n"; - $content{$_} = ref($map{$_}) - ? ${ $map{$_} } - : $content{$map{$_}}; - } - $self->content(%content); -} - -sub get_fields { - my($self,@fields) = @_; - - my %content = $self->content(); - my %new = (); - foreach( grep defined $content{$_}, @fields) { $new{$_} = $content{$_}; } - return %new; -} - -sub submit { - my($self) = @_; - - - $self->map_fields(); - - my %content = $self->content; - - my($month, $year); - unless ( $content{action} eq 'BillOrders' ) { - - if ( $self->transaction_type() =~ - /^(cc|visa|mastercard|american express|discover)$/i - ) { - } else { - Carp::croak("PayflowPro can't handle transaction type: ". - $self->transaction_type()); - } - - $content{'expiration'} =~ /^(\d+)\D+\d*(\d{2})$/ - or croak "unparsable expiration $content{expiration}"; - - ( $month, $year ) = ( $1, $2 ); - $month = '0'. $month if $month =~ /^\d$/; - $year += 2000 if $year < 2000; #not y4k safe, oh shit - } - - $content{'address'} =~ /^(\S+)\s/; - my $addrnum = $1; - - $self->server('staging.linkpt.net') if $self->test_transaction; - - $self->revmap_fields( - hostname => \( $self->server ), - port => \( $self->port ), - storename => \( $self->storename ), - keyfile => \( $self->keyfile ), - addrnum => \$addrnum, - - cardNumber => 'card_number', - cardExpMonth => \$month, - cardExpYear => \$year, - ); - - my $lperl = new LPERL - $self->lbin, - 'FILE', - $self->can('tmp') - ? $self->tmp - : '/tmp'; - my $action = $content{action}; - - $self->required_fields(qw/ - hostname port storename keyfile amount cardNumber cardExpMonth cardExpYear - /); - - my %post_data = $self->get_fields(qw/ - hostname port storename keyfile - result - amount cardNumber cardExpMonth cardExpYear - name email phone address city state zip country - /); - - #print "$_ => $post_data{$_}\n" foreach keys %post_data; - - my %response; - { - local($^W)=0; - %response = $lperl->$action(\%post_data); - } - - if ( $response{'statusCode'} == 0 ) { - $self->is_success(0); - $self->result_code(''); - $self->error_message($response{'statusMessage'}); - } else { - $self->is_success(1); - $self->result_code($response{'AVCCode'}); - $self->authorization($response{'trackingID'}); -# $self->order_number($response{'neworderID'}); - } - -} - -1; -__END__ - -=head1 NAME - -Business::OnlinePayment::PayflowPro - Verisign PayflowPro backend for Business::OnlinePayment - -=head1 SYNOPSIS - - use Business::OnlinePayment; - - my $tx = new Business::OnlinePayment( 'PayflowPro', - 'storename' => 'your_store_number', - 'keyfile' => '/path/to/keyfile.pem', - 'lbin' => '/path/to/binary/lbin', - 'tmp' => '/secure/tmp', # a secure tmp directory - ); - - $tx->content( - type => 'VISA', - action => 'Normal Authorization', - description => 'Business::OnlinePayment test', - amount => '49.95', - invoice_number => '100100', - customer_id => 'jsk', - name => 'Jason Kohles', - address => '123 Anystreet', - city => 'Anywhere', - state => 'UT', - zip => '84058', - email => 'ivan-payflowpro@420.am', - card_number => '4007000000027', - expiration => '09/99', - ); - $tx->submit(); - - if($tx->is_success()) { - print "Card processed successfully: ".$tx->authorization."\n"; - } else { - print "Card was rejected: ".$tx->error_message."\n"; - } - -=head1 SUPPORTED TRANSACTION TYPES - -=head2 Visa, MasterCard, American Express, JCB, Discover/Novus, Carte blanche/Diners Club - -=head1 DESCRIPTION - -For detailed information see L. - -=head1 COMPATIBILITY - -This module implements an interface to the PayflowPro Perl API, which can -be downloaded at https://manager.verisign.com/ with a valid login. - -=head1 BUGS - -=head1 AUTHOR - -Ivan Kohler - -Based on Busienss::OnlinePayment::AuthorizeNet written by Jason Kohles. - -=head1 SEE ALSO - -perl(1), L. - -=cut - diff --git a/PayflowPro.pm b/PayflowPro.pm new file mode 100644 index 0000000..45d0fb8 --- /dev/null +++ b/PayflowPro.pm @@ -0,0 +1,238 @@ +package Business::OnlinePayment::PayflowPro; + +use strict; +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); +use Carp qw(croak); +use AutoLoader; +use Business::OnlinePayment; + +use PFProAPI; #Payflow PRO SDK from Verisign + +require Exporter; + +@ISA = qw(Exporter AutoLoader Business::OnlinePayment); +@EXPORT = qw(); +@EXPORT_OK = qw(); +$VERSION = '0.02'; + +sub set_defaults { + my $self = shift; + + #$self->server('staging.linkpt.net'); + $self->server('secure.linkpt.net'); + $self->port('1139'); + +} + +sub map_fields { + my($self) = @_; + + my %content = $self->content(); + + #ACTION MAP + my %actions = ('normal authorization' => 'ApproveSale', + 'authorization only' => 'CapturePayment', + 'credit' => 'ReturnOrder', + 'post authorization' => 'BillOrders', + ); + $content{'action'} = $actions{lc($content{'action'})} || $content{'action'}; + + # stuff it back into %content + $self->content(%content); +} + +sub build_subs { + my $self = shift; + foreach(@_) { + #no warnings; #not 5.005 + local($^W)=0; + eval "sub $_ { my \$self = shift; if(\@_) { \$self->{$_} = shift; } return \$self->{$_}; }"; + } +} + +sub remap_fields { + my($self,%map) = @_; + + my %content = $self->content(); + foreach(keys %map) { + $content{$map{$_}} = $content{$_}; + } + $self->content(%content); +} + +sub revmap_fields { + my($self, %map) = @_; + my %content = $self->content(); + foreach(keys %map) { +# warn "$_ = ". ( ref($map{$_}) +# ? ${ $map{$_} } +# : $content{$map{$_}} ). "\n"; + $content{$_} = ref($map{$_}) + ? ${ $map{$_} } + : $content{$map{$_}}; + } + $self->content(%content); +} + +sub get_fields { + my($self,@fields) = @_; + + my %content = $self->content(); + my %new = (); + foreach( grep defined $content{$_}, @fields) { $new{$_} = $content{$_}; } + return %new; +} + +sub submit { + my($self) = @_; + + + $self->map_fields(); + + my %content = $self->content; + + my($month, $year); + unless ( $content{action} eq 'BillOrders' ) { + + if ( $self->transaction_type() =~ + /^(cc|visa|mastercard|american express|discover)$/i + ) { + } else { + Carp::croak("PayflowPro can't handle transaction type: ". + $self->transaction_type()); + } + + $content{'expiration'} =~ /^(\d+)\D+\d*(\d{2})$/ + or croak "unparsable expiration $content{expiration}"; + + ( $month, $year ) = ( $1, $2 ); + $month = '0'. $month if $month =~ /^\d$/; + $year += 2000 if $year < 2000; #not y4k safe, oh shit + } + + $content{'address'} =~ /^(\S+)\s/; + my $addrnum = $1; + + $self->server('staging.linkpt.net') if $self->test_transaction; + + $self->revmap_fields( + hostname => \( $self->server ), + port => \( $self->port ), + storename => \( $self->storename ), + keyfile => \( $self->keyfile ), + addrnum => \$addrnum, + + cardNumber => 'card_number', + cardExpMonth => \$month, + cardExpYear => \$year, + ); + + my $lperl = new LPERL + $self->lbin, + 'FILE', + $self->can('tmp') + ? $self->tmp + : '/tmp'; + my $action = $content{action}; + + $self->required_fields(qw/ + hostname port storename keyfile amount cardNumber cardExpMonth cardExpYear + /); + + my %post_data = $self->get_fields(qw/ + hostname port storename keyfile + result + amount cardNumber cardExpMonth cardExpYear + name email phone address city state zip country + /); + + #print "$_ => $post_data{$_}\n" foreach keys %post_data; + + my %response; + { + local($^W)=0; + %response = $lperl->$action(\%post_data); + } + + if ( $response{'statusCode'} == 0 ) { + $self->is_success(0); + $self->result_code(''); + $self->error_message($response{'statusMessage'}); + } else { + $self->is_success(1); + $self->result_code($response{'AVCCode'}); + $self->authorization($response{'trackingID'}); +# $self->order_number($response{'neworderID'}); + } + +} + +1; +__END__ + +=head1 NAME + +Business::OnlinePayment::PayflowPro - Verisign PayflowPro backend for Business::OnlinePayment + +=head1 SYNOPSIS + + use Business::OnlinePayment; + + my $tx = new Business::OnlinePayment( 'PayflowPro', + 'storename' => 'your_store_number', + 'keyfile' => '/path/to/keyfile.pem', + 'lbin' => '/path/to/binary/lbin', + 'tmp' => '/secure/tmp', # a secure tmp directory + ); + + $tx->content( + type => 'VISA', + action => 'Normal Authorization', + description => 'Business::OnlinePayment test', + amount => '49.95', + invoice_number => '100100', + customer_id => 'jsk', + name => 'Jason Kohles', + address => '123 Anystreet', + city => 'Anywhere', + state => 'UT', + zip => '84058', + email => 'ivan-payflowpro@420.am', + card_number => '4007000000027', + expiration => '09/99', + ); + $tx->submit(); + + if($tx->is_success()) { + print "Card processed successfully: ".$tx->authorization."\n"; + } else { + print "Card was rejected: ".$tx->error_message."\n"; + } + +=head1 SUPPORTED TRANSACTION TYPES + +=head2 Visa, MasterCard, American Express, JCB, Discover/Novus, Carte blanche/Diners Club + +=head1 DESCRIPTION + +For detailed information see L. + +=head1 COMPATIBILITY + +This module implements an interface to the PayflowPro Perl API, which can +be downloaded at https://manager.verisign.com/ with a valid login. + +=head1 BUGS + +=head1 AUTHOR + +Ivan Kohler + +Based on Busienss::OnlinePayment::AuthorizeNet written by Jason Kohles. + +=head1 SEE ALSO + +perl(1), L. + +=cut +