# Remember subclasses we have "wrapped" submit() with _pre_submit()
my %Presubmit_Added = ();
-my %fields = (
- authorization => undef,
- error_message => undef,
- failure_status => undef,
- fraud_detect => undef,
- is_success => undef,
- maximum_risk => undef,
- path => undef,
- port => undef,
- require_avs => undef,
- result_code => undef,
- server => undef,
- server_response => undef,
- test_transaction => undef,
- transaction_type => undef,
- fraud_score => undef,
- fraud_transaction_id => undef,
+my @methods = qw(
+ authorization
+ order_number
+ error_message
+ failure_status
+ fraud_detect
+ is_success
+ maximum_risk
+ path
+ port
+ require_avs
+ result_code
+ server
+ server_response
+ test_transaction
+ transaction_type
+ fraud_score
+ fraud_transaction_id
);
sub new {
croak("unknown processor $processor ($@)") if $@;
my $self = bless {processor => $processor}, $subclass;
- $self->build_subs(keys %fields);
+ $self->build_subs(@methods);
if($self->can("set_defaults")) {
$self->set_defaults(%data);
unless ( $@ =~ m/^Can\'t locate/ );
} else {
my $risk_tx = bless( { processor => $fraud_detection }, $subclass );
- $risk_tx->build_subs(keys %fields);
+ $risk_tx->build_subs(@methods);
if ($risk_tx->can('set_defaults')) {
$risk_tx->set_defaults();
}
}
}
-#helper sub
+#helper method
sub silly_bool {
my( $self, $value ) = @_;
Business::OnlinePayment is a generic module for processing payments
through online credit card processors, electronic cash systems, etc.
-=head1 METHODS AND FUNCTIONS
+=head1 CONSTRUCTOR
-=head2 new($processor, %processor_options);
+=head2 new($processor, %processor_options)
Create a new Business::OnlinePayment object, $processor is required,
and defines the online processor to use. If necessary, processor
only if absolutely necessary (especially path), as the processor
module was probably written with a specific target script in mind.
-=head2 content(%content);
+=head1 TRANSACTION SETUP METHODS
+
+=head2 content(%content)
The information necessary for the transaction, this tends to vary a
little depending on the processor, so we have chosen to use a system
=back
-=head2 submit();
+=head2 test_transaction()
+
+Most processors provide a test mode, where submitted transactions will
+not actually be charged or added to your batch, calling this function
+with a true argument will turn that mode on if the processor supports
+it, or generate a fatal error if the processor does not support a test
+mode (which is probably better than accidentally making real charges).
+
+=head2 require_avs()
+
+Providing a true argument to this module will turn on address
+verification (if the processor supports it).
+
+=head1 TRANSACTION SUBMISSION METHOD
+
+=head2 submit()
Submit the transaction to the processor for completion
-=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).
-=head2 failure_status();
+=head2 error_message()
+
+If the transaction has been submitted but was not accepted, this
+function will return the provided error message (if any) that the
+processor returned.
+
+=head2 failure_status()
If the transaction failed, it can optionally return a specific failure
status (normalized, not gateway-specific). Currently defined statuses
status is an entirely optional field that is only set for specific
kinds of failures.
-=head2 result_code();
+=head2 authorization()
-Returns the precise result code that the processor returned, these are
-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.
+If the transaction has been submitted and accepted, this function will
+provide you with the authorization code that the processor returned.
+Store this if you would like to run inquiries or refunds on the transaction
+later.
-=head2 test_transaction();
+=head2 order_number()
-Most processors provide a test mode, where submitted transactions will
-not actually be charged or added to your batch, calling this function
-with a true argument will turn that mode on if the processor supports
-it, or generate a fatal error if the processor does not support a test
-mode (which is probably better than accidentally making real charges).
+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 require_avs();
+=head2 fraud_score()
-Providing a true argument to this module will turn on address
-verification (if the processor supports it).
+Retrieve or change the fraud score from any Business::FraudDetect plugin
-=head2 transaction_type();
+=head2 fraud_transaction_id()
-Retrieve the transaction type (the 'type' argument to contents()).
-Generally only used internally, but provided in case it is useful.
+Retrieve or change the transaction id from any Business::FraudDetect plugin
-=head2 error_message();
+=head2 result_code()
-If the transaction has been submitted but was not accepted, this
-function will return the provided error message (if any) that the
-processor returned.
+Returns the precise result code that the processor returned, these are
+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 authorization();
+=head1 MISCELLANEOUS INTERNAL METHODS
-If the transaction has been submitted and accepted, this function will
-provide you with the authorization code that the processor returned.
+=head2 transaction_type()
-=head2 server();
+Retrieve the transaction type (the 'type' argument to contents()).
+Generally only used internally, but provided in case it is useful.
+
+=head2 server()
Retrieve or change the processor submission server address (CHANGE AT
YOUR OWN RISK).
-=head2 port();
+=head2 port()
Retrieve or change the processor submission port (CHANGE AT YOUR OWN
RISK).
-=head2 path();
+=head2 path()
Retrieve or change the processor submission path (CHANGE AT YOUR OWN
RISK).
-=head2 fraud_score();
+=head1 HELPER METHODS FOR GATEWAY MODULE AUTHORS
-Retrieve or change the fraud score from any Business::FraudDetect plugin
+=head2 build_subs( @sub_names )
-=head2 fraud_transaction_id();
+Build setter/getter subroutines for new return values.
-Retrieve or change the transaction id from any Business::FraudDetect plugin
+=head2 get_fields( @fields )
+
+Get the named fields if they are defined.
+
+=head2 remap_fields( %map )
+
+Remap field content (and stuff it back into content).
+
+=head2 required_fields( @fields )
+
+Croaks if any of the required fields are not present.
+
+=head2 dump_contents
+
+=head2 silly_bool( $value )
+
+Returns 0 if the value starts with y, Y, t or T.
+Returns 1 if the value starts with n, N, f or F.
+Otherwise returns the value itself.
+
+Use this for handling boolean content like tax_exempt.
=head1 AUTHORS