projects
/
Business-OnlinePayment.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Document best-practice eval of the submit() method in example
[Business-OnlinePayment.git]
/
OnlinePayment.pm
diff --git
a/OnlinePayment.pm
b/OnlinePayment.pm
index
482f6e8
..
f8417ba
100644
(file)
--- a/
OnlinePayment.pm
+++ b/
OnlinePayment.pm
@@
-6,7
+6,7
@@
use Carp;
require 5.005;
require 5.005;
-$VERSION = '3.0
1_03
';
+$VERSION = '3.0
3_01
';
$VERSION = eval $VERSION; # modperlstyle: convert the string into a number
# Remember subclasses we have "wrapped" submit() with _pre_submit()
$VERSION = eval $VERSION; # modperlstyle: convert the string into a number
# Remember subclasses we have "wrapped" submit() with _pre_submit()
@@
-33,6
+33,8
@@
my @methods = qw(
response_code
response_header
response_page
response_code
response_header
response_page
+ avs_code
+ cvv2_response
);
#fallback
);
#fallback
@@
-50,16
+52,16
@@
sub _info {
%_info_handler = (
'supported_types' => sub {
my( $class, $v ) = @_;
%_info_handler = (
'supported_types' => sub {
my( $class, $v ) = @_;
- my $types = ref($v) ? $v :
[ $v
];
- $types = { map { $_=>1 } @$types } if ref($
v
) eq 'ARRAY';
+ my $types = ref($v) ? $v :
defined($v) ? [ $v ] : [
];
+ $types = { map { $_=>1 } @$types } if ref($
types
) eq 'ARRAY';
$types;
},
'supported_actions' => sub {
my( $class, $v ) = @_;
$types;
},
'supported_actions' => sub {
my( $class, $v ) = @_;
- return $v if ref($v) eq 'HASH';
+ return
%
$v if ref($v) eq 'HASH';
$v = [ $v ] unless ref($v);
$v = [ $v ] unless ref($v);
- my $types = $class->info('supported_types');
-
{ map { $_ => $v } keys %$types }
;
+ my $types = $class->info('supported_types')
|| {}
;
+
( map { $_ => $v } keys %$types )
;
},
);
},
);
@@
-270,15
+272,24
@@
Business::OnlinePayment - Perl extension for online payment processing
type => 'Visa',
amount => '49.95',
card_number => '1234123412341238',
type => 'Visa',
amount => '49.95',
card_number => '1234123412341238',
- expiration => '0
100
',
+ expiration => '0
6/15
',
name => 'John Q Doe',
);
name => 'John Q Doe',
);
- $transaction->submit();
-
- if($transaction->is_success()) {
- print "Card processed successfully: ", $transaction->authorization(), "\n";
+
+ eval { $transaction->submit(); };
+
+ if ( $@ ) {
+
+ print "$processor error: $@\n";
+
} else {
} else {
- print "Card was rejected: ", $transaction->error_message(), "\n";
+
+ if ( $transaction->is_success() ) {
+ print "Card processed successfully: ". $transaction->authorization()."\n";
+ } else {
+ print "Card was rejected: ". $transaction->error_message(). "\n";
+ }
+
}
=head1 DESCRIPTION
}
=head1 DESCRIPTION
@@
-345,6
+356,8
@@
What action being taken by this transaction. Currently available are:
=item Post Authorization
=item Post Authorization
+=item Reverse Authorization
+
=item Void
=item Credit
=item Void
=item Credit
@@
-398,6
+411,11
@@
Duty amount (portion of amount field, not added to it).
Tax exempt flag (i.e. TRUE, FALSE, T, F, YES, NO, Y, N, 1, 0).
Tax exempt flag (i.e. TRUE, FALSE, T, F, YES, NO, Y, N, 1, 0).
+=item currency
+
+Currency, specified as an ISO 4217 three-letter code, such as USD, CAD, EUR,
+AUD, DKK, GBP, JPY, NZD, etc.
+
=back
=head3 CUSTOMER INFO FIELDS
=back
=head3 CUSTOMER INFO FIELDS
@@
-492,14
+510,27
@@
IP Address from which the transaction originated.
Credit card number.
Credit card number.
+=item expiration
+
+Credit card expiration, MM/YY.
+
=item cvv2
CVV2 number (also called CVC2 or CID) is a three- or four-digit
security code used to reduce credit card fraud.
=item cvv2
CVV2 number (also called CVC2 or CID) is a three- or four-digit
security code used to reduce credit card fraud.
-=item
expiratio
n
+=item
card_toke
n
-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
=item track1
@@
-509,7
+540,7
@@
Track 1 on the magnetic stripe (Card present only)
Track 2 on the magnetic stripe (Card present only)
Track 2 on the magnetic stripe (Card present only)
-=item recurring
billing
+=item recurring
_
billing
Recurring billing flag
Recurring billing flag
@@
-609,14
+640,19
@@
verification (if the processor supports it).
=head2 submit()
=head2 submit()
-Submit the transaction to the processor for completion
+Submit the transaction to the processor for completion.
+
+If there is a gateway communication error or other "meta" , the submit method
+will throw a fatal exception. You can catch this with eval {} if you would
+like to treat gateway co
=head1 TRANSACTION RESULT METHODS
=head2 is_success()
=head1 TRANSACTION RESULT METHODS
=head2 is_success()
-Returns true if the transaction was submitted successfully, false if
-it failed (or undef if it has not been submitted yet).
+Returns true if the transaction was approved by the gateway, false if
+it was submitted but not approved, or undef if it has not been
+submitted yet.
=head2 error_message()
=head2 error_message()
@@
-632,10
+668,8
@@
are: "expired", "nsf" (non-sufficient funds), "stolen", "pickup",
"blacklisted" and "declined" (card/transaction declines only, not
other errors).
"blacklisted" and "declined" (card/transaction declines only, not
other errors).
-Note that (as of Aug 2006) this is only supported by some of the
-newest processor modules, and that, even if supported, a failure
-status is an entirely optional field that is only set for specific
-kinds of failures.
+Note that not all processor modules support this, and that if supported,
+it may not be set for all declines.
=head2 authorization()
=head2 authorization()
@@
-649,6
+683,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.
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
=head2 fraud_score()
Retrieve or change the fraud score from any Business::FraudDetect plugin
@@
-747,6
+786,17
@@
Ivan Kohler <ivan-business-onlinepayment@420.am>
Phil Lobbes E<lt>phil at perkpartners dot comE<gt>
Phil Lobbes E<lt>phil at perkpartners dot comE<gt>
+=head1 COPYRIGHT
+
+Copyright (c) 1999-2004 Jason Kohles
+Copyright (c) 2004 Ivan Kohler
+Copyright (c) 2007-2014 Freeside Internet Services, Inc.
+
+All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it under
+the same terms as Perl itself.
+
=head1 HOMEPAGE
Homepage: http://420.am/business-onlinepayment/
=head1 HOMEPAGE
Homepage: http://420.am/business-onlinepayment/
@@
-760,21
+810,18
@@
http://420.am/cgi-bin/mailman/listinfo/bop-devel/
=head1 REPOSITORY
=head1 REPOSITORY
-The code is available from our public
CVS
repository:
+The code is available from our public
git
repository:
- export CVSROOT=":pserver:anonymous@cvs.freeside.biz:/home/cvs/cvsroot"
- cvs login
- # The password for the user `anonymous' is `anonymous'.
- cvs checkout Business-OnlinePayment
+ git clone git://git.freeside.biz/Business-OnlinePayment.git
Or on the web:
Or on the web:
- http://freeside.biz/
cgi-bin/viewvc.cgi/Business-OnlinePayment/
+ http://freeside.biz/
gitweb/?p=Business-OnlinePayment.git
Many (but by no means all!) processor plugins are also available in the same
repository, see:
Many (but by no means all!) processor plugins are also available in the same
repository, see:
- http://freeside.biz/
cgi-bin/viewvc.cgi
/
+ http://freeside.biz/
gitweb
/
=head1 DISCLAIMER
=head1 DISCLAIMER