Beanstream Internet Payment Processing Process Transaction API

Document Version 1.2.12 Last Updated December 10, 2003

For further information please contact Beanstream customer support at (250) 472-2326 or [email protected]. Beanstream Internet Commerce Process Transaction API

Table of Contents

1. DOCUMENT REVISION HISTORY ...... 3 2. OVERVIEW ...... 4

2.1. ACCESS REQUIREMENTS...... 4 2.2. SECURITY ...... 4 3. INTEGRATION PROCEDURE ...... 5

3.1. OVERVIEW ...... 5 3.2. SUBMITTING THE TRANSACTION ...... 5 3.2.1. Duplicate Transaction Checking ...... 5 3.3. ERROR HANDLING...... 6 3.3.1. System Generated Errors...... 6 3.3.2. User Generated Errors...... 6 3.4. TRANSACTION COMPLETION ...... 7 3.4.1. Response Notification URL...... 7 3.5. THE SERVER-TO-SERVER PROCESSING METHOD...... 8 4. DATA VARIABLES...... 9

4.1. INPUT VARIABLES ...... 9 4.1.1. General Information ...... 9 4.1.2. Credit Information...... 11 4.1.3. Billing Information ...... 11 4.1.4. Shipping Information...... 12 4.1.5. Product Information ...... 12 4.1.6. Pricing Information ...... 12 4.1.7. Custom Information...... 13 4.1.8. Transaction Types...... 13 4.2. RESPONSE VARIABLES ...... 14 4.2.1. Response Parameters...... 14 5. VARIABLE CODES ...... 16

5.1. MESSAGEID RESPONSE MESSAGES ...... 16 5.1.1. Processor Legend ...... 22 5.2. TRANSACTION TYPES ...... 22 5.3. COUNTRY CODES ...... 22 5.4. PROVINCE/STATE CODES ...... 24 5.5. AVS RESPONSE CODES ...... 25 6. RECURRING TRANSACTIONS...... 26

6.1. RECURRING DATA VARIABLES...... 26 6.1.1. Recurring Billing ...... 26 6.1.2. Billing Periods...... 27 6.2. BILLING FREQUENCY ...... 27 6.3. BILLING DATES ...... 27 7. TEST CARD NUMBERS ...... 29 8. URL ENCODING CHART ...... 30 9. EXAMPLES...... 31

Page 2 of 32 Beanstream Internet Commerce Process Transaction API

1. Document Revision History

Date Revision Description Author Revision Number March 13, 2002 Added detail on processing adjustment transaction types in Shawn Gerty 1.1 addition to purchase transaction types.

Added approvedPage/declinedPage specifications to the list Aston Lau of Input Variables.

Oct 22, 2002 Added instructions on CVD Aston Lau 1.2 Oct 23, 2002 Updated instructions on using ref fields Aston Lau 1.2.1 Feb 18, 2003 Added instructions on recurring transactions. Shawn Gerty 1.2.2

Added details on new merchant definable approvedPage and declinedPage URL parameters.

Added details on Server to Server Transaction Response Notification. Apr 16, 2003 Added cavEnabled parameter to list of input variables. Aston Lau 1.2.3 Jun 27, 2003 Added AVS response codes to section 4.2.1 Shawn Gerty 1.2.5 Added AVS response code message table to section 5.5 Aug 6, 2003 Updated description of response parameter authCode. Shawn Gerty 1.2.6 Changed trnOrderNumer from numeric only to alphanumeric. Aug 20, 2003 Added new bank and Beanstream response messages. Michael J 1.2.7 Foucher Aug 27, 2003 Added Verified By Visa information. Aston Lau 1.2.8 Sep 15, 2003 Extended length of card owner and address variables. Aston Lau 1.2.9 Fixed formatting of section 5 Oct 27, 2003 Added test credit card numbers PEC 1.2.10 Nov 6, 2003 Added duplicate checking information Aston Lau 1.2.11 Removed reference to Server-to-Server Response Notification URL (Response Notification URL is not a feature of STS) Added information on Server-to-Server Dec 10, 2003 Fixed errorPage variable in example Aston Lau 1.2.12

Page 3 of 32 Beanstream Internet Commerce Process Transaction API

2. Overview The transaction processing API method allows you to link any e-commerce order processing system directly to the Beanstream transaction server. This may be as simple as a one page order form, or as complex as a full shopping cart. Whereas all other processing methods provide you with a web interface that may be built into your site, the transaction processing API method allows you build your own web interface and offers the highest level of flexibility to your order process.

With this interface you may process not only purchase transaction types (purchase, pre-auth), but also adjustment transaction types (return, void purchase, void return, pre-auth completion).

2.1. Access Requirements In order to access the Process Transaction API, you must have a merchant with Beanstream and be able to communicate with our web server via 40-bit or 128-bit SSL.

2.2. Security The Process Transaction API is secured via 128-bit SSL encryption to prevent third parties from seeing the details of your customer’s transaction request during transit to the Beanstream server. Additionally, there are optional security measures that you can enable, including:

9 validating that the referring web site (i.e. the web site that the customer comes from) is yours 9 using PGP signing to verify that the transaction has been authorized by you 9 using PGP encryption to further encrypt the details of the transaction 9 requiring username/password validation 9 validating orders against

PGP is a key security feature available for use with Process Transaction. For further information on this and these other security features, please see the “Processing Methods” section of the documentation menu contained within the Membership Area.

Page 4 of 32 Beanstream Internet Commerce Process Transaction API

3. Integration Procedure

3.1. Overview Transactions are submitted to the Beanstream transaction server via a standard HTTP POST or GET request. The steps to complete a transaction are as follows:

9 The shopper browses your web site for products or services they would like to order. 9 The shopper completes the payment form, which can be either located on your web site or on the Beanstream web server. 9 The order information is submitted to Process Transaction on the Beanstream server. 9 The results of the transaction are returned to a web page that you specify.

If Verified by Visa (VBV) is enabled for your account, your customers’ credit cards are protected by a password which must be entered each time the card is charged. In this case, the transaction steps are as follows:

9 The shopper browses your web site for products or services they would like to order. 9 The shopper completes the payment form, which can be either located on your web site or on the Beanstream web server. 9 The order information is submitted to Process Transaction on the Beanstream server. 9 The Beanstream server returns a web page to your customer’s browser, where they must enter their VBV password. 9 The results of the password verification is submitted to the Beanstream server. 9 The results of the transaction are returned to a web page that you specify.

The VBV steps are transparent to the merchant, so the integration steps outlined in this document are the same for both VBV and non-VBV implementations.

3.2. Submitting the Transaction All transaction fields are populated and submitted to the transaction server at the following URL: https://www.beanstream.com/scripts/process_transaction.asp

The details of the transaction are sent to this web page as a set of field name/value pairs, submitted through either a form post or through the querystring. The call to process_transaction.asp will contain all of the information required to complete the transaction. For examples, refer to the Examples section of this document.

The order information is then posted to our processing script to complete the transaction. There are a number of required and optional fields that may be passed to the processing script. All required fields must be provided in order to complete the transaction, while the optional fields are used for informational purposes and product tracking. A full listing of fields accepted by the Process Transaction API is detailed in this document.

3.2.1. Duplicate Transaction Checking The Beanstream system checks for instances of duplicate transactions. Beanstream will mark the transaction as a duplicate if all of the following values are the same as a previous transaction that occurred within the last 24 hours:

x Transaction Amount x Card Number x Card Expiry Date

Page 5 of 32 Beanstream Internet Commerce Process Transaction API

However, if you pass an order number, the Beanstream system will base duplicate checking on all of the above values as well as the order number. An example where this is particularly useful is if you want to process a second transaction that has the same card number, card expiry date, and transaction amount as a previous transaction – you can do this by passing a different order number (and in doing so, avoid duplicate checking).

3.3. Error Handling There are two types of error messages that the Beanstream transaction server may return when processing a transaction: system generated errors and user generated errors.

3.3.1. System Generated Errors This error type is caused by fixed transaction settings that are set during development. These include fields passed along with the transaction such as the merchant ID as well as account settings configured in your Membership Area. If any of these fields contain invalid data or your transaction conflicts with your account settings, the system generated error page will be displayed detailing the missing requirements.

If you are incorporating Process Transaction in an online order form or shopping cart system, these messages will never be displayed to a shopper in a properly working system. They are provided only for debugging purposes during the design of your order form.

Possible error messages include the following:

9 Connection is not secure 9 Invalid merchant ID 9 Authorization Failed 9 Missing transaction data 9 Missing errorPage address

