+If 'action' matches one of the following keys it is replaced by the
+right hand side value:
+
+ 'normal authorization' => 'S', # Sale transaction
+ 'credit' => 'C', # Credit (refund)
+ 'authorization only' => 'A', # Authorization
+ 'post authorization' => 'D', # Delayed Capture
+ 'void' => 'V',
+
+If 'action' is 'C', 'D' or 'V' and 'order_number' is not set then
+'amount', 'card_number' and 'expiration' must be set.
+
+=head2 type
+
+If 'type' matches one of the following keys it is replaced by the
+right hand side value:
+
+ 'visa' => 'C',
+ 'mastercard' => 'C',
+ 'american express' => 'C',
+ 'discover' => 'C',
+ 'cc' => 'C',
+
+The value of 'type' is used to set transaction_type(). Currently this
+module only supports a transaction_type() of 'C' any other values will
+cause Carp::croak() to be called in submit().
+
+Note: Payflow Pro supports multiple credit card types, including:
+American Express/Optima, Diners Club, Discover/Novus, Enroute, JCB,
+MasterCard and Visa.
+
+=head1 Setting Payflow Pro parameters from content(%content)
+
+The following rules are applied to map data to Payflow Pro parameters
+from content(%content):
+
+ # PFP param => $content{<key>}
+ VENDOR => $self->vendor ? \( $self->vendor ) : 'login',
+ PARTNER => \( $self->partner ),
+ USER => 'login',
+ PWD => 'password',
+ TRXTYPE => 'action',
+ TENDER => 'type',
+ ORIGID => 'order_number',
+ COMMENT1 => 'description',
+ COMMENT2 => 'invoice_number',
+
+ ACCT => 'card_number',
+ CVV2 => 'cvv2',
+ EXPDATE => \( $month.$year ), # MM/YY from 'expiration'
+ AMT => 'amount',
+
+ FIRSTNAME => 'first_name',
+ LASTNAME => 'last_name',
+ NAME => 'name',
+ EMAIL => 'email',
+ COMPANYNAME => 'company',
+ STREET => 'address',
+ CITY => 'city',
+ STATE => 'state',
+ ZIP => \$zip, # 'zip' with non-numbers removed
+ COUNTRY => 'country',
+
+The required Payflow Pro parameters for credit card transactions are:
+
+ TRXTYPE TENDER PARTNER VENDOR USER PWD ORIGID
+
+=head1 Mapping Payflow Pro transaction responses to object methods
+
+The following methods provides access to the transaction response data
+resulting from a Payflow Pro request (after submit()) is called:
+
+=head2 order_number()
+
+This order_number() method returns the PNREF field, also known as the
+PayPal Reference ID, which is a unique number that identifies the
+transaction.
+
+=head2 result_code()
+
+The result_code() method returns the RESULT field, which is the
+numeric return code indicating the outcome of the attempted
+transaction.
+
+A RESULT of 0 (zero) indicates the transaction was approved and
+is_success() will return '1' (one/TRUE). Any other RESULT value
+indicates a decline or error and is_success() will return '0'
+(zero/FALSE).
+
+=head2 error_message()
+
+The error_message() method returns the RESPMSG field, which is a
+response message returned with the transaction result.
+
+=head2 authorization()
+
+The authorization() method returns the AUTHCODE field, which is the
+approval code obtained from the processing network.
+
+=head2 avs_code()
+
+The avs_code() method returns a combination of the AVSADDR and AVSZIP
+fields from the transaction result. The value in avs_code is as
+follows:
+
+ Y - Address and ZIP match
+ A - Address matches but not ZIP
+ Z - ZIP matches but not address
+ N - no match
+ undef - AVS values not available
+
+=head2 cvv2_code()
+
+The cvv2_code() method returns the CVV2MATCH field, which is a
+response message returned with the transaction result.
+
+=head1 COMPATIBILITY