1 These are the module writer's notes for v3. See the regular
2 "notes_for_module_writers" file first.
5 = Business::OnlinePayment::HTTPS =
7 If your gateway is HTTPS-based, use (or convert to)
8 Business::OnlinePayment::HTTPS !!
10 Note: The correct thing for modern B:OP: gateway modules that need to
11 speak HTTPS to do is to use Business::OnlinePayment::HTTPS and depend on
12 "Net::HTTPS::Any" (since B:OP itself doesn't).
17 - If your processor module encounters a setup problem, communication
18 error or other problem that's prevents the card from even being
19 run, you should die (or croak) with a useful error message. Setting
20 is_success to 0 and returning normally should only be done when the
21 transaction *processing* was sucessful (or at least elicited some sort
22 of result from the gateway), but the transaction itself returned a
23 "normal" decline status of some sort.
25 - (NEW IN 3.00_04) You should set "failure_status" depending on the
26 specific failure result, if (and only if) the failure results from one
27 of the defined statuses:
30 - "nsf" (non-sufficient funds / credit limit)
34 - "inactive" (inactive card or not authorized for card-not-present) (?)
35 - "decline" (other card/transaction declines only, not other errors)
38 = (NEW IN 3.01) Introspection =
40 - Add an _info subroutine to your module that returns a hashref of
45 'info_compat' => '0.01', # always 0.01 for now,
46 # 0.02 will have requirements
47 'gateway_name' => 'Example Gateway',
48 'gateway_url' => 'http://www.example.com/',
49 'module_version' => $VERSION,
50 'supported_types' => [ qw( CC ECHECK ) ],
51 'token_support' => 0, #card storage/tokenization support
52 'test_transaction' => 0, #set true if ->test_transaction(1) works
53 'partial_auth' => 1, #can gateway partial auth (new in 3.04)
54 'supported_actions' => [
55 'Normal Authorization',
64 # or a more complicated case:
68 'info_compat' => '0.01', # always 0.01 for now,
69 # 0.02 will have requirements
70 'gateway_name' => 'Example Gateway',
71 'gateway_url' => 'http://www.example.com/',
72 'module_version' => $VERSION,
73 'module_notes' => 'usage notes',
74 'supported_types' => [ qw( CC ECHECK ) ],
76 'test_transaction' => 1,
77 'supported_actions' => { 'CC' => [
78 'Normal Authorization',
83 'Recurring Authorization',
84 'Modify Recurring Authorization',
85 'Cancel Recurring Authorization',
88 'Normal Authorization',
93 'CC_void_requires_card' => 1,
94 'ECHECK_void_requires_account' => 1, #routing_code, account_number, name
99 = authorization and order_number (NEWLY DOCUMENTED IN 3.01) =
101 Gateways will return one or two values from Authorization Only and
102 Normal Authorization transactions that must be submitted back with a
103 Post Authorization, Void, or Credit transaction.
105 If the gateway returns one value, return this as "authorization"
107 If the gateway returns two values, return one as "authorization" and the
108 other as "order_number". Typically "authorization" is the more low-level
109 value returned from the underlying processing network while "order_number"
110 is a unique tranaction id generated by the gateway.
113 = Moo (NEWLY DOCUMENTED IN 3.04) =
115 Feel free to write gateway modules which use Moo. Please do not require
116 Moo newer than 0.091011 at this time (until 2018 or so).
119 = Partial authorizations (NEWLY DOCUMENTED IN 3.04) =
121 If your gateway supports partial authorizations:
123 - Declare this in your "sub _info" introspection subroutine:
126 - Add "partial_auth_amount to your build_subs call in set_defaults, or add
128 $self->build_subs('partial_auth_amount');
130 - Honor the transaction 'partial_auth' flag as follows:
131 + If this transaction flag is unset, the application is not expecting to
132 handle a partial authorzation. So, either set the gateway flag disabling
133 partial authorizations, or (if your gatweay does not have such a
134 setting), immediately void any partial authorization received and
136 + If this transaction flag is set, the application can handle a partial
137 authorization. Make sure the flag to enable them is passed to the
138 gateway, if necessary. When a partial authorization is received, return
139 is_success 1, and the amount as "partial_auth_amount":
140 $self->partial_auth_amount( $partial_amount );
141 For normal full authorizations, "partial_auth_amount" must not be set.