These messages are displayed on the Transaction Processing error page and are not redirected back to the address specified by the errorPage variable.

3.3.2. User Generated Errors If any of the credit information or billing information is invalid or missing, Process Transaction will redirect back to the address specified by the errorPage variable, returning all of the submitted information along with two error parameters: errorMessage and errorFields. The errorMessage variable will contain a descriptive message indicating all of the errors found on the order. This message is suitable for display on your order form for the customer to correct. The errorFields field contains a comma-separated list of all the field names that contain invalid data, enabling you to customize your own error handling.

(Note that all variables are passed back in URL-encoded form: what this means is that, because certain characters such as spaces are not allowed in URLs or are designated to mean certain things in URLs, to use these characters, they must first be encoded. For example, %20 is the URL-encoded form of the space character. See section 5 of this document for a full listing of characters and their URL-encoded equivalents.)

For example, say that process_transaction.asp is called with the errorPage variable https://www.beanstream.com/order/sample/order_form.asp, but the credit card number and expiry date passed to it was invalid. Then process_transaction.asp will redirect to https://www.beanstream.com/order/sample/order_form.asp with the following URL-encoded variables:

Page 6 of 32 Beanstream Internet Commerce Process Transaction API

errorMessage= %3CLI%3EInvalid+card+number%3Cbr%3E%3CLI%3Einvalid+expiry+date%2E%3Cbr% 3E%3Cbr%3E&errorFields=trnCardNumber%2CtrnExpYear

errorFields= trnCardNumber%2CtrnExpYear

(Only the credit card number and expiry are invalid so these are the only two filed names passed back.)

All field information is not assigned to the errorPage variable as it looks above. All transaction information submitted to the Beanstream Transaction server, in addition to the errorFields and errorMessage fields, are passed back to the URL specified in the errorPage field.

Transaction Request: https://www.beanstream.com/scripts/process_transaction.asp?errorPage=%2Fsamples% 2Forder_form.asp&merchant_id=109040000&trnCardOwner=Paul+Randal&trnCardNum ber=510012341234&trnExpMonth=01&trnExpYear=99&trnOrderNumber=2232&trnAmou [email protected]&ordName=Paul+Randal&ordPhone Number=9999999&ordAddress1=1045+Main+Street&ordAddress2=&ordCity=Vancouver &ordProvince=BC&ordPostalCode=V8R+1J6&ordCountry=CA

Transaction Response: https://www.beanstream.com/samples/order_form.asp?errorMessage=%3CLI%3EInvali d+card+number%3Cbr%3E%3CLI%3EInvalid+expiry+date%2E%3Cbr%3E%3Cbr%3 E&errorFields=trnCardNumber%2CtrnExpYear&errorPage=%2Fsamples%2Forder_fo rm.asp&merchant_id=109040000&trnCardOwner=Paul+Randal&trnCardNumber=510012 341234&trnExpMonth=01&trnExpYear=99&trnOrderNumber=2232&trnAmount=10.00&or [email protected]&ordName=Paul+Randal&ordPhoneNumber=99 99999&ordAddress1=1045+Main+Street&ordAddress2=&ordCity=Vancouver&ordProvinc e=BC&ordPostalCode=V8R+1J6&ordCountry=CA

Addendum: As of January 1st, 2002. The information sent back in the redirect as a result of a user generated error, we will no longer be returning the credit cardnumber or expiry date that was entered. The shopper will need to correct the error and re-enter their card number and expiry date.

3.4. Transaction Completion Upon successfully validating the passed order information, the transaction is passed to the bank for authorization. Upon returning, the user is either directed to the Transaction Approved or Transaction Declined URL, depending on the status of the transaction.

The Approved and Decline addresses are either set within the Order Settings module of the Membership Area or may be passed as parameters along with the transaction.

The results of the transaction are passed back in variables that are passed to the approved or declined pages. Refer to section 4.2 for a complete listing of these variables.

3.4.1. Response Notification URL The merchant may also optionally specify a Response Notification URL in the Membership Area. When enabled, the Beanstream system will post the transaction response to this URL. This URL is entered within the Order Settings module of the Membership Area. The same response variables that are passed to the approved/decline page (as listed in section 4.2: Response Variables) will be passed to the Response Notification URL.

Page 7 of 32 Beanstream Internet Commerce Process Transaction API

The primary advantage of using the Response Notification is that the merchant can receive the transaction approval status directly, without relying on the customer’s redirect to the approval/decline page.

3.5. The Server-to-Server Processing Method Server-to-Server is an additional feature of process_transaction.asp. The benefit of using Server- to-Server over the normal transaction processing method is that Server-to-Server transactions will return the results of the transaction directly, instead of redirecting to the approval/decline pages specified in the Membership Area.

For more information on Server-to-Server, refer to the Server-to-Server with Process Transaction API documentation.

Page 8 of 32 Beanstream Internet Commerce Process Transaction API

4. Data Variables This section details the variables accepted by the Process Transaction API. The specifications for these fields are:

Field Name: This is the name of the form element used to store the data. All required fields are noted and must be passed to the Transaction Processing script in order to complete the purchase. Field names marked with an asterisk (*) are required if you have enabled price validation in your membership account (see below for further information).

Max Size: This column specifies the maximum length in characters that may be contained in the field.

Alpha, Numeric This column specifies whether the field type is numeric (0..9), alphanumeric or Currency: (letters or a combination of letters and numbers), or currency (e.g. $123.99). They are represented by the symbols N, A, or $, respectively.

Required?: Identifies whether or not the field is required. R = Required field for all transaction types O = Optional field for all Purchase Transaction Types P = Required field for Purchase Transaction Types only A = Required field for Adjustment Transaction Types only Purchase Transaction Types are all Purchase (P) and Pre-Authorization (PA) transactions. Adjustment Transaction Types are all Return I, Void Purchase (VP), Void Return (VR), and Pre-Auth Completion (PAC) transactions.

Description: Description of the type of information expected in the field.

4.1. Input Variables

4.1.1. General Information Field Name Max Alpha, Req’d? Description Size Numeric or Currency merchant_id 9 N R Beanstream-assigned nine digit identification number. trnOrderNumber 10 A R The order number of the shopper’s purchase. trnType 3 A R Field indicating the type of transaction to perform (i.e. Purchase, Return, Adjustment, etc.) View the Transaction Types table for all available values for this parameter. This is an optional filed that will default to P (Purchase). trnLanguage 3 A O Three digit ISO language code. This value is passed back to the approval/decline page untouched. errorPage 128 A R If any billing or credit card information is invalid or missing the customer will be

Page 9 of 32 Beanstream Internet Commerce Process Transaction API

redirected to this address along with the error message. approvedPage 128 A O Field containing a URL to which to redirect to if the transaction is approved. If this field is omitted, then the default approval page (as specified in the Membership Area) will be used. declinedPage 128 A O Field containing a URL to which to redirect to if the transaction is declined. If this field is omitted, then the default decline page (as specified in the Membership Area) will be used. username 16 A A These fields are required when username/password validation is turned on in the account settings configured in your Membership Area. This option must be enabled in order to process Return, password 16 A A Void, and Pre-Auth Completion transactions. Note that when enabled these parameters are required for all transactions types including Purchase and Pre-Authorizations.

For more information on this option, please refer to the Account Settings documentation. adjId 10 N A This field is required when the transaction type is a return, void purchase, void return, pre-auth completion, or adjustment, as these transaction types modify a previous transaction that is identified by this adjustment ID. approvedPage - A O If a transaction request is approved, this is the URL that the consumer’s browser will be redirected to. This parameter overrides the URL set within the Order Settings module of the Membership Area. There is no length restriction on this field. declinedPage - A O If a transaction request is declined, this is the URL that the consumer’s browser will be redirected to. This parameter overrides the URL set within the Order Settings module of the Membership Area. There is no length restriction on this field. trnComments 8000 A O An optional comment that can be stored with the transaction. cavEnabled 1 N O If you have requested the CAV address verification service and you have the “Require CAV on all transactions” option turned off in the Membership Area, you can pass this parameter to specify that you want the transaction verified by CAV before it is processed.

Page 10 of 32 Beanstream Internet Commerce Process Transaction API

4.1.2. Credit Information Field Name Max Alpha, Req’d? Description Size Numeric or Currency trnCardOwner 64 A P Name of the card owner as it appears on their credit card trnCardNumber 20 N P Customer credit card number trnExpMonth 2 N P Customer credit card expiry month. Must be a date on or later than the current month and year. If the year is the current year, then the month field must be numeric and must be greater than the current month. trnExpYear 2 N P Customer credit card expiry year. The year field must be numeric and must be less than 50. If the year is the current year, then the month field must be numeric and must be greater than the current month. trnCardCvd 4 N O Customer credit card CVD. This will be the last 3 digits (4 for Amex) on the back of the customer’s credit card. This is for security purposes and is optional unless “Require Credit Card CVD” is enabled in the Membership Area (under Administration Æ Account Settings Æ Order Settings).

4.1.3. Billing Information Field Name Max Alpha, Req’d? Description Size Numeric or Currency ordName 64 A P Billing contact's name ordEmailAddress 64 A P Billing contact's email address. Must be a valid email address format. Validates that the address has the “@” and “.” symbols and that there are letters between these symbols, e.g. [email protected]. ordPhoneNumber 32 A P Billing contact's phone number ordAddress1 64 A P Billing address ordAddress2 64 A O Additional billing address field for long addresses ordCity 32 A P Billing address city ordProvince 2 A P Billing province/state ID. Refer to the Country Codes table for a listing of valid country codes. ordPostalCode 16 A P Billing address postal/Zip code ordCountry 2 A P Billing address country ID. Refer to the Country Codes table for a listing of valid country codes.

Page 11 of 32 Beanstream Internet Commerce Process Transaction API

4.1.4. Shipping Information Field Name Max Alpha, Req’d? Description Size Numeric or Currency shipName 64 A O Name of the company or individual to ship the order to shipEmailAddress 64 A O Shipping contact's email address shipPhone 32 A O Shipping contact's phone number shipAddress1 64 A O Shipping address shipAddress2 64 A O Additional shipping address field for long addresses shipCity 32 A O Shipping address city shipProvince 2 A O Shipping address province/state ID. Refer to the province table in Section 5.4 for valid province codes shipPostalCode 16 A O Shipping address postal/Zip code shipCountry 2 A O Shipping address country ID. Refer to the country table in Section 5.4 for valid country codes shippingMethod 64 A O Description of the shipping method used for this order deliveryEstimate 9 N O Delivery time estimate in days

4.1.5. Product Information Field Name Max Alpha, Req’d? Description Size Numeric or Currency prod_id_n * 32 A O The product ID or SKU number used to uniquely identify a product prod_name_n 64 A O Description of the ordered product prod_quantity_n * 9 N O Quantity of the ordered product prod_shipping_n 9 $ O Shipping of the product prod_cost_n 9 $ O Purchase cost of the product

There is no limit to the number of product informational fields that may be included with your order. All field names must be numbered from 1-n (ie. prod_id_1, prod_quantity_1, prod_id_2, prod_quantity_2, etc.).

If product information is passed in, you may want to use the “Validate Orders Against Inventory” Transaction Validation Option for extra security. For more information on this option, please refer to the Account Settings documentation.

4.1.6. Pricing Information Field Name Max Alpha, Req’d? Description Size Numeric or Currency ordItemPrice * 9 $ O The total price of all items on the order, taking into account product quantities. ordShippingPrice * 9 $ O Order shipping charges. This includes

Page 12 of 32 Beanstream Internet Commerce Process Transaction API

the individual product shipping charges, if any. ordTax1Price * 9 $ O Total amount of tax1 charged to the order ordTax2Price * 9 $ O Total amount of tax2 charged to the order trnAmount 9 $ R Total order amount. This should be equal to the sum of the ordItemPrice, ordServicePrice, ordShippingPrice, ordTax1Price, and ordTax2Price. Must be a positive numeric value (decimals are allowed).

4.1.7. Custom Information Field Name Max Alpha, Req’d? Description Size Numeric or Currency refn - A O Up to five reference fields may be passed along with the order to contain any site- specific information you need to maintain during the order process. When this information is sent out to the processing script, it is stored in Beanstream’s database along with the details of the transaction and returned back to your site unmodified. These fields may be used to maintain information such as shopper IDs, account numbers, order numbers, or any other tracking information you may require.

These field names must be numbered from 1 to 5 in the format ref1, ref2, ref3, ref4 and ref5. There is no restriction on the field size of the reference fields.

4.1.8. Transaction Types Value Description P Purchase R Return VP Void Purchase VR Void Return PA Pre-Authorization PAC Pre-Authorization Completion

Page 13 of 32 Beanstream Internet Commerce Process Transaction API

4.2. Response Variables These are fields that are returned upon completion of a transaction.

4.2.1. Response Parameters Field Name Max Alpha, Description Size Numeric or Currency trnId 8 N Unique id number used to identify an individual transaction messageId 3 N The id number of the transaction response message. See Section 5.4 for a list of response message codes messageText 128 A The text message associated with the messageID authCode 6 A If the transaction has been approved, this parameter will contain the authorization code returned from the bank. If the transaction has been declined, the parameter will contain no value.

The authorization code is the unique transaction identifier assigned by the bank. The authorization code must be displayed to the card holder upon completing their transaction. trnAmount 9 $ The amount of the transaction TrnDate 20 A The date and time that the transaction was processed trnOrderNumber 10 N The order number associated with the transaction trnLanguage 3 A Contains the value of the trnLanguage field submitted in the transaction request. trnCustomerName 32 A Contains the value of the trnCardOwner field submitted in the transaction request. trnEmailAddress 64 A Contains the value of the ordEmailAddress field submitted in the transaction request. trnPhoneNumber 32 A Contains the value of the ordPhoneNumber field submitted in the transaction request. avsProcessed 1 N Parameter returned only if AVS is enabled on the merchant account. Set to a value of 1 if the issuing bank has successfully processed an AVS check on the transaction. Set to a value of 0 if no AVS check has been performed. avsId 1 A Parameter returned only if AVS is enabled on the merchant account. The id number of the AVS response message. See Section 5.5 for a listing of possible values. avsResult 1 N Parameter returned only if AVS is enabled on the merchant account. Set to a value of 1 if AVS has been validated with both a match against address and a match against postal/ZIP code. avsAddrMatch 1 N Parameter returned only if AVS is enabled on the merchant account. Set to a value of 1 if the ordAddress1 parameter matches the consumers address records at the issuing bank. Set to a value of 0 if the ordAddress1 parameter does not match

Page 14 of 32 Beanstream Internet Commerce Process Transaction API

the consumers address records or if AVS was not processed for the transaction. avsPostalMatch 1 N Parameter returned only if AVS is enabled on the merchant account. Set to a value of 1 if the ordPostalCode parameter matches the consumers address records at the issuing bank. Set to a value of 0 if the ordPostalCode parameter does not match the consumers address records or if AVS was not processed for the transaction. avsMessage 128 A Parameter returned only if AVS is enabled on the merchant account. Set to the value of the text message associated with the avsId response code. ref1 - A Contains the value of the ref1 field submitted in the transaction request. ref2 - A Contains the value of the ref2 field submitted in the transaction request. ref3 - A Contains the value of the ref3 field submitted in the transaction request. ref4 - A Contains the value of the ref4 field submitted in the transaction request. ref5 - A Contains the value of the ref5 field submitted in the transaction request.

Page 15 of 32 Beanstream Internet Commerce Process Transaction API

5. Variable Codes

5.1. messageId Response Messages Message Message Approved Cardholder Message Merchant Message Id Type 1 GPS/TD True Approved Approved 2 GPS True Debit approved Debit approved 3 GPS False DECLINE Declined - Please call credit agency 4 GPS False Issuer unavailable Issuer unavailable 5 GPS False Invalid banking merchant ID Invalid banking merchant ID 6 GPS False PIC UP PIC UP 7 GPS False DECLINE Transaction Declined 8 GPS False Transaction reversed Transaction reversed 9 GPS False Approved with ID Approved with ID 10 GPS False Invalid serv ID Invalid serv ID 11 GPS False Invalid transaction amount Invalid transaction amount 12 GPS False Invalid account Invalid account 13 GPS False Please retry transaction Please retry transaction 14 BIC False Invalid expiration date Invalid expiration date 15 GPS False Unauthorized transaction Unauthorized transaction Duplicate Transaction - This transaction has Duplicate Transaction - This transaction has 16 BIC False already been approved already been approved 17 GPS False Current batch must be settled Current batch must be settled 18 GPS False Electronic Draft Capture unavailable Electronic Draft Capture unavailable 19 GPS False Unexpected error Unexpected error 20 GPS False License has expired - Unable to authorize License has expired - Unable to authorize 21 BIC False Validation is less than the minimum amount Validation is less than the minimum amount 22 BIC False Validation greater than maximum amount Validation greater than maximum amount 23 GPS False Validation - Bad data Validation - Bad data 24 GPS False Bad card number Bad card number 25 GPS False Bad card Bad card 26 BIC False Invalid expiry date Invalid expiry date 27 GPS False Timer Exceeded Timer Exceeded 28 GPS False Bad logical merchant number Bad logical merchant number 29 GPS False Security Violation Security Violation 30 GPS False Com Port Open Error Com Port Open Error 31 GPS False Max Com Reties Max Com Reties 32 GPS False Open File Error Open File Error 33 GPS False User or Remote Abort User or Remote Abort 34 GPS False Com Error Com Error 35 GPS False Error expired license Error expired license 36 GPS False No Pickup No Pickup 37 GPS False Incomplete Incomplete 38 GPS False Communication error Communication error 39 GPS False Error Tranaction Type Error Tranaction Type 40 GPS False Error Data Dictionary Error Data Dictionary 41 GPS False ErrorGetSc ErrorGetSc 42 GPS False ErrorExeSc ErrorExeSc 43 GPS False Error Velocity Error Velocity 44 GPS False Error Stale Dated Input File Error Stale Dated Input File 45 GPS False ForcdCmplt ForcdCmplt 46 GPS False ErrorSrvNr ErrorSrvNr 47 GPS False Printer configuration error Printer configuration error 48 GPS False Card reader configuration error Card reader configuration error 49 BIC False Invalid transaction request string Invalid transaction request string 50 BIC False Invalid transaction type Invalid transaction type

Page 16 of 32 Beanstream Internet Commerce Process Transaction API

Message Message Approved Cardholder Message Merchant Message Id Type 51 BIC False DECLINE Restricted Card or IP 52 BIC False Invalid Card Number Invalid Card Number 53 BIC False Application Error - Sending Request Application Error - Sending Request 54 BIC False Transaction timeout - No available device Transaction timeout - No available device Transaction timeout - No transaction Transaction timeout - No transaction 55 BIC False Response Response 56 BIC False Aplication Error - Retrieving Response Aplication Error - Retrieving Response Transaction Amount greater than processing Transaction Amount greater than processing 57 GPS False limit. limit. 58 GPS False DECLINE Declined Declined - Operation must be performed by Declined - Operation must be performed by 59 BIC False Master Merchant Master Merchant Declined - Operation restricted through Declined - Operation restricted through 60 BIC False Master Merchant Master Merchant 61 TD True AUTH APPROVE W/ BALANCES 62 TD True AUTH APPROVE W/O BALANCES 63 TD True AUTH APPROVE COUNTRY CLUB 64 TD True AUTH APPROVE MAYBE MORE ID 65 TD True AUTH APPROVE PENDING ID 66 TD True AUTH APPROVE - BLIND 67 TD True AUTH APPROVE - VIP 68 TD True COMPLETED APPROVE ADMIN TRAN 69 TD True AUTH APPROVE AGAINST NAT'L NEG 70 TD True AUTH APPROVE - COMMERCIAL 71 TD False DECLINE DECLINE - DECLINED 72 TD False EXPIRED CARD DECLINE EXPIRED CARD 73 TD False CALL HELP DESK DECLINE EXCEEDED PIN TRIES 74 TD False CALL HELP DESK DECLINE NO SHARING 75 TD False CALL HELP DESK DECLINE NO ATALLA BOX 76 TD False PLEASE TRY AGAIN DECLINE INVALID TRAN 77 TD False CALL HELP DESK DECLINE NO SUPPORT 78 TD False DECLINE DECLINE LOST OR STOLEN CARD 79 TD False CALL HELP DESK DECLINE INVALID STATUS 80 TD False DECLINE DECLINE - RESTRICTED 81 TD False CALL HELP DESK DECLINE NO ACCOUNTS 82 TD False CALL HELP DESK DECLINE NO ACCOUNTS 83 TD False CALL HELP DESK DECLINE NO PBF 84 TD False CALL HELP DESK DECLINE PBF UPDATE ERROR 85 TD False CALL HELP DESK DECLINE INVALID AUTH TYPE 86 TD False PLEASE TRY AGAIN DECLINE BAD TRACK2 87 TD False CALL HELP DESK DECLINE ADJ NOT ALLOWED 88 TD False CALL HELP DESK DECLINE INVALID INCREMENT 89 TD False CALL HELP DESK DECLINE INVALID TRAN DATE 90 TD False CALL HELP DESK DECLINE TLF ERROR 91 TD False PLEASE TRY AGAIN DECLINE MSG EDIT ERROR 92 TD False CALL HELP DESK DECLINE NO IDF RECORD 93 TD False CALL HELP DESK DECLINE INVALID ROUTE AUTH 94 TD False CALL HELP DESK DECLINE ON NAT'L NEG 95 TD False CALL HELP DESK DECLINE INV ROUTE SERVICE 96 TD False DECLINE DECLINE UNABLE TO AUTHORIZE 97 TD False DECLINE DECLINE INVALID PAN LENGTH 98 TD False DECLINE DECLINE LOW FUNDS 99 TD False CALL HELP DESK DECLINE PRE?AUTH FULL 100 TD False CALL HELP DESK DECLINE DUPLICATE TRAN 101 TD False CALL HELP DESK DECLINE MAX REFUND ONLINE 102 TD False CALL HELP DESK DECLINE MAX REFUND OFFLINE 103 TD False CALL HELP DESK DECLINE MAX PER REFUND

Page 17 of 32 Beanstream Internet Commerce Process Transaction API

Message Message Approved Cardholder Message Merchant Message Id Type 104 TD False CALL HELP DESK DECLINE NUM TIMES USED 105 TD False CALL HELP DESK DECLINE MAX REFUND TOTAL 106 TD False CALL HELP DESK DELCINE CUST NEG REASON 107 TD False CALL HELP DESK DECLINE INQ NOT ALLOWED 108 TD False DECLINE DECLINE OVER FLOOR LIMIT 109 TD False CALL HELP DESK DECLINE MAX REFUND NUMBER 110 TD False CALL FOR AUTH DECLINE PLACE CALL 111 TD False CALL HELP DESK DECLINE CAF STATUS 0 OR 9 112 TD False CALL HELP DESK DECLINE REFERRAL FILE FULL 113 TD False CALL HELP DESK DECLINE NEG FILE PROBLEM 114 TD False CALL HELP DESK DECLINE ADVANCE < MINIMUM 115 TD False CALL HELP DESK DECLINE - DELINQUENT 116 TD False CALL HELP DESK DECLINE OVER LIMIT TABLE 117 TD False CALL HELP DESK DECLINE AMOUNT OVER MAX 118 TD False CALL HELP DESK DECLINE PIN REQUIRED 119 TD False CALL HELP DESK DECLINE MOD TEN CHECK 120 TD False DECLINE DECLINE FORCE POST 121 TD False DECLINE DECLINE BAD PBF 122 TD False CALL FOR AUTH REFER UNABLE TO PROCESS 123 TD False CALL FOR AUTH REFER ISSUE CALL 124 TD False CALL FOR AUTH REFER - CALL 125 TD False CALL HELP DESK REFER NEG FILE PROBLEM 126 TD False CALL HELP DESK REFER CAF FILE PROBLEM 127 TD False DECLINE REFER CARD NOT SUPPORTED 128 TD False CALL HELP DESK REFER AMOUNT OVER MAX 129 TD False CALL HELP DESK REFER OVER DAILY LIMIT 130 TD False CALL HELP DESK REFER CAF NOT FOUND 131 TD False CALL HELP DESK REFER ADVANCE < MINIMUM 132 TD False CALL HELP DESK REFER NUM TIMES USED 133 TD False CALL HELP DESK REFER - DELINQUENT 134 TD False CALL HELP DESK REFER OVER LIMIT TABLE 135 TD False CALL HELP DESK REFER TIMEOUT 136 TD False CALL HELP DESK REFER PTLF FULL 137 TD False DECLINE REFER ADMIN FILE PROBLEM 138 TD False CALL HELP DESK REFER UNABLE TO VALIDATE PIN 139 TD False CALL HELP DESK SERVICE MERCHANT NOT ON FILE 140 TD False CALL HELP DESK ERROR - ACCOUNT 141 TD False CALL HELP DESK ERROR INCORRECT PIN 142 TD False CALL HELP DESK ERROR ADVANCE < MINIMUM 143 TD False CALL HELP DESK ERROR ADMIN CARD NEEDED 144 TD False CALL HELP DESK ERROR ENTER LESSER AMOUNT 145 TD False CALL HELP DESK ERROR INVALID ADVANCE AMOUNT 146 TD False CALL HELP DESK ERROR CAF NOT FOUND 147 TD False CALL HELP DESK ERROR INVALID TRAN DATE 148 TD False CALL HELP DESK ERROR INVALID EXP DATE 149 TD False DECLINE ERROR INVALID TRANCODE 150 TD False DECLINE ERROR PIN KEY SYNC ERROR 151 TD False CALL HELP DESK ERROR DESTN NOT AVAILABLE 152 TD False DECLINE ERROR ON AMOUNT 153 TD False CALL HELP DESK DECLINE DEBIT NOT SUPPORTED 154 TD False CALL HELP DESK DECLINE BAD FORMAT 155 TD False CALL HELP DESK DECLINE BAD DATA 156 TD False CALL HELP DESK DECLINE BAD EMPLOYEE 157 TD False CALL HELP DESK DECLINE BAD CLOSE 158 TD False PLEASE TRY AGAIN DECLINE - TIMEOUT 159 TD False CALL HELP DESK DECLINE SYSTEM ERROR

Page 18 of 32 Beanstream Internet Commerce Process Transaction API

Message Message Approved Cardholder Message Merchant Message Id Type 160 TD False CALL HELP DESK DECLINE TERMINAL DEACTIVATED 161 TD False CALL HELP DESK DECLINE BAD RESPONSE LENGTH 162 TD False DECLINE DECLINE INVALID PIN BLOCK 163 TD False DECLINE DECLINE PIN LENGTH ERROR 164 TD False DECLINE DECLINE KMAC SYNC ERROR 165 TD False CALL HELP DESK DECLINE BAD MAC 166 TD False DECLINE DECLINE BAD SEQUENCE NUMBER 167 TD False CALL HELP DESK CAPTURE PIN TRIES EXCEEDED 168 TD False CALL HELP DESK CAPTURE EXPIRED CARD 169 TD False CALL HELP DESK CAPTURE NEG CAPTURE 170 TD False CALL HELP DESK CAPTURE CAF STATUS 3 171 TD False CALL HELP DESK CAPTURE ADVANCE < MINIMUM 172 TD False CALL HELP DESK CAPTURE NUM TIMES USED 173 TD False CALL HELP DESK CAPTURE - DELINQUENT 174 TD False CALL HELP DESK CAPTURE OVER LIMIT TABLE 175 TD False CALL HELP DESK CAPTURE AMT OVER MAXIMUM 176 TD False DECLINE CAPTURE CAPTURE 177 TD False CALL HELP DESK ADMIN CARD NOT FOUND 178 TD False CALL HELP DESK ADMIN CARD NOT ALLOWED 179 TD True CALL HELP DESK ADMIN APPROVED IN WINDOW 180 TD True CALL HELP DESK ADMIN APPROVED OUT OF WINDOW 181 TD True CALL HELP DESK ADMIN APPROVED ANYTIME 182 TD True CALL HELP DESK ADMIN CHRGBACK/APPROVED UPDATE 183 TD True CALL HELP DESK ADMIN CHRGBACK/APPROVED UPDATE 184 TD True CALL HELP DESK ADMIN CHRGBACK/INCORRT PREFIX 185 TD False CALL HELP DESK ADMIN CHRGBACK/INCORRT RSPCDE 186 TD False CALL HELP DESK ADMIN ADMIN TRAN NO SUPPORT 187 TD True CALL HELP DESK ADMIN CHRGBACK/APPD NOT UPDATE 188 TD True CALL HELP DESK ADMIN CHRGBACK/APPD NOT UPDATE 189 TD True CALL HELP DESK ADMIN CHRGBACK/ACCEPTED 190 BIC False Unknown transaction response Unknown transaction response 191 BIC False Invalid Transaction Amount Invalid Transaction Amount Transaction cannot be voided after being Transaction cannot be voided after being 192 BIC False returned returned Amount does not match the transaction you Amount does not match the transaction you 193 BIC False are modifying. are modifying. 194 BIC False Transaction exceeds return limit. Transaction exceeds return limit. 195 BIC False Invalid adjustment amount. Invalid adjustment amount. Original purchase transaction has been Original purchase transaction has been 196 BIC False voided voided Transactions cannot be adjusted to a zero Transactions cannot be adjusted to a zero or 197 BIC False or negative value negative value 198 BIC False Zero value transactions cannot be voided Zero value transactions cannot be voided Credit card does not match original Credit card does not match original 199 BIC False purchase. purchase. 200 BIC False Transaction cannot be adjusted Transaction cannot be adjusted 201 BIC False Invalid transaction adjustment ID Invalid transaction adjustment ID 202 BIC False Invalid order number Invalid order number 203 BIC False Pre-Authorization already completed Pre-Authorization already completed 204 BIC False Declined: Use Pre-Auth Completion Declined: Use Pre-Auth Completion Transaction only voidable on the date Transaction only voidable on the date 205 BIC False processed processed 206 BIC False Account missing terminal id Account missing terminal id 207 BIC False Invalid merchant id Invalid merchant id Completion greater than remaining Completion greater than remaining reserve 208 BIC False amount. amount. 209 BIC False Merchant Account Disabled Merchant Account Disabled

Page 19 of 32 Beanstream Internet Commerce Process Transaction API

Message Message Approved Cardholder Message Merchant Message Id Type 210 BIC False Merchant Account Closed Merchant Account Closed 211 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 212 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 213 GPS False Invalid or missing AVS address Invalid or missing AVS address 214 BIC False Transaction reversed Transaction reversed 215 BIC False Address Validation Failed Address Validation Failed 216 GPS False Validation greater than maximum amount Validation greater than maximum amount 217 BIC False DECLINE Transaction Declined TR 218 BIC False DECLINE Transaction Declined AC 219 GPS False PIN INVLD PIN INVLD 220 GPS False MAX PIN RETRIES MAX PIN RETRIES 221 GPS False INV ACCT MATCH INV ACCT MATCH 222 GPS False INV AMT MATCH INV AMT MATCH 223 GPS False INV ITEM NUM INV ITEM NUM 224 GPS False ITEM REV-VOIDED ITEM REV-VOIDED 225 GPS False USE DUP THEN BALANCE NOW USE DUP THEN BALANCE NOW 226 GPS False NO DUPE FOUND NO DUPE FOUND 227 GPS False INVALID DATA INVALID DATA 228 GPS False NO TRANS FOUND NO TRANS FOUND 229 GPS False AP NOT CAPTURED AP NOT CAPTURED 230 GPS False AP AUTH ONLY AP AUTH ONLY 231 GPS False INV BANK INV BANK 232 GPS False TRAN TYPE INVLD TRAN TYPE INVLD 233 GPS False DB UNAVAIL 02 DB UNAVAIL 02 234 GPS False DB UNAVAIL 03 DB UNAVAIL 03 235 GPS False DB UNAVAIL 04 DB UNAVAIL 04 236 GPS False UNAUTH USER UNAUTH USER 237 GPS False INVALID CARD INVALID CARD 238 GPS False DB ISSUER UNAVAIL DB ISSUER UNAVAIL 239 GPS False INVALID POS CARD INVALID POS CARD 240 GPS False ACCT TYPE INVLD ACCT TYPE INVLD 241 GPS False INVALID PREFIX INVALID PREFIX 242 GPS False INVALID FIID INVALID FIID 243 GPS False VERIFY VERIFY 244 GPS False INVALID LIC INVALID LIC 245 GPS False INVALID STATE CD INVALID STATE CD 246 GPS False DB UNAVAIL 01 DB UNAVAIL 01 247 GPS False SCAN UNAVAILABLE SCAN UNAVAILABLE 248 GPS False EXCEEDS MAX AMT EXCEEDS MAX AMT 249 GPS False EXCEEDS MAX USERS EXCEEDS MAX USERS 250 GPS False INVALID USER ID/PIN INVALID USER ID/PIN 251 GPS False AMOUNT BELOW MINIMUM AMOUNT BELOW MINIMUM 252 GPS False AMOUNT OVER MAXIMUM AMOUNT OVER MAXIMUM 253 GPS False AMOUNT BADLY FORMED AMOUNT BADLY FORMED 254 GPS False INVALID USER ID/PIN INVALID USER ID/PIN 255 GPS False CERT. DOES NOT EXIST CERT. DOES NOT EXIST 256 GPS False INV. CERT. FOR STORE INV. CERT. FOR STORE 257 GPS False CERTIFICATE CLOSED CERTIFICATE CLOSED 258 GPS False CERTIFICATE EXPIRED CERTIFICATE EXPIRED 259 GPS False AMOUNT BELOW MINIMUM AMOUNT BELOW MINIMUM 260 GPS False AMOUNT OVER MAXIMUM AMOUNT OVER MAXIMUM 261 GPS False AMOUNT BADLY FORMED AMOUNT BADLY FORMED 262 GPS False INVALID USER ID/PIN INVALID USER ID/PIN 263 GPS False INVALID AMOUNT INVALID AMOUNT 264 GPS False CERT. ALREADY ACTIVE CERT. ALREADY ACTIVE 265 GPS False CERT. DOES NOT EXIST CERT. DOES NOT EXIST

Page 20 of 32 Beanstream Internet Commerce Process Transaction API

Message Message Approved Cardholder Message Merchant Message Id Type 266 GPS False INVALID USER ID/PIN INVALID USER ID/PIN 267 GPS False CERT. DOES NOT EXIST CERT. DOES NOT EXIST 268 GPS False INV. CERT. FOR STORE INV. CERT. FOR STORE 269 GPS False CERTIFICATE REDEEMED CERTIFICATE REDEEMED 270 GPS False CERTIFICATE EXPIRED CERTIFICATE EXPIRED 271 GPS False VALIDATION NO MATCH VALIDATION NO MATCH 272 GPS False INCORRECT AMOUNT INCORRECT AMOUNT 273 GPS False VALIDATION NO MATCH VALIDATION NO MATCH 274 GPS False INVALID USER ID/PIN INVALID USER ID/PIN 275 GPS False CERT. DOES NOT EXIST CERT. DOES NOT EXIST 276 GPS False INV. TRAN. FOR STORE INV. TRAN. FOR STORE 277 GPS False CERTIFICATE TOO OLD CERTIFICATE TOO OLD 278 GPS False INCORRECT AMOUNT INCORRECT AMOUNT 279 GPS False Velocity >$Daily Max Velocity >$Daily Max 280 GPS False Velocity >%Daily Max Velocity >%Daily Max 281 GPS False Velocity >Bad Daily Max Velocity >Bad Daily Max 282 GPS False AP DUPE AP DUPE 283 GPS False Msg Error Msg Error 284 GPS False Velocity <$Min Velocity <$Min 285 GPS False Velocity <>Avg Velocity <>Avg 286 GPS False Velocity Neg File Velocity Neg File 287 GPS False Err PinPad Config PPxxxxx Err PinPad Config PPxxxxx 288 GPS False Err Settle File Sharing Err Settle File Sharing 289 GPS False Engine Aborted By Request Engine Aborted By Request 290 GPS False Engine Aborted By Request Engine Aborted By Request 291 GPS False Service Unavailable - Please try again later Service Unavailable - Please try again later 292 GPS False Err Bad Password Err Bad Password 293 GPS False Err Operation Not Permitted Err Operation Not Permitted 294 GPS False Err Archived Batch Not Found Err Archived Batch Not Found 295 GPS False Err Ext.Data Config EDxxxxx Err Ext.Data Config EDxxxxx 296 GPS False Err Ext.Data Failure EDxxxxx Err Ext.Data Failure EDxxxxx 297 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 298 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 299 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 300 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 301 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 302 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 303 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 304 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 305 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 306 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 307 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 308 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 309 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 310 BIC False Service Unavailable - Please try again later Service Unavailable - Please try again later 311 BIC False 3D Secure Failed 3D Secure Failed 312 BIC False Card type not accepted Card type not accepted 313 BIC False DECLINE Over sales limit Missing or invalid payment information - Missing or invalid consumer payment 314 BIC False Please validate all required payment information information. 315 BIC False CALL HELP DESK HTTPS Connection Required 316 BIC False CALL HELP DESK Invalid transaction validation type 317 BIC False CALL HELP DESK Authentication Failed 318 BIC False CALL HELP DESK No transaction request data received Transaction Declined - Restricted transaction 319 BIC False CALL HELP DESK type

Page 21 of 32 Beanstream Internet Commerce Process Transaction API

Message Message Approved Cardholder Message Merchant Message Id Type 320 BIC False CALL HELP DESK Missing errorPage URL 321 BIC False CALL HELP DESK Missing or invalid return URL Transaction amount does not match 322 BIC False CALL HELP DESK inventory calculation 323 BIC False CALL HELP DESK One or more products not found in inventory 324 BIC False CALL HELP DESK Invalid product quantity 325 BIC False File Transfer Approved File Transfer Approved 326 BIC True Declined - Invalid bank account Declined - Invalid bank account 327 GPS False DECLINE Declined - Invalid CVD

5.1.1. Processor Legend BIC = Beanstream Internet Commerce TD = TD Canada Trust GPS = Global Payment Systems

5.2. Transaction Types ID Type P Purchase PA Pre-Authorization R Return ADJ Adjustment PAC Pre-Auth Completion VP Void Purchase VR Void Return AVS AVS Only

5.3. Country Codes ID Name ID Name ID Name AF Afghanistan DE Germany OM Oman AL Albania GH Ghana PK Pakistan DZ Algeria GI Gibraltar PW Palau AS American Samoa GR Greece PS Palestinian Territory, Occupied AD Andorra GL Greenland PA Panama AO Angola GD Grenada PG Papua New Guinea AI Anguilla GP Guadeloupe PY Paraguay AQ Antarctica GU Guam PE Peru AG Antigua and Barbuda GT Guatemala PH Philippines AR Argentina GN Guinea PN Pitcairn AM Armenia GW Guinea-Bissau PL Poland AW Aruba GY Guyana PT Portugal AU Australia HT Haiti PR Puerto Rico AT Austria HM Heard and McDonald QA Qatar Islands AZ Azerbaijan HN Honduras RE Reunion BS Bahamas HK Hong Kong RO Romania BH Bahrain HU Hungary RU Russian Federation BD Bangladesh IS Iceland RW Rwanda

Page 22 of 32 Beanstream Internet Commerce Process Transaction API

ID Name ID Name ID Name BB Barbados IN India KN Saint Kitts and Nevis BY Belarus ID Indonesia LC Saint Lucia BE Belgium IR Iran (Islamic Republic VC Saint Vincent and The of) Grenadines BZ Belize IQ Iraq WS Samoa BJ Benin IE Ireland SM San Marino BM Bermuda IL Israel ST Sao Tome and Principe BT Bhutan IT Italy SA Saudi Arabia BO Bolivia JM Jamaica SN Senegal BA Bosnia Herzegovina JP Japan SC Seychelles BW Botswana JO Jordan SL Sierra Leone BV Bouvet Island KZ Kazakhstan SG Singapore BR Brazil KE Kenya SK Slovakia IO British Indian Ocean KI Kiribati SI Slovenia Territory BN Brunei Darussalam KP Korea, Democratic SB Solomon Islands People's Republic of BG Bulgaria KR Korea, Republic of SO Somalia BF Burkina Faso KW Kuwait ZA South Africa BI Burundi KG Kyrgyzstan GS South Georgia/South Sandwich Islands KH Cambodia LA Lao People's ES Spain Democratic Republic CM Cameroon LV Latvia LK Sri Lanka CA Canada LB Lebanon SH St. Helena CV Cape Verde LS Lesotho PM St. Pierre and Miquelon KY Cayman Islands LR Liberia SD Sudan CF Central African LY Libyan Arab Jamahiriya SR Suriname Republic TD Chad LI Liechtenstein SJ Svalbard and Jan Mayen Islands CL Chile LT Lithuania SZ Swaziland CN China LU Luxembourg SE Sweden CX Christmas Island MO Macau CH Switzerland CC Cocos (Keeling) MK Macedonia, The Former SY Syrian Arab Republic Islands Yuslav Republic of CO Colombia MG Madagascar TW Taiwan, Province of china KM Comoros MW Malawi TJ Tajikistan CG Congo MY Malaysia TZ Tanzania, United Republic of CD Congo, The MV Maldives TH Thailand Democratic Republic of the CK Cook Islands ML Mali TG Togo CR Costa Rica MT Malta TK Tokelau CI Cote D'ivoire MH Marshall Islands TO Tonga HR Croatia MQ Martinique TT Trinidad and Tobago CU Cuba MR Mauritania TN Tunisia CY Cyprus MU Mauritius TR Turkey CZ Czech Republic YT Mayotte TM Turkmenistan DK Denmark MX Mexico TC Turks and Caicos Islands

Page 23 of 32 Beanstream Internet Commerce Process Transaction API

ID Name ID Name ID Name DJ Djibouti FM Micronesia TV Tuvalu DM Dominica MD Moldova, Republic of UG Uganda DO Dominican Republic MC Monaco UA Ukraine TP East Timor MN Mongolia AE United Arab Emirates EC Ecuador MS Montserrat GB United Kingdom EG Egypt MA Morocco US United States SV El Salvador MZ Mozambique UM United States Minor Outlying Islands GQ Equatorial Guinea MM Myanmar UY Uruguay ER Eritrea NA Namibia UZ Uzbekistan EE Estonia NR Nauru VU Vanuatu ET Ethiopia NP Nepal VA Vatican city state FK Falkland Islands NL Netherlands VE Venezuela (Malvinas) FO Faroe Islands AN Netherlands Antilles VN Viet Nam FJ Fiji NC New Caledonia VG Virgin Islands (British) FI Finland NZ New Zealand VI Virgin Islands (US) FR France NI Nicaragua WF Wallis and Futuna Islands GF French Guiana NE Niger EH Western Sahara PF French Polynesia NG Nigeria YE Yemen, Republic of TF French Southern NU Niue YU Yugoslavia Territories GA Gabon NF Norfolk Island ZM Zambia GM Gambia MP Northern Mariana ZW Zimbabwe Islands GE Georgia NO Norway DE Germany OM Oman

5.4. Province/State Codes ID Name ID Name ID Name AB AB Alberta MA MA Massachusetts ON ON Ontario AK AK Alaska MB MB Manitoba OR OR Oregon AL AL Alabama MD MD Maryland PA PA Pennsylvania AR AR Arkansas ME ME Maine PE PE Prince Edward Island AS AS American MI MI Michigan PR PR Puerto Rico Samoa AZ AZ Arizona MN MN Minnesota QC QC Quebec BC BC British Columbia MO MO Missouri RI RI Rhode Island CA CA California MP MP Northern Marianas SC SC South Carolina CO CO Colorado MS MS Mississippi SD SD South Dakota CT CT Connecticut MT MT Montana SK SK Saskatachewan DC DC District of NB NB New Brunswick TN TN Tennessee Columbia DE DE Delaware NC NC North Carolina TX TX Texas FL FL Florida ND ND North Dakota UT UT Utah FM FM Micronesia NE NE Nebraska VA VA Virginia GA GA Georgia NF NF Newfoundland VI VI Virgin Islands GU GU Guam NH NH New Hampshire VT VT Vermont HI HI Hawaii NJ NJ New Jersey WA WA Washington

Page 24 of 32 Beanstream Internet Commerce Process Transaction API

IA IA Iowa NM NM New Mexico WI WI Wisconsin ID ID Idaho NS NS Nova Scotia WV WV West Virginia IL IL Illinois NT NT Northwest WY WY Wyoming Territories/Nunavut IN IN Indiana NV NV Nevada YT YT Yukon KS KS Kansas NY NY New York -- Outside U.S./Canada KY KY Kentucky OH OH Ohio LA LA Louisiana OK OK Oklahoma

5.5. AVS Response Codes ID Result Processed Address Postal/ZIP Message Match Match 0 0 0 0 0 Address Verification not performed for this transaction. 5 0 0 0 0 Invalid AVS Response. 9 0 0 0 0 Address Verification Data contains edit error. A 0 1 1 0 Street address matches, Postal/ZIP does not match. B 0 1 1 0 Street address matches, Postal/ZIP not verified. C 0 1 0 0 Street address and Postal/ZIP not verified. D 1 1 1 1 Street address and Postal/ZIP match. E 0 0 0 0 Transaction ineligible. G 0 0 0 0 Non AVS participant. Information not verified. I 0 0 0 0 Address information not verified for international transaction. M 1 1 1 1 Street address and Postal/ZIP match. N 0 1 0 0 Street address and Postal/ZIP do not match. P 0 1 0 1 Postal/ZIP matches. Street address not verified. R 0 0 0 0 System unavailable or timeout. S 0 0 0 0 AVS not supported at this time. U 0 0 0 0 Address information is unavailable. W 0 1 0 1 Postal/ZIP matches, street address does not match. X 1 1 1 1 Street address and Postal/ZIP match. Y 1 1 1 1 Street address and Postal/ZIP match. Z 0 1 0 1 Postal/ZIP matches, street address does not match.

Page 25 of 32 Beanstream Internet Commerce Process Transaction API

6. Recurring Transactions Transactions requests may be flagged as a recurring transaction in order to create a Recurring Billing account for the card holder. A transaction is passed with additional recurring billing payment frequency and pricing parameters in order to generate a recurring billing account from the transaction request. A recurring billing account will only be created if a successful transaction has been processed and approved by the issuing bank.

The merchant must have the Recurring Billing service enabled by a Beanstream Administrator, otherwise no recurring billing account will be created for the card holder and the system will ignore all recurring billing fields passed in the request.

If any field formatting error is detected in the recurring billing parameters passed in the transaction request, the system will handle these errors as User Generated Errors as detailed in section 3.2.2.

6.1. Recurring Data Variables The following data variables are used for flagging a transaction request as a Recurring Transaction and for setting the billing frequency. Note that these variables are in addition to those listed in Section 4.

6.1.1. Recurring Billing Field Name Max Alpha, Req’d? Description Size Numeric or Currency trnRecurring 1 N O Recurring Transaction flag. If a value of 1 is passed the transaction request is flagged as a Recurring Transaction. The default value of this field is 0, indicating that the request is not a recurring transaction. rbBillingPeriod 1 A O** Set to billing period for payments to be collected on. I.e. Daily, Weekly, Monthly, Yearly. See Billing Periods bellow. rbBillingIncrement 356 N O** Set to the frequency that payments will be collected on. rbFirstBilling 8 N* O Set to the date that the first Recurring Bill payment will be collected on. Default value is the current Beanstream System Date, using Pacific Time. rbSecondBilling 8 N* O Set to the date that the second Recurring Billing payment will be collected on. Default value is the current Beanstream System Date, using Pacific Time, plus the billing frequency set by the reBillingPeriod and rbBillingIncrement parameters. rbExpiry 8 N* O Set to the date that the Recurring Billing Account will expire. If no value is passed the account will be flagged to never expire. rbApplyTax1 N O If set to the value 1, tax1 will be applied

Page 26 of 32 Beanstream Internet Commerce Process Transaction API

to all recurring billing payments. If set to a value of 0, no tax1 charges will be applied. Default value of this field is 0. rbApplyTax2 N O If set to the value 1, tax2 will be applied to all recurring billing payments. If set to a value of 0, no tax2 charges will be applied. Default value of this field is 0.

* Dates must be formatted as MMDDYYYY. Example: January 31st, 2003 must be formatted as 01312003. ** Field required if trnRecurring is passed with a value of 1.

6.1.2. Billing Periods Field Value Description D Daily Billing Period W Weekly Billing Period M Monthly Billing Period Y Yearly Billing Period

6.2. Billing Frequency The Recurring Billing Frequency of an account sets the schedule that you want to re-bill your customer. This billing frequency is set by the rbBillingPeriod and rbBillingIncrement fields. The billing period is set to Daily, Weekly, Monthly, or Yearly billing. The billing increment is set to the number of billing periods within the billing frequency.

For example, if the billing period is set to Monthly and the billing increment is set to 1, then your customer will be charged every one month. If the billing period is set to weekly and the billing increment is set to 2, then your customer will be billed every second week or every 14 days.

6.3. Billing Dates The timing that recurring billing transactions occur are set by the billing dates passed in the transaction request. These billing date parameters are rbFirstBilling and rbSecondBilling.

The parameter rbFirstBilling is the starting date that the recurring billing account is active. This is the starting date of the first billing period of the account. The system defaults this value to be the current system date if no value is passed. The first billing date can be set to any date in the future and can be set to a date in the past up to the billing frequency minus a day. So for example if the billing frequency is set to a weekly period with an increment of one, the account will be billed every one week and the billing start date cannot be set to a date earlier than the current system date minus 6 days.

The parameter rbSecondBilling is the date that the second billing period begins. This second billing date is used for times where the merchant would like to initially charge their customer an amount for a partial billing period, then continue billing the account at a set frequency. So this parameter is not only the date that the second billing will occur but also sets the starting date of the billing cycle.

So as an example we want to create a Recurring Billing Account set with a $30.00 monthly fee charged on the first of every month. For any account created part way through the month we want to pro-rate their first payment. This means that we want to charge a pro-rated monthly fee from the time the account is created to the end of the month. For an account created with a first billing date of April 20th and a second billing date of May 1st, the system will calculate the pro-

Page 27 of 32 Beanstream Internet Commerce Process Transaction API rated amount and charge $10.00 for the remaining 10 days of April, then the full $30 on May 1st and continue to charge the full $30 on the 1st of each subsequent month.

Page 28 of 32 Beanstream Internet Commerce Process Transaction API

7. Test Card Numbers Several test credit card numbers are available to test transaction integration. Using these test cards you can emulate the full transaction process from submitting your payment request through to receiving your payment response. These test card numbers are only active while your merchant account is in test status. Test card numbers are listed bellow along with their expected response. Any expiry date that is equal to the current month and year or later is valid.

Card Type Card Number Approved/Declined VISA 4030 0000 1000 1234 Approve VISA 4003 0505 0004 0005 Decline MasterCard 5100 0000 1000 1004 Approve MasterCard 5100 0000 2000 2000 Decline AMEX 3711 0000 1000 131 Approve AMEX 3424 0000 1000 180 Decline

Page 29 of 32 Beanstream Internet Commerce Process Transaction API

8. URL Encoding Chart

This chart shows the URL-encoded equivalent every letter in the ASCII set. Items in bold must be represented with their encoded equivalents when used in a URL; all others are optional.

%00 = %30 = 0 %60 = ` %90 = %C0 = À %F0 = ð %01 = %31 = 1 %61 = a %91 = ‘ %C1 = Á %F1 = ñ %02 = %32 = 2 %62 = b %92 = ’ %C2 =  %F2 = ò %03 = %33 = 3 %63 = c %93 = “ %C3 = à %F3 = ó %04 = %34 = 4 %64 = d %94 = ” %C4 = Ä %F4 = ô %05 = %35 = 5 %65 = e %95 = • %C5 = Å %F5 = õ %06 = %36 = 6 %66 = f %96 = – %C6 = Æ %F6 = ö %07 = %37 = 7 %67 = g %97 = — %C7 = Ç %F7 = ÷ %08 = %38 = 8 %68 = h %98 = ˜ %C8 = È %F8 = ø %09 = Tab %39 = 9 %69 = i %99 = ™ %C9 = É %F9 = ù %0A = LF %3A = : %6A = j %9A = š %CA = Ê %FA = ú %0B = %3B = ; %6B = k %9B = › %CB = Ë %FB = û %0C = %3C = < %6C = l %9C = œ %CC = Ì %FC = ü %0D = CR %3D = = %6D = m %9D = %CD = Í %FD = ý %0E = %3E = > %6E = n %9E = %CE = Î %FE = þ %0F = %3F = ? %6F = o %9F = Ÿ %CF = Ï %FF = ÿ %10 = %40 = @ %70 = p %A0 = %D0 = Ð %11 = %41 = A %71 = q %A1 = ¡ %D1 = Ñ %12 = %42 = B %72 = r %A2 = ¢ %D2 = Ò %13 = %43 = C %73 = s %A3 = £ %D3 = Ó %14 = %44 = D %74 = t %A4 = ¤ %D4 = Ô %15 = %45 = E %75 = u %A5 = ¥ %D5 = Õ %16 = %46 = F %76 = v %A6 = ¦ %D6 = Ö %17 = %47 = G %77 = w %A7 = § %D7 = × %18 = %48 = H %78 = x %A8 = ¨ %D8 = Ø %19 = %49 = I %79 = y %A9 = © %D9 = Ù %1A = %4A = J %7A = z %AA = ª %DA = Ú %1B = %4B = K %7B = { %AB = « %DB = Û %1C = %4C = L %7C = | %AC = ¬ %DC = Ü %1D = %4D = M %7D = } %AD = %DD = Ý %1E = %4E = N %7E = ~ %AE = ® %DE = Þ %1F = %4F = O %7F = %AF = ¯ %DF = ß %20 = space %50 = P %80 = %B0 = ° %E0 = à %21 = ! %51 = Q %81 = %B1 = ± %E1 = á %22 = " %52 = R %82 = ‚ %B2 = ² %E2 = â %23 = # %53 = S %83 = ƒ %B3 = ³ %E3 = ã %24 = $ %54 = T %84 = „ %B4 = ´ %E4 = ä %25 = % %55 = U %85 = … %B5 = µ %E5 = å %26 = & %56 = V %86 = † %B6 = ¶ %E6 = æ %27 = ' %57 = W %87 = ‡ %B7 = · %E7 = ç %28 = ( %58 = X %88 = ˆ %B8 = ¸ %E8 = è %29 = ) %59 = Y %89 = ‰ %B9 = ¹ %E9 = é %2A = * %5A = Z %8A = Š %BA = º %EA = ê %2B = + %5B = [ %8B = ‹ %BB = » %EB = ë %2C = , %5C = \ %8C = Œ %BC = ¼ %EC = ì %2D = - %5D = ] %8D = %BD = ½ %ED = í %2E = . %5E = ^ %8E = %BE = ¾ %EE = î %2F = / %5F = _ %8F = %BF = ¿ %EF = ï

Page 30 of 32 Beanstream Internet Commerce Process Transaction API

9. Examples The following is an example of how to call the Process Transaction API using the following transaction parameters:

Merchant Information: Beanstream Merchant ID = 2 Your Order Number = 288 Transaction Username = ab12345678901234 Transaction Password = cd56789012345678 Transaction Type = default is P for purchase Error Page to Handle Errors = https://www.beanstream.com/secure/sample/order_form.asp

Customer Information: Name = Bob Buyer Email Address = [email protected] Phone Number = 555-1234 Address1 = 1234 Main St City = Victoria Province = BC Postal Code = V8T5J1 Country = CA Card Owner = Bob D Buyer Card Number = 5100000010001004 Card Expiry Month = 10 Card Expiry Year = 03

Optional product information where two products are sold is: First Product Name = ACER AcerPower SE Minitower First Product ID or SKU = SYS-ACER First Product Quantity = 3 First Product Unit Price = $799.95 First Product Extended Price = $2399.85 First Product Tax 1 = $168.00 First Product Tax 2 = $168.00 First Product Shipping Cost = $45.60

Second Product Name = 12/4/32x CD Rocket Mach 12 ReWriter Second Product ID or SKU = STR-WRITER Second Product Quantity = 2 Second Product Unit Price = $389.95 Second Product Extended Price = $779.90 Second Product Tax 1 = $54.60 Second Product Tax 2 = $54.60 Second Product Shipping Cost = $12.25

Total Order Information: Total Shipping Charge = $156.80 Total Tax 1 = $177.57 Total Tax 2 = $177.57 Total Product Cost = $3237.60 (Including Shipping, Less Taxes) Grand Total Cost = $3691.69 (Including Taxes and Shipping)

The call to the Process Transaction API would look like the following:

Page 31 of 32 Beanstream Internet Commerce Process Transaction API

https://www.beanstream.com/scripts/process_transaction.asp?merchant_id=109040000&use rname=ab12345678901234&password=cd56789012345678&trnOrderNumber=288&errorPa ge=https://www.beanstream.com/samples/order_form.asp&prod_id_1=SYS- ACER&prod_upc_1=SYS- CER&prod_name_1=ACER+AcerPower+SE+Minitower&prod_quantity_1=3&prod_cost_1=79 9.95&prod_id_2=STR-WRITER&prod_upc_2=STR- WRITER&prod_name_2=12/4/32x+CD+Rocket+Mach+12+ReWriter&prod_quantity_2=2&pro d_cost_2=389.95&ordItemPrice=3179.75&ordShippingPrice=156.80&ordTax1Price=177.57& ordTax2Price=177.57&trnAmount=3691.69&trnCardOwner=Bob%20D%20Buyer&trnCardNu mber=5100000010001004&trnExpMonth=10&trnExpYear=03&ordName=Bob%20Buyer&ord [email protected]&ordPhoneNumber=555- 1234&ordAddress1=1234%20Main%20St&ordCity=Victoria&ordProvince=BC&ordPostalCod e=V8T5J1&ordCountry=CA

Note that this URL has been URL-encoded. Refer to section 5 for a full listing of characters and their URL-encoded equivalents.

Page 32 of 32