- 1 Intended Audience
- 2 Introduction
- 2.1 Basic Information
- 3 API Transactions
- 3.0.1 Card Verification. CVV/CVC related processing
- 3.1 PayPal
- 3.2 Zero Dollar Pre-Authorizations
- 3.3 Gift Cards
- 3.3a Split Tender
- 3.4 TransArmor
- 3.5 Telecheck
- 3.6 Visa Checkout
- 3.7 Debit Bill Pay
- 3.8 Special Payment
- 3.9 Wallet Provider ID
- 3.10 Payment Facilitator
- 3.11 Masterpass
- 3.12 Timeout Reversal
- 3.13 Stored Credentials (Credentials-on-File)
- 3.14 Visa Non Original Credit Account Funding Transaction (NON-OCT AFT)
- 3.15 3DS version 2
- 3.16 Business Application Indicator (BAI)
- 3.17 Foreign Access Code (FAC)
- 4 Request Properties
- 4.1 Address Properties
- 4.2 Level 2 Properties
- 4.3 Level 3 Properties
- 4.4 PayPal Properties
- 4.5 Soft Descriptor Properties
- 4.6 Fees
- 4.7 DCC Properties
- 4.8 DP Properties
- 4.9 Foreign Currency Details Properties
- 4.10 Fraud Detect
- 5 Response Properties
- 6 SOAP Message Format
- 6.1 Request Message Format
- 6.2 Response Message Format
- 7 A Few Examples Using cURL
- 7.1 Example 1. Pre-Authorization
- 7.2 Example 2. Tagged Pre-Authorization Completion
- 7.3 Example 3. Tagged Refund
- 8 Exception Handling
- 8.1 SOAP Exception
- 8.2 SOAP Exception Scenarios
- 8.3 Response - Error Properties
- 9 API HMAC Security
- Appendix 1. More About Service URLs
- Appendix 2. Endpoints and WSDL URLs
- Appendix 3. API versions and features
1 Intended Audience
This document is intended for Developers who want to understand and implement the First Data Payeezy Gateway API
2 Introduction
The First Data Payeezy Gateway Web Service API is a web service that allows third-party applications to process transactions through the Payeezy Gateway system. The range of processing scenarios (Purchase, Tagged Refund, Pre-Authorization, etc.) enable flexible and powerful ways to implement custom business logic. First Data also provides free client libraries that ease integration with the Payeezy Gateway Web Service API.
The Payeezy Gateway Web Service API is available in both REST and SOAP, where the latter supports XML and JSON message formats. The same range of transaction processing scenarios is supported regardless of which style Payeezy Gateway Web Service API you choose.
IMPORTANT NOTE: ALL TAGS MUST BE SUBMITTED THROUGH THE API IN THE SAME CASE AS SHOWN BELOW.
2.1 Basic Information
IMPORTANT: Please check release notes for important information regarding changes and bug fixes. You can find this in Appendix 1. More About Service URLs.
The latest API version is 31.
The service URLs are:
For previous API versions and the list of suppoted features by API version, please refer to Appendix 3:
https://support.payeezy.com/hc/en-us/articles/206601408#apx3
Important Note about v12 or higher of the Web Service API: Merchants wishing to use V12 or higher of the API must implement the API HMAC hash security calculation. Further information on this subject can be found here (https://support.payeezy.com/hc/en-us/articles/203731149).
To submit API transactions to the Demo environment, please use the hostname api.demo.globalgatewaye4.firstdata.com instead of the above.
Two pieces of information must be provided when you submit a transaction via the Payeezy Gateway Web Service API, they are:
- Exact ID - also known as the Gateway ID, this value identifies the Merchant and Terminal under which the transaction is to be processed
- Password - authenticates the Payeezy Gateway Web Service API request, this value should not be exposed to the public
These credentials can be submitted in two ways:
- as HTTP Basic Authentication user name and password values
- as part of the Payeezy Gateway Web Service API message via the ExactID and Password properties
The Gateway ID can be found on the Administration tab under Terminals and then Details. Also from that screen you can set up your password by clicking on "Generate" or change the existing password. Password must be a minimum of 8 characters with at least one letter and number and should contain only letters, numbers, dashes (-), and underscores (_). You must then click on "Update" at the bottom of that screen.
When using the automatic password generator (located on the Terminal Screen in the RPM), it should be noted that the generator creates a 32 character password.
The Password Generator for the API Interface (located on the Terminal Screen in the RPM) has been updated, it will now generate a 32 character password.
If a shopping cart is integrated to a merchant (now) they won't be affected. BUT, if that same cart does an integration with a new merchant, the cart will need to increase their character capacity to support the new 32 character length.
Password Generation/Use:
- Log into Payeezy Gateway
- Access Terminal details screen
- Copy your GatewayID and paste it into your cart
- Select the Generate Password, this option will create a new 32 character password
- Copy the Password and paste it into your cart
For carts that do not accept 32 characters
- You can do one of the following steps:
- An error will be generated when you attempt to paste / input or save the 32 character password
- Create your own password (manually enter) in the Payeezy Gateway Terminal Screen and update both the Gateway and the Cart with this new value or
- Delete the extra characters in the Gateway generated Password and then update both the Gateway and the care with this new value
- Update the Terminal after either generating or creating the password.
3 API Transactions
The following tables show which fields are required to be submitted when using v9 or higher of the API. The first chart applies to regular transactions only; required properties for TransArmor and Gift Solutions (ValueLink) transactions are handled in their own tables below.
Transaction Name |
Transaction Type |
Required Properties |
Purchase |
00 |
CardholdersName Card_Number DollarAmount Expiry_Date |
Pre-Authorization |
01 |
CardholdersName Card_Number DollarAmount Expiry_Date |
Void |
13 |
CardholdersName Card_Number DollarAmount Expiry_Date Authorization_Num |
Tagged Pre-Authorization Completion |
32* |
Transaction_Tag DollarAmount Authorization_Num |
Tagged Void |
33 |
Transaction_Tag DollarAmount Authorization_Num |
Tagged Refund |
34 |
Transaction_Tag DollarAmount Authorization_Num |
3.0.1 Card Verification. CVV/CVC related processing
CVV-related API request fields
cvd_code (JSON format) CVDCode (XML/SOAP)
|
This is the 0, 3, or 4-digit code on the back of the credit card sometimes called the CVV2 or CVD value. (For API versions below v13, instead of "cvd_code" use field name "cc_verification_str2" (JSON) VerificationStr2 (XML/SOAP)) |
cvd_presence_ind (JSON format) CVD_Presence_Ind (XML/SOAP)
|
The number indicates how the CVV2 value should be handled when processing. The value must be either null or the integer 0, 1, 2, or 9. Note that null defaults to 0.
|
CVV-related API response field
cvv2 (JSON format) CVV2 (XML/SOAP)
|
The CVV2 authentication code returned from the bank. Note: the value is null if CVV2 is not supported. Supported CVV Results:
|
How to enable CVD/CVV2 Processing:
https://support.payeezy.com/hc/en-us/articles/203826399
How to setup a CVV filter and Terminal Type:
https://support.payeezy.com/hc/en-us/articles/204504205
How to simulate Payeezy Gateway responses:
https://support.payeezy.com/hc/en-us/articles/204504185
Please note:
- Payeezy Gateway mirrors back most of the API fields that were sent to it. However, please don't plan for logic that relies on receiving back "cvd_code". Storage of "cvd_code" is against PCI compliance. Hence, Payeezy Gateway won't mirror back "cvd_code".
- Send CVV value only via the "cvd_code" field. Sending CVV values via other fields is prohibited by Payeezy Gateway and storage of CVV values is prohibited by PCI compliance. Payeezy Gateway team will scrap CVV values presented in other API fields; including in reference-related fields.
API request example (simulating a transaction with a CVV match):
(simulation values for Demo terminals: https://support.payeezy.com/hc/en-us/articles/204504185)
{
"cc_number": "XXXXXXX",
"cardholder_name":"John Doe",
"transaction_type": "00",
"cc_expiry": "1122",
"amount": "5.00",
"gateway_id": "XXXXXX",
"password": "XXXXXXXXX",
"cvd_code":"123",
"cvd_presence_ind":"1"
}
API response example:
'{"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal",
"bank_resp_code":"100","bank_message":"Approved","bank_resp_code_2":"01","sequence_no":"0108422","cvv2":"M","retrieval_ref_no":"200525","merchant_name":"MGZ test API","merchant_address":"3722 Crenshaw Blvd","merchant_city":"Los Angeles","merchant_province":"California","merchant_country":"United States","merchant_postal":"90016","merchant_url":"https://admin.gateway.payeezyqa.com","ctr":"========== TRANSACTION RECORD ==========\\nXXXXXXX \\n3722 Crenshaw Blvd\\nLos Angeles, CA 90016\\nUnited States\\nhttps:/XXXXXXXXX.com\\n\\nTYPE: Purchase\\n\\nACCT: Mastercard $ 5.00 USD\\n\\nCARDHOLDER NAME : John Doe\\nCARD NUMBER : ############1471\\nDATE/TIME : 25 May 20 17:26:24\\nREFERENCE # : 011 0108422 M\\nAUTHOR. # : ET5626\\nTRANS. REF. : \\n\\n Approved - Thank You 100\\n\\n\\nPlease retain this copy for your records.\\n\\nCardholder will pay above amount to\\ncard issuer pursuant to cardholder\\nagreement.\\n========================================","gateway_id":"XXXXXXX","transaction_type":"00","amount":5.0,"cc_number":"############1471","transaction_tag":4302924084,"authorization_num":"ET5626","cc_expiry":"1122","cardholder_name":"John Doe","cvd_presence_ind":1,"currency_code":"USD","partial_redemption":0,"credit_card_type":"Mastercard"}'
API request example (simulating a decline):
(simulation values for Demo terminals: https://support.payeezy.com/hc/en-us/articles/204504185)
{
"cc_number": "XXXXXXX",
"cardholder_name":"John Doe",
"transaction_type": "00",
"cc_expiry": "1122",
"amount": "5.00",
"gateway_id": "XXXXXX",
"password": "XXXXXXXXX",
"cvd_code":"234",
"cvd_presence_ind":"1"
}
API response example:
'{"transaction_error":1,"transaction_approved":0,"exact_resp_code":"08","exact_message":"CVV2/CID/CVC2 Data not Verified","bank_resp_code":"100","bank_message":"Approved","bank_resp_code_2":"01","sequence_no":"0019513","cvv2":"N","retrieval_ref_no":"200525","merchant_name":"XXXXXX","merchant_address":"3722 Crenshaw Blvd","merchant_city":"Los Angeles","merchant_province":"California","merchant_country":"United States","merchant_postal":"90016","merchant_url":"https://admin.gateway.payeezyqa.com","ctr":"========== TRANSACTION RECORD ==========\\nXXXXXX \\n3722 Crenshaw Blvd\\nLos Angeles, CA 90016\\nUnited States\\nhttps://XXXXXXX.com\\n\\nTYPE: Purchase\\n\\nACCT: Mastercard $ 5.00 USD\\n\\nCARDHOLDER NAME : John Doe\\nCARD NUMBER : ############1471\\nDATE/TIME : 25 May 20 17:33:36\\nREFERENCE # : 011 0019513 M\\nAUTHOR. # : \\nTRANS. REF. : \\n\\n Transaction not completed\\n\\n\\nPlease retain this copy for your records.\\n========================================","gateway_id":"XXXXXXXXXX","transaction_type":"00","amount":5.0,"cc_number":"############1471","transaction_tag":4302924172,"authorization_num":"ET0338","cc_expiry":"1122","cardholder_name":"John Doe","cvd_presence_ind":1,"currency_code":"USD","partial_redemption":0,"credit_card_type":"Mastercard"}'
3.1 PayPal Transactions
Merchants that want to use the API to process PayPal Authorization transactions should first integrate directly with PayPal. (https://developer.paypal.com/)
The API functionality exposed via Payeezy Gateway allows for the following actions:
- Record of a PayPal “Authorization”, “Capture”, and “Order” (that was processed directly via PayPal API) on the Payeezy Gateway database. Record calls are typically done so that a merchant can see the details in RPM Transaction Details and Reports and also act on these transactions using the Payeezy Gateway platform (via actions on RPM or API).
- Complete/Void/Refund of an existing PayPal transaction that is recorded on Payeezy Gateway database. (The original transaction must be authorized directly via PayPal API or via PGW Payment Page using PayPal as the method of payment.)
Note: voids can only be run against authorized transactions that are not yet settled. To return funds that have already been settled to a customer, the tagged refund transaction type must be used.
PayPal authorizations will expire if they are not completed on time. Please refer to the official PayPal documentation for the expiration timeline: https://developer.paypal.com/docs/integration/direct/payments/authorize-and-capture-payments/#overview
Note: Payeezy Gateway integrates into PayPal NVP/SOAP API (https://developer.paypal.com/docs/classic/product-info/)
PayPal error codes: https://developer.paypal.com/docs/classic/api/errors/
API versions and supported features
- Recording of PayPal transactions and Void/Refund of PayPal transactions are supported starting from Payeezy Gateway API v10 and above
- For API v31 and above, API field “message” can be shown in RPM Transactions Details under field name “Bank Response”. This way, the merchant can record and keep track of the PayPal response that was received. In API versions below v31 “Bank Response” shows First Data Bank Response Codes (documented here: https://support.payeezy.com/hc/en-us/articles/203730509).
- “code” field in Payeezy Gateway API is supported from version 31 and above. It will show in RPM Transaction Details in the UI field “Bank Response”, beside the PayPal “message” string.
PayPal Transaction Types in Payeezy Gateway
Transaction Name |
transaction_type |
Required Properties |
Notes |
Order |
07 |
credit_card_type (set to "PayPal") amount authorization payer_id success (true or false) correlation_id message code |
PayPal “Order”, that was processed directly via PayPal API. |
Pre-Authorization |
01 |
credit_card_type (set to "PayPal") cardholder_name amount gross_amount_currency_id (e.g., “USD”) authorization payer_id success (true or false) timestamp correlation_id message code |
PayPal “Authorization”, that was processed directly via PayPal API. Payeezy Gateway will record this transaction in its database. A merchant can see the details in RPM Transaction Details and Reports and also act on these transactions using the Payeezy Gateway platform: Complete PayPal “Capture”, Void, Refund |
Purchase |
00 |
credit_card_type (set to "PayPal") cardholder_name amount gross_amount_currency_id (e.g., “USD”) authorization payer_id success (true or false) timestamp correlation_id message code |
PayPal “Capture”, that was processed directly via PayPal API. Payeezy Gateway will record this transaction in its database. |
Tagged Completion |
32 |
transaction_tag amount |
|
Tagged Void |
33 |
transaction_tag amount |
|
Tagged Refund |
34 |
transaction_tag amount |
|
Payeezy Gateway PayPal Properties
The following PayPal properties are used to record PayPal transactions on Payeezy Gateway. These PayPal transactions have already been processed by PayPal. To use any of the PayPal transaction types, the "credit_card_type" property must be set to "PayPal". Note that the below properties are only applicable to PayPal Purchase, Pre-Authorization, and Order transactions. To perform a tagged refund, pre-authorization completion, or void against a PayPal transaction, the normal tagged transaction types can be used. Alternatively, tagged transactions can be performed through the RPM user interface.
Property |
Description |
paypal_transaction_details (JSON) |
Parent of the properties listed below. |
payer_id (JSON) String |
Payer ID used for a PayPal transaction |
gross_amount_currency_id (JSON) String |
Currency ID applicable for the gross value of a PayPal transaction. |
success (JSON) Boolean |
Success indicator of a PayPal transaction |
authorization (JSON) String |
Authorization data returned from PayPal for a transaction |
message (JSON) String |
Explanatory message returned by PayPal for a PayPal transaction |
correlation_id (JSON) String |
Correlation ID of a PayPal transaction, which uniquely ties it to PayPal |
timestamp (JSON) String |
Applicable timestamp for a PayPal transaction |
code (JSON) |
PayPal error code returned by PayPal API back to the merchant |
API request example (JSON). Use case: record a PayPal “Order” on Payeezy Gateway. (A merchant already processed the “Order” against PayPal API)
{
"gateway_id":"X61234-12",
"amount":21.00,
"transaction_type":"07",
"credit_card_type":"PayPal",
"cardholder_name":" Simon Jones",
"password":"secret",
"paypal_transaction_details": {
"correlation_id":"DEFCAB77889900",
"timestamp":" 2019-05-26T08 : 52 : 29Z",
"authorization":"O-123456789ABCDEFGH",
"payer_id":"ABCDEF1234567890",
"gross_amount_currency_id":"USD",
"success":true,
"message":"What a wonderful world !",
“code”:”12345”}
}
API response example
{"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal","bank_resp_code":"100","bank_message":"What a wonderful world!","merchant_name":"Amazing Shopping","merchant_address":"3722 Crenshaw Blvd","merchant_city":"Los Angeles","merchant_province":"California","merchant_country":"United States","merchant_postal":"90016","merchant_url":"https://amazing-shopping.com","ctr":"========== TRANSACTION RECORD ==========\\nAmazing Shopping \\n3722 Crenshaw Blvd\\nLos Angeles, CA 90016\\nUnited States\\nhttps://admin.gateway.payeezyqa.com\\n\\nTYPE: Purchase\\n\\nACCT: PayPal $ 21.00 USD\\n\\nCARDHOLDER NAME : Simon Jones\\nCARD NUMBER : \\nDATE/TIME : 27 Aug 19 20:40:44\\nREFERENCE # : 011 M\\nAUTHOR. # : PP1044\\nTRANS. REF. : \\n\\n Approved - Thank You 100\\n\\n\\nPlease retain this copy for your records.\\n\\nCardholder will pay above amount to\\ncard issuer pursuant to cardholder\\nagreement.\\n========================================","gateway_id":"X61234-12","transaction_type":"00","amount":21.0,"transaction_tag":5000068055,"authorization_num":"PP1044","cardholder_name":"Simon Jones","cvd_presence_ind":0,"currency_code":"USD","partial_redemption":0,"credit_card_type":"PayPal","paypal_transaction_details":{"payer_id":"ABCDEF1234567890","gross_amount_currency_id":"USD","success":true,"authorization":”O-123456789ABCDEFGH”,"message":"What a wonderful world!","correlation_id":"DEFCAB77889900","timestamp":"2019-05-26T08 : 52 : 29Z","code":"12345"}}'
API request example (JSON). Use case: tagged-refund of a PayPal “Capture” via Payeezy Gateway. (A merchant sends API request to Payeezy Gateway. Payeezy Gateway will contact PayPal API to initiate the refund)
{
"gateway_id":"X61234-12",
"password":"secret",
"transaction_type":"34",
"transaction_tag":"5012368457",
"amount":2.00,
}
API response example
{"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal","bank_resp_code":"100","bank_message":"Success","amount_requested":0.0,"merchant_name":"Respect Elders","merchant_address":"3722 Crenshaw Blvd","merchant_city":"Los Angeles","merchant_province":"California","merchant_country":"United States","merchant_postal":"90016","merchant_url":"https://admin.gateway.payeezyqa.com","ctr":"========== TRANSACTION RECORD ==========\\nRespect Elders \\n3722 Crenshaw Blvd\\nLos Angeles, CA 90016\\nUnited States\\nhttps://admin.gateway.payeezyqa.com\\n\\nTYPE: Refund\\n\\nACCT: PayPal $ 2.00 USD\\n\\nCARDHOLDER NAME : Mike Angelo \\nCARD NUMBER : \\nDATE/TIME : 30 Aug 19 19:44:29\\nREFERENCE # : 011 M\\nAUTHOR. # : PP1429\\nTRANS. REF. : \\n\\n Approved - Thank You 100\\n\\n\\nPlease retain this copy for your records.\\n========================================","gateway_id":"X61234-12","transaction_type":"34","amount":2.0,"transaction_tag":5000068457,"authorization_num":"PP1429","cardholder_name":"Mike Angelo","cvd_presence_ind":0,"currency_code":"USD","partial_redemption":0,"credit_card_type":"PayPal","paypal_transaction_details":{"payer_id":"AYAFAZKPZ9XPC","gross_amount_currency_id":"USD","success":true,"authorization":"PP1121","message":null,"correlation_id":"a70f86192bccb","timestamp":"2019-08-30T22:14:29Z"}}'
Integrating PayPal's Express Checkout API
Payeezy Gateway Web Service API enables merchants to integrate PayPal’s Express Checkout API into their processing environment. A PayPal merchant account is required.
The following high level steps are used when integrating with PayPal Express Checkout API and Payeezy Gateway payment capture interface.
- Customer chooses PayPal from merchant’s check out page.
- Customer’s browser is redirected to PayPal’s web site.
- Customer logs into PayPal, authenticates credentials, and approves amount to be deducted from their account.
- Customer is returned to merchant’s web site for order confirmation.
- Merchant sends Express Checkout API request to PayPal to process payment transaction.
- Payeezy Gateway captures the payment details to be used for future actions such as voids, refunds and reporting.
Once the PayPal transaction is completed it is logged into Payeezy Gateway just like a regular credit card transaction and merchants can do a secondary transaction (Refund/Void) against it via Transaction Search in the RPM
You will need to follow PayPal’s instructions for integration which can be found at this link:
https://developer.paypal.com/webapps/developer/docs/classic/products/#ec
3.2 Zero Dollar Pre-Authorizations
Zero dollar Authorizations can be performed within the Payeezy Gateway Web Service API. Typically this is done in scenarios where the card details need to be verified and tokenized, but not charged immediately. Performing this type of transaction can be done by submitting "0" as the dollar amount and submitting "Transaction_type" as "Pre-Authorization Only". In addition, if TransArmor Multi-Pay token processing is enabled for the merchant account, TransArmor Multi-Pay tokens will be returned for each submitted transaction. The returned Multi-Pay tokens, from the Payeezy Gateway Web Service API or Hosted Payment Pages, can be utilized within the Payeezy Gateway Web Service interface to initiate subsequent transactions or as a mechanism to issue voids or credits to the underlying credit card number referenced by the Multi-Pay token.
3.3 Gift Card Transactions (Gift Solutions)
This section is specifically oriented on Gift Card transaction processing via API. For a general overview of the Gift Card feature please refer to the Gift Solutions Gift Cards Overview for Payeezy Gateway article.
Gift Solutions gift cards are supported by the Payeezy Gateway API. Gift Solutions cards are treated as a method of payment such as credit cards. Payeezy Gateway is certified SVdot Internet message format through Compass host.
Please note: When processing gift card transactions, API version 9 or higher should be used for EAN cards and cards without security code. For SCV cards API version 26 or higher is needed.
Each type of the gift card transaction has its own optional and required properties, which are listed in the table below.
Transaction Name |
Transaction Type |
Required Properties JSON (XML) |
Pre-Authorization |
01 |
cardholder_name (CardHoldersName) card_number (Card_Number) amount (DollarAmount) credit_card_type (CardType) must be set to "gift" scv (SCV) if the card is SCV type ean (EAN) if the card is EAN type |
Purchase |
00 |
cardholder_name (CardHoldersName) cc_number (Card_Number) amount (DollarAmount) credit_card_type (CardType) must be set to "gift" scv (SCV) if the card is SCV type ean (EAN) if the card is EAN type |
Tagged Completion |
32 |
transaction_tag (Transaction_Tag) amount (DollarAmount) authorization_num (Authorization_Num) credit_card_type (CardType) must be set to "gift" scv (SCV) if the card is SCV type ean (EAN) if the card is EAN type |
Void |
13 |
cardholder_name (CardHoldersName) cc_number (Card_Number) amount (DollarAmount) credit_card_type (CardType) must be set to "gift" authorization_num (Authorization_Num) scv (SCV) if the card is SCV type ean (EAN) if the card is EAN type |
Tagged Void |
33 |
transaction_tag (Transaction_Tag) amount (DollarAmount) authorization_num (Authorization_Num) credit_card_type (CardType) must be set to "gift" scv (SCV) if the card is SCV type ean (EAN) if the card is EAN type |
Tagged Refund |
34 |
transaction_tag (Transaction_Tag) amount (DollarAmount) authorization_num (Authorization_Num) credit_card_type (CardType) must be set to "gift" scv (SCV) if the card is SCV type ean (EAN) if the card is EAN type |
CashOut |
83 |
cardholder_name (CardHoldersName)
scv (SCV) if the card is SCV type ean (EAN) if the card is EAN type |
Balance Inquiry |
86 |
cardholder_name (CardHoldersName) credit_card_type (CardType) must be set to "gift" scv (SCV) if the card is SCV type ean (EAN) if the card is EAN type |
Reload |
88 |
cardholder_name (CardHoldersName) cc_number (Card_Number) amount (DollarAmount) credit_card_type (CardType) must be set to "gift" scv (SCV) if the card is SCV type ean (EAN) if the card is EAN type |
Mandatory usage of gift card security codes
If a gift card type is SCV or EAN, then the SCV or EAN fields must be populated with the relevant gift card security number. If not populated, then the transaction will be rejected. No need to use SCV or EAN fields for Pinless cards.
Virtual vs. Physical cards
To indicate that a gift card is Virtual, please use the following boolean field:
JSON: "virtual_card": true
XML: <VirtualCard>true</VirtualCard>
For Physical gift cards no need to use this field.
Gift Card Transaction example
Sample JSON request for EAN Virtual card
{
"cc_number": "1234123412341234",
"gateway_id": "XX1234-12",
"transaction_type": "00",
"credit_card_type": "gift",
"virtual_card": true,
"password": "samplepassword",
"cardholder_name": "Simone Sample",
"amount": "6",
"ean": "12345678",
"post_date": "02192016",
"signature": "9b8e669eda16e2cf16ca43ad39f6191471c32bae"
}
Response for sample request
{
"transaction_error": 0,
"transaction_approved": 1,
"exact_resp_code": "00",
"exact_message": "Transaction Normal",
"bank_resp_code": "100",
"bank_message": "Approved",
"sequence_no": "000002",
"retrieval_ref_no": "1417459",
"merchant_name": "Testing 001",
"merchant_address": "1234 Main st.",
"merchant_city": "Atlanta",
"merchant_province": "Georgia",
"merchant_country": "United States",
"merchant_postal": “54321",
"merchant_url": "http://www.firstdata.com",
"current_balance": 4.0,
"previous_balance": 10.0,
"ctr": "========== TRANSACTION RECORD ==========\nTesting 001\n1234 Main st.\nAtlanta, GA 30342\nUnited States\nhttp://www.firstdata.com\n\nTYPE: Purchase\n\nACCT: Gift Card $ 6.00 USD\n\nCARDHOLDER NAME : Simone Sample\nCARD NUMBER : ############1234\nDATE/TIME : 15 Jan 16 19:16:27\nREFERENCE # : 001 000002 M\nAUTHOR. # : ET121643\nTRANS. REF. : \n\n Approved - Thank You 100\n\nSIGNATURE\n\n\n\n\n----------------------------------------\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================",
"gateway_id": "XX1234-12",
"transaction_type": "00",
"amount": 6.0,
"cc_number": "############1234",
"transaction_tag": 5508,
"authorization_num": "ET121643",
"cardholder_name": "Simone Sample",
"cvd_presence_ind": 0,
"currency_code": "USD",
"partial_redemption": 0,
"credit_card_type": "Gift Card",
"ean": "12345678",
"post_date": "02192016",
"valuelink_auth_code": "100",
"local_currency_code": "840"
}
Split Tender via API
Note that partial authorizations are enabled for gift card transactions by default. This means that a transaction will be considered as approved if only a partial amount of the funds requested is available on the card. This transaction performs redemption/purchase on an active account. If the requested amount is greater than the account balance, the account will be reduced to zero, and collect the difference from consumer with other form of payment. Partial authorization is the difference of the requested amount and the account balance. The merchant’s application is responsible for determining how much was actually taken from the account by looking at the Previous Balance, and Current Balance, then that difference is applied to the redemption in order to determine if the entire transaction was satisfied. Should the consumer decline to pay by other means, the transaction would be voided.
Please note: this functionality is available in API v13 or higher.
API Request example (JSON)
{
"gateway_id": "XX1234-12",
"password": "12345pwd",
"amount":150.00,
"transaction_type": "00",
"credit_card_type": "gift",
"cardholder_name": "Simone Sample",
"cc_number": "1234123412341234",
"scv":"12345678",
"virtual_card": true,
}
Response example (JSON)
{
"transaction_type": "00",
"amount": "100.0",
"card_number": "############4235",
"transaction_tag": "2200930149",
"split_tender_id": "2200930149",
"authorization_num": "VL4580",
"card_holdersname": "Simone Sample",
"cvd_presence_ind": "0",
"transaction_error": "false",
"transaction_approved": "true",
"exact_resp_code": "00",
"exact_message": "Transaction Normal",
"bank_resp_code": "100",
"bank_message": "Approved",
"sequence_no": "0101942",
"currency": "USD",
"amount_requested": "150.0",
"partial_redemption": "true",
"merchant_name": "test merchant",
"credit_card_type": "Gift Card",
"current_balance": "0.0",
"previous_balance": "100.0",
"virtual_card": "true",
"ctr": "========== TRANSACTION RECORD ==========\nGift SCV Active Settlement\n, AL\nUnited States\nTYPE: Purchase\nACCT: Gift Card $ 300.00 USD\n ($ 350.00 USD was requested)\nCARDHOLDER NAME :Simone Sample\nCARD NUMBER : ############4235\nDATE/TIME : 14 Feb 18 08:51:44\nREFERENCE # : 001 0101942 V\nAUTHOR. # : VL4580\nTRANS. REF. : \n Approved - Thank You 100\nPlease retain this copy for your records.\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================","value_link_auth_code": "101181",
"local_currency_code": "840",
"scv": "95083131"
}
3.4 TransArmor Transactions
Detailed explanation about the business logic of the TransArmor feature can be found here: https://support.payeezy.com/hc/en-us/articles/203731189
To check if the terminal is enabled for TransArmor in RPM, visit the Administration->Details tab. If the TransArmor Token field is populated then TransArmor is enabled. In a Demo environment, one can enable the TransArmor feature by populating the field with any random set of characters and numbers.
Please note: the TransArmor token shown in RPM should not be confused with the "transarmor_token" API field. The RPM value is used as an encryption seed, whereas the API field is used to transfer the actual token of a specific card number.
The TransArmor token provided via Payeezy Gateway is a multi-pay token that can be used to represent the same credit card for all subsequent transactions for this specific card.
Card tokenization
When an API request is using the API field “cc_number” AND if TransArmor is enabled on a terminal, then the API response will include a field “transarmor_token” where a tokenized card number will be passed back. In addition, the “credit_card_type” field will be returned to indicate what card brand was used.
Transactions that use the “transarmor_token” in an API request must include the “credit_card_type” field to identify the card brand. Without this field, a transaction will be rejected with the following HTTP error: ‘Bad Request (07) - Invalid Attribute (credit_card_type)’
To tokenize a card without processing a payment, submit a $0 pre-authorization transaction.
Please note: when using card tokenization, there is a need to use the feature Stored Credentials (see section 3.13 of the API spec).
For the field credit_card_type (json) CardType (XML/SOAP), the following values are valid for credit cards:
'MASTERCARD'
'VISA'
'AMERICAN EXPRESS'
'DINERS CLUB'
'DISCOVER'
'JCB'
Using TransArmor Tokens with a Test Account
In the production environment, when tokenizing a card number, the same TransArmor token will always be returned for a given credit card number (when the same terminal and same encryption seed is used). However, in the test environment, each time you tokenize a card number, a different TransArmor token will be returned.
In both, TEST and PROD environments, the last 4 digits of the token are the same as the card number.
Please note that the API samples below work for Visa cards only. Other card brands require different fields with relation to Stored Credentials. Please refer to section 3.13.
Use case: Card tokenization with $0 Pre-Auth followed by a purchase
Card tokenization API request example using Visa (JSON)
{
"cc_number": "4111111111111111",
"cardholder_name":"Joe Bloggs",
"transaction_type": "01",
"cc_expiry": "0925",
"amount": "0",
"gateway_id": "XXXXXX-XX",
"password": "XXXXXXX",
"stored_credentials": {
"indicator": "1",
"initiation": "M",
"schedule": "U",
"transaction_id”: ”new”
}
}
API response example (JSON)
{"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal","bank_resp_code":"100","bank_message":"Approved","sequence_no":"0308389","retrieval_ref_no":"200107","merchant_name":"MGZ","merchant_address":"123 Sesame Street","merchant_city":"New York","merchant_province":"New York","merchant_country":"United States","merchant_postal":"54321","ctr":"========== TRANSACTION RECORD ==========\\nMGZ\\n123 Sesame Street\\nNew York, NY 54321\\nUnited States\\n\\n\\nTYPE: Pre-Authorization\\n\\nACCT: Visa $ 0.00 USD\\n\\nCARDHOLDER NAME : Dr. Dolittle\\nCARD NUMBER : ############1111\\nDATE/TIME : 07 Jan 20 16:03:24\\nREFERENCE # : 003 0308389 T\\nAUTHOR. # : 348467\\nTRANS. REF. : \\n\\n Approved - Thank You 100\\n\\n\\nPlease retain this copy for your records.\\n\\nCardholder will pay above amount to\\ncard issuer pursuant to cardholder\\nagreement.\\n========================================","gateway_id":"H45651-72","transaction_type":"01","amount":0.0,"transaction_tag":4301741860,"authorization_num":"348467","cc_expiry":"0925","cardholder_name":"Joe Bloggs","cvd_presence_ind":0,"currency_code":"USD","partial_redemption":0,
"transarmor_token":"9280353820081111",
"credit_card_type":"Visa",
"stored_credentials":
{"indicator":"1","initiation":"M","schedule":"U","transaction_id":"750007704041294"}
}
Follow up purchase API request example using Visa (JSON);
"transarmor_token", "credit_card_type", and "transaction_id" were provided in the response to the previous transaction
{
"transarmor_token": "9280353820081111" ,
"credit_card_type":"VISA",
"cardholder_name":"Joe Bloggs",
"transaction_type": "00",
"cc_expiry": "0925",
"amount": "5.25",
"gateway_id": "XXXXXX-XX",
"password": "XXXXXXX"
"stored_credentials": {
"indicator": "S",
"initiation": "M",
"schedule": "U",
"transaction_id”: ”750007704041294”
}
}
API response example (JSON) {"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal","bank_resp_code":"100","bank_message":"Approved","sequence_no":"0242177","retrieval_ref_no":"200109","merchant_name":"MGZ","merchant_address":"123 Sesame Street","merchant_city":"New York","merchant_province":"New York","merchant_country":"United States","merchant_postal":"54321","ctr":"========== TRANSACTION RECORD ==========\\nMGZ\\n123 Sesame Street\\nNew York, NY 54321\\nUnited States\\n\\n\\nTYPE: Purchase\\n\\nACCT: Visa $ 3.25 USD\\n\\nCARDHOLDER NAME : Dr. Dolittle\\nCARD NUMBER : ############1111\\nDATE/TIME : 09 Jan 20 21:34:39\\nREFERENCE # : 003 0242177 T\\nAUTHOR. # : 655817\\nTRANS. REF. : \\n\\n Approved - Thank You 100\\n\\n\\nPlease retain this copy for your records.\\n\\nCardholder will pay above amount to\\ncard issuer pursuant to cardholder\\nagreement.\\n========================================","gateway_id":"XXXX-XX","transaction_type":"00","amount":5.25,"transaction_tag":4301749947,"authorization_num":"655817","cardholder_name":"Joe Bloggs","cvd_presence_ind":0,"currency_code":"USD","partial_redemption":0,"transarmor_token":"9280353820081111","credit_card_type":"Visa","stored_credentials":{"indicator":"S","initiation":"M","schedule":"U","transaction_id":"750007704041294"}}
Use case: card tokenization with purchase included
API request example using Visa (JSON)
{
"cc_number": "4111111111111111",
"transaction_type": "00",
"cardholder_name":"Joe Bloggs",
"cc_expiry": "0925",
"amount": "5.25",
"gateway_id": "XXXXXX-XX",
"password": "XXXXXXX",
"stored_credentials": {
"indicator": "1",
"initiation": "M",
"schedule": "U",
"transaction_id”: ”new”
}
}
API response example (JSON)
{"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal","bank_resp_code":"100","bank_message":"Approved","sequence_no":"0332065","retrieval_ref_no":"200109","merchant_name":"MGZ settle 3","merchant_address":"123 Sesame Street","merchant_city":"New York","merchant_province":"New York","merchant_country":"United States","merchant_postal":"54321","ctr":"========== TRANSACTION RECORD ==========\\nMGZ settle 3\\n123 Sesame Street\\nNew York, NY 54321\\nUnited States\\n\\n\\nTYPE: Purchase\\n\\nACCT: Visa $ 5.25 USD\\n\\nCARDHOLDER NAME : Dr. Dolittle\\nCARD NUMBER : ############1111\\nDATE/TIME : 09 Jan 20 21:44:41\\nREFERENCE # : 003 0332065 T\\nAUTHOR. # : 436354\\nTRANS. REF. : \\n\\n Approved - Thank You 100\\n\\n\\nPlease retain this copy for your records.\\n\\nCardholder will pay above amount to\\ncard issuer pursuant to cardholder\\nagreement.\\n========================================","gateway_id":"H45651-72","transaction_type":"00","amount":5.25,"transaction_tag":4301749948,"authorization_num":"436354","cardholder_name":"Joe Bloggs","cvd_presence_ind":0,"currency_code":"USD","partial_redemption":0,"transarmor_token":"9280353820081111","credit_card_type":"Visa","stored_credentials":{"indicator":"1","initiation":"M","schedule":"U","transaction_id":"750010044810915"}}'
Transaction Name |
Transaction Type |
Required API Request Properties |
Purchase |
00 |
transarmor_token |
Pre-Authorization |
01 |
transarmor_token |
Forced Post |
03 |
transarmor_token |
Pre-Authorization Only |
05 |
transarmor_token |
Void |
13 |
transarmor_token |
Tagged Refund |
34 |
transarmor_token |
3.5 Telecheck Transactions
The API v13 and higher versions support TeleCheck transactions.
NOTE: When processing TeleCheck transactions through the API, your TeleCheck merchant account will need to be set up for ICA (Internet Check Acceptance). You will also need to set the ECI indicator property to match the type of business you are in order for your request to successfully process.
Note: Asterisk (*) are optional fields, only submit these fields when required by TeleCheck.
Transaction Name | Transaction Type | Required Properties |
Purchase | 00 |
DollarAmount CheckNumber CheckType CustomerName BankAccountNumber BankRoutingNumber CustomerIDType * CustomerID * Client_Email Address Ecommerce_Flag |
Void | 13 |
DollarAmount CheckNumber CheckType CustomerName BankAccountNumber BankRoutingNumber CustomerIDType * CustomerID * Client_Email Address Authorization_Num Ecommerce_Flag |
Tagged Void | 33 |
Transaction_Tag DollarAmount Authorization_Num Ecommerce_Flag |
Tagged Refund | 34 |
Transaction_Tag DollarAmount Authorization_Num Ecommerce_Flag |
TeleCheck API request properties
Property | Description |
CheckNumber
check_number (JSON format)
|
The check number being used to complete payment. |
CheckType
check_type (JSON format)
|
Allowed values for this field are "P" (personal check), or "C" (corporate check). |
BankAccountNumber
account_number (JSON format)
|
The bank account number of the check being used to complete payment. |
BankRoutingNumber
bank_id (JSON format)
|
The bank routing number of the check being used to complete payment. |
CustomerName
cardholder_name (JSON format)
|
The name of the customer making the payment. |
CustomerIDType (*)
customer_id_type (JSON format)
Note: Asterisk (*) are optional fields, only submit these fields when required by TeleCheck.
|
The type of ID used to validate the identity of the check holder. Allowed values are:
|
CustomerID (*)
customer_id_number (JSON format)
Note: Asterisk (*) are optional fields, only submit these fields when required by TeleCheck.
|
Number on the type of identification specified in the previous property. |
ReleaseType
release_type (JSON format) |
Release Type, can be one of "D", "P", "S", or "X". |
DateOfBirth
date_of_birth (JSON format) |
Customer's date of birth in MMDDYYYY format. |
VIP
vip (JSON format) |
VIP status of the transction. |
RegistrationNo
registration_no (JSON format) |
Registration number associated with the transaction. |
RegistrationDate
registration_date (JSON format) |
Registration date in MMDDYYYY format. |
ClerkID
clerk_id (JSON format) |
Clerk ID number associated with the transaction. |
DeviceID
device_id (JSON format) |
Device ID associated with the transaction. |
MICR
micr (JSON format) |
MICR associated with the transaction. |
Ecommerce_Flag
ecommerce_flag (JSON format)
|
The value passed in this flag can be used to classify the type of payment being performed. Possible values are outlined here. |
API request example (Json)
API response example (Json)
3.6 Visa Checkout Transactions
The v19 endpoint and newer versions of the API adds support for Visa Checkout transactions.
When using Visa Checkout via the API, the button placement and order entry need to be handled by the merchant.
Important: when using the Payeezy API for Visa Checkout, you are also required to maintain your own Visa Checkout API key. Visa Checkout automatically creates an API key when you enabled your Terminal for Visa Checkout via the Payeezy Gateway. You will use both a live key and a sandbox key from Visa Checkout (these will be different values). Your Visa Checkout API key can be retrieved from the Visa Checkout web-portal. The link to the web-portal was automatically emailed to the email account associated with the Payeezy Gateway Terminal.
Branding of the Visa Checkout button
When presenting the Visa Checkout button, the merchant must follow all of the Visa Checkout branding requirements. These requirements describe how to use Visa Checkout visual assets on your site. See the Visa Checkout JavaScript Integration section for integration details.
Visa Checkout Asset Inventory
Important: Visa may update or change Visa Checkout assets in order to improve the user experience at any time.
Visa Checkout Buttons
Standard button without card art: |
![]() |
Neutral button without card art: |
![]() |
Button with card art: |
![]() |
Visa Checkout Acceptance Marks
Note: The non-stacked mark (right-most graphic above) is preferred.
General Visa Checkout Asset Placement and Usage Requirements
You are required to implement the Visa Checkout branding requirements on all pages where the consumer is presented a payment method option, such as Visa Checkout or another payment method. Common examples include shopping cart page, login page, product page, and payment page. Your actual implementation depends on your specific flow.
You can use Visa Checkout on any page or in any flow on your site or application where a consumer is asked to type in their billing and payment information. Common examples include cart pages (both full and mini pages), payment pages, card-on-file management pages, or immediately before a flow where a consumer is prompted for personal information, which may be available, at least partially, within Visa Checkout.
These rules apply to the Visa Checkout button and acceptance mark:
- Do not change the functionality of these assets.
- Do not alter the size, shape, orientation or any other aspect of the images. In the event an image is not sized properly, Visa will provide an alternative variation.
- Ensure buttons are placed on an equal level with other action items on the page, regardless of the orientation of the page. If the buttons are below the fold, it helps to place an additional button at the top of the page:
Visa Checkout Button Requirements
The Visa Checkout button enables a consumer to pay for items with Visa Checkout on your site. The following rules are specific to the Visa Checkout button:
- You can use either a horizontal or stacked implementation with ‘or’ text between payment options to emphasize and distinguish that users are making a selection:
- If you offer guest checkout, pre-fill any account creation form you provide using the information provided from Visa Checkout after the lightbox closes.
- You should use the standard button unless the background colors on your site are dark, in which case, you can consider using a neutral button to provide greater contrast. Note: The neutral button is not available in the Visa Checkout SDK for iOS or the Visa Checkout SDK for Android.
As a best practice, if you require the consumer to sign in to your site, link the consumer's Visa Checkout account to the consumer's account on your site to avoid multiple sign in's by the consumer during checkout. By linking accounts, you can recognize the consumer's account on your site based on the consumer's successful sign in to Visa Checkout.
Visa Checkout Acceptance Mark Requirements
Use the Visa Checkout acceptance mark to let consumers know you accept Visa Checkout on your pages, such as on your payment pages and other pages that display a payment method. They are available at the following URLs:
- Preferred acceptance mark, 99x34 pixels:
URL: https://assets.secure.checkout.visa.com/VmeCardArts/partner/POS_horizontal_99x34.png
- 40x30 pixels:
URL: https://assets.secure.checkout.visa.com/VmeCardArts/partner/POS_vertical_medium_40x30.png
- 49x31 pixels:
URL: https://assets.secure.checkout.visa.com/VmeCardArts/partner/POS_vertical_large_49x31.png
- 28x21 pixels:
URL: https://assets.secure.checkout.visa.com/VmeCardArts/partner/POS_vertical_small_28x21.png
The following rules are specific to the Visa Checkout acceptance mark:
- Add Visa Checkout as the alternative (alt) text for the image.
- The Visa Checkout acceptance mark is not a substitute for the Visa brand mark.
- If the page layout cannot accommodate the acceptance mark, you can use the full Visa Checkout text instead.
Use on Payment Pages
Payment pages are those in which you accept a payment with the Visa Checkout button. The following rules apply:
- Place the Visa Checkout acceptance mark next to a selector, such as a radio button:
- When Visa Checkout has been selected, display the Visa Checkout button and hide the input fields for other payment methods:
Identifying Accepted Payment Methods
If you display accepted payment methods, include the Visa Checkout acceptance mark.
Visa Checkout Messaging
These examples provide specific content that you can use to describe Visa Checkout to consumers. Use either the short statement or long statement.
Short Statement
With Visa Checkout, you now have an easier way to pay with your card online, from the company you know and trust. Create an account once and speed through your purchase without re-entering payment or shipping information wherever you see Visa Checkout.
Long Statement
Visa is making it easier to pay with your card online.
- Create an account once and speed through checkout without having to re-enter payment or shipping information wherever you see Visa Checkout.
- Checkout with a single username and password across the sites you love to shop.
- Visa secures access to your account with advanced security tools, so you can shop online with confidence.
- Consistent, simple experience across desktop, mobile web and apps.
- Easy to activate with any major credit or debit card.
- Earn the same great rewards with the card you already use. Seamless web and mobile checkout without ever leaving merchant site.
Placement of the Visa Checkout button
Visa Checkout JavaScript and Button Reference sdk.js JavaScript Library
Important: the API key mentioned in this section is the Visa Checkout API key. You are required to maintain your own Visa Checkout API key. Visa Checkout automatically created an API key when you enabled your Terminal for Visa Checkout via Payeezy Gateway. You will use both a live key and a sandbox key from Visa Checkout, which are different from each other. Your Visa Checkout API key can be retrieved from the Visa Checkout web-portal. The link to the web-portal was automatically emailed to the email account associated with the Payeezy Gateway Terminal.
Use the sdk.js JavaScript library to control the operation of Visa Checkout on your site. There is one version for sandbox testing and one for live:
Example
<body>
...
<script type="text/javascript"
src="https://sandbox-assets.secure.checkout.visa.com/
checkout-widget/resources/js/integration/v1/sdk.js">
</script>
</body>
v-button Image Class
Use the v-buttoning class to render a Visa Checkout button that a consumer clicks to initiate a payment. The rendered buttons must follow the Visa Checkout user interface guidelines, which are described in Getting Started With Visa Checkout.
Query Parameters
Parameter |
Description |
size |
(Optional) Width of the button, in pixels. You can either specify the size to display a standard sized button, or you can specify height and width to specify a custom size button. If you do not specify either the size or both height and width, the button size is 213 pixels. If you specify height or width, the value of size is ignored.
Format: It is one of the following values: • 154 - small • 213 - medium (default) • 425 - High resolution or large Any other value defaults to 213 pixels.
Example: size=154 Since 2.0 |
height |
Height of the button, in pixels, for custom button sizes. You must specify the height if you specify a value for width. The value you choose determines the range of allowable values for width.
Format: It is one of the following values: • 34 • 47 • 94
Example: height=94 Since 2.4 |
width |
Width of the button, in pixels, for custom button sizes. You must specify the width if you specify a value for height.
Format: It is one of the following values: • less than 477 if height is 34; default value is 154 • greater than 476 and less than 659 if height is 47; default value is 213 • greater than 658 and less than 1317 if height is 94; default value is 425 The default value is used if the value for width is invalid for the specified height.
Example: width=200 Since 2.4 |
locale |
(Optional) The locale, which controls how text displays in a Visa Checkout button and the Visa Checkout lightbox. If not specified, the Accepted-Language value in HTTPS header is used, or if not present, en_US is used.
Format: It is one of the following values: • en_US - American English • en_CA - Canadian English • fr_CA - Canadian French • en_AU - Australian English
Example: locale=en_US Since 2.0 |
color |
(Optional) The color of the Visa Checkout button.
Format: It is one of the following values: • standard (default) • neutral
Note: Any other value for color will default to standard.
Example: color=neutral Since 2.5 |
cardBrands |
(Optional) Override value for brands associated with card art to be displayed. If a brand matching the consumer's preferred card is specified, the card art is displayed on the button; otherwise, a generic button is displayed.
Format: Comma-separated list of one or more of the following brands: • VISA • MASTERCARD • AMEX • DISCOVER
Example: cardBrands=VISA,AMEX Since 2.0 |
acceptCanadianVisaDebit |
Whether a Canadian merchant accepts Visa Canada debit cards; required for Canadian merchants, otherwise, ignored.
Format: One of the following values: • true - Visa Canada debit cards accepted • false - Visa Canada debit cards not accepted
Example: acceptCanadianVisaDebit : "true" Since 2.0 |
Examples
<body>
...
<img alt="..." class="v-button" role="button" src=
"https://sandbox.secure.checkout.visa.com/wallet-services-web/xo/button.png?..."
/>
...
</body>
Note: You can specify tabbing behavior to the button by including the tabindex attribute:
<img alt="..." class="v-button" role="button" tabindex="0" src=
"https://sandbox.secure.checkout.visa.com/wallet-services-web/xo/button.png?..."
/>
onVisaCheckoutReady Function
You control the Visa Checkout button and lightbox operation by defining an onVisaCheckoutReady function that includes handlers for initialization and purchase events. The function includes 2 kinds of event handlers:
Event Handler |
Description |
V.init |
(Required) Event handler for initialization. Specify values for initialization in this handler. Since 2.0 |
V.on |
(Required) Event handler for Visa Checkout purchase events. Specify actions to take on the following Visa Checkout events: • payment.success • payment.cancel • payment.error Since 2.0 |
Example
<head>
...
<script type="text/javascript">
function onVisaCheckoutReady(){
V.init({ apikey: "merchantApikey",... });
V.on("payment.success", function(payment){ ... });
V.on("payment.cancel", function(payment){ ... });
V.on("payment.error", function(payment, error){ ... });
}
</script>
...
</head>
V.init Event Handler
Use the V.init event handler to specify a JSON object that contains initialization values for the Visa Checkout JavaScript library. You specify values for these properties:
Property |
Description |
apikey |
(Required) The API key that Visa Checkout created when you enabled your Terminal for Visa Checkout via the Gateway.
You will use both a live key and a sandbox key from Visa Checkout, which are different from each other. The API key from Visa Checkout can be retrieved from the Visa Checkout web-portal. The link to the web-portal was automatically emailed to the email account associated with the Gateway Terminal.
Format: Alphanumeric; maximum 100 characters Since 2.0 |
externalProfileId |
(Optional) Profile ID (also the profile's name), created externally by a merchant or partner. Visa Checkout uses this to populate settings, such as accepted card brands and shipping regions. The properties set in this profile override properties in the merchant's current profile.
Format: Alphanumeric; maximum 50 characters Since 2.0 |
externalClientId |
(required or optiona) Unique ID associated with the client, such as a merchant, which could be assigned by you or Visa Checkout.
Format: Alphanumeric; maximum 100 characters Since 2.0 |
sourceId |
(Optional) Your merchant reference ID.
Format: Alphanumeric; maximum 100 characters Since 2.0 |
settings |
(Optional) One or more name-value pairs, each of which specifies a configuration attribute.
Format: settings=xxxxx? Since 2.0 |
paymentRequest |
(Optional) One or more name-value pairs, each of which specifies a payment request attribute.
Format: paymentRequest=xxxx? Since 2.0 |
Settings Properties
Property |
Description |
locale |
(Optional) Override value for the locale, which controls how text displays in the Visa Checkout button and lightbox. By default, Visa Checkout determines the locale from the consumer's browser settings. Do not use the locale attribute unless explicit control over the button or lightbox locale is required.
Format: It is one of the following values: • en_US - American English • en_CA - Canadian English • fr_CA - Canadian French • en_AU - Australian English
The value of the locale attribute must be compatible with the value of the country attribute. Since 2.0 |
countryCode |
(Optional) Override value for the country code, which controls how text displays in the Visa Checkout button and lightbox. By default, Visa Checkout determines the country from the consumer's IP address. Do not use the countryCode attribute unless explicit control over the display is required.
Format: It is one of the following values: • US - United States • CA - Canada • AU - Australia
The value of the country attribute must be compatible with the value of the locale attribute. Since 2.0 |
logoUrl |
(Optional) Absolute secure (HTTPS) URL path to the logo to display in the Visa Checkout lightbox; otherwise, the default Visa Checkout logo appears.
Your image must not exceed 174 pixels in width and should be 34 pixels high; oversize logos will be scaled to fit.
Format: HTTPS URL; maximum 256 characters Since 2.0 |
displayName |
(Optional) The merchant's name as it appears on the Review panel of the lightbox; typically, it is the name of your company.
Format: Alphanumeric Since 2.0 |
websiteUrl |
(Optional) Complete URL to your website.
Format: Valid URL, beginning with HTTP Since 2.0 |
customerSupportUrl |
(Optional) Your complete customer service or support URL.
Format: Valid URL, beginning with HTTP Since 2.0 |
shipping |
(Optional) Shipping properties associated with the lightbox; see .
Format: shipping Since 2.0 |
review |
(Optional) Review properties associated with the lightbox; see .
Format: review Since 2.0 |
payment |
(Optional) Payment method properties associated with the lightbox; see . Format: payment Since 2.0 |
dataLevel |
(Optional) Whether the payment.success event response should include summary information or full information. Permission to receive full information must be configured in Visa Checkout; otherwise, you will always receive only summary information, regardless of the data value you specify.
Format: It is one of the following values: • SUMMARY - Summary information (default) • FULL - Full information, which is only available if you are configured to receive it Since 2.0 |
Lightbox Panel Configuration Example
You can customize the appearance of lightbox panels, including the language in which text appears, whether the confirmation button is Continue or Pay, and various other messages and ornaments:
V.init({
...
settings: {
locale: "en_US",
countryCode: "US",
displayName: "MegaCorp",
logoUrl: "www.Some_Image_URL.gif",
websiteUrl: "www.MegaCorp.com",
customerSupportUrl: "www.MegaCorp.support.com",
...
dataLevel: "FULL"
...
);
Shipping Properties
Property |
Description |
acceptedRegions |
(Optional) Override value for shipping region country codes in the merchant's external profile, which limits selection of eligible addresses in the consumer's account.
Format: A list of ISO-3166-1 alpha-2 standard codes, such as US or CA. Since 2.0 |
collectShipping |
(Optional) Whether to obtain a shipping address from the consumer.
Format: One of the following values: • true - Obtain shipping address (default) • false - Shipping address is not required Since 2.0 |
Shipping Options Configuration Example
You can specify whether the consumer can set the shipping address (collectShipping) and the regions to which you ship:
V.init({
...
settings: {
...
shipping: {
acceptedRegions: ["US", "CA"],
collectShipping: "true"
},
...
);
Review Properties
Property |
Description |
message |
(Optional) Your message to display on the Review page. You are responsible for translating the message (if required)
Format: Alphanumeric; maximum 120 characters Since 2.0 |
buttonAction |
(Optional) The button label in the Visa Checkout lightbox.
Format: One of the following values: • Continue - Display Continue on the lightbox button (default) • Pay - Display Pay on the lightbox button Note: A value for total must be specified; otherwise Continue will be displayed. Since 2.0 |
Review Options Configuration Example
You can specify a message to display in the Visa Checkout lightbox and control the button text:
review: {
message: "Merchant defined message",
buttonAction: "Continue"
},
Payment Properties
Property |
Description |
cardBrands |
(Optional) Card brands that are accepted.
Format: Array containing one or more of the following brands: • VISA • MASTERCARD • AMEX • DISCOVER Since 2.0 |
acceptCanadianVisaDebit |
(Optional) Override of whether a Canadian merchant accepts Visa Canada debit cards; ignored for non-Canadian merchants.
Format: One of the following values: • true - Visa Canada debit cards accepted • false - Visa Canada debit cards not accepted
Example: acceptCanadianVisaDebit : "true" Since 2.0 |
Payment Options Configuration Example
You can limit the kind of cards you accept:
V.init({
...
settings: {
...
payment: {
cardBrands: [
"VISA",
"MASTERCARD"],
acceptCanadianVisaDebit : "true"
},
...
},
...
);
Payment Request Properties
Property |
Description |
merchantRequestId |
(Optional) Merchant's ID associated with the request. Visa Checkout stores this value for your use as a convenience.
Format: Alphanumeric; maximum 100 characters Since 2.0 |
currencyCode |
(Required) The currency with which to process the transaction.
Format: It is one of the following ISO 4217 standard alpha-3 code values: • USD - US dollars • CAD - Canadian dollars • AUD - Australian dollars Currency codes must be uppercase.
Example: "currencyCode" : "USD" Since 2.0 |
subtotal |
(Required) Subtotal of the payment.
Format: Numeric; maximum 7 digits with optional decimal point and 2 decimal digits
Example: "subtotal" : "9.00" Since 2.0 |
shippingHandling |
(Optional) Total of shipping and handling charges in the payment.
Format: Numeric; maximum 7 digits with optional decimal point and 2 decimal digits
Example: "shippingHandling" : "3.00" Since 2.0 |
tax |
(Optional) Total tax-related charges in the payment.
Format: Numeric; maximum 7 digits with optional decimal point and 2 decimal digits
Example: "tax" : "1.00" Since 2.0 |
discount |
(Optional) Total of discounts related to the payment. If provided, it is a positive value representing the amount to be deducted from the total.
Format: Numeric; maximum 7 digits with optional decimal point and 2 decimal digits
Example: "discount" : "2.50" Since 2.0 |
giftWrap |
(Optional) Total gift-wrapping charges in the payment.
Format: Numeric; maximum 7 digits with optional decimal point and 2 decimal digits
Example: "giftWrap" : "1.99" Since 2.0 |
misc |
(Optional) Total uncategorized charges in the payment.
Format: Numeric; maximum 20 digits, including an optional decimal point.
Example: "misc" : "1.00" Since 2.0 |
total |
(Optional) Total of the payment including all amounts.
Format: Numeric; maximum 7 digits with optional decimal point and 2 decimal digits
Example: "total" : "9.00" Since 2.0 |
orderId |
(Optional) Merchant's order ID associated with the payment. Format: Alphanumeric; maximum 100 characters Since 2.0 |
promoCode |
(Optional) Promotion codes associated with the payment. Multiple promotion codes are separated by a period ( . ).
Format: Alphanumeric; maximum 100 characters
Example: promoCode: "ABC"."DEF"."XYZ" Since 2.0 |
customData |
(Optional) Merchant-supplied data, as name-value pairs.
Format: Alphanumeric; maximum 1024 characters
Example: customData: { "nvPair": [ { "name": "Name1", "value": "value1" }, { "name": "Name2", "value": "value2" } ] ...
Since 2.0 |
Note: The sandbox sets specific risk advice and score values based on the subTotal of the transaction in the request. The risk information is returned in the consumer information payload (encPaymentData) of a successful response.
Value of the transaction (USD only) |
Value of advice in the response |
Value of score in the response |
0.01 to 0.99 Note: Amounts between 0.01 and 0.89 cause the transaction to be declined. |
UNAVAILABLE |
0 |
1.00 to 49.99 |
LOW |
10 |
50.00 to 149.99 |
MEDIUM |
45 |
150.00 or more |
HIGH |
90 |
Payment Request Configuration Example
You specify the payment request for which the consumer is being asked to agree:
V.init({
...
paymentRequest: {
merchantRequestId: "Merchant defined request ID",
currencyCode: "USD",
subtotal: "10.00",
shippingHandling: "2.00",
tax: "2.00",
discount: "1.00",
giftWrap: "2.00",
misc: "1.00",
total: "16.00",
description: "Megacorp Product",
orderId: "Merchant defined order ID",
promoCode: "Merchant defined promo code",
customData: {
"nvPair": [
{ "name": "customName1", "value": "customValue1" },
{ "name": "customName2", "value": "customValue2" }
]
...
);
Response to Payment Success Events
The response associated with the payment.success event returns the following information:
Property |
Description |
callId |
Visa Checkout transaction ID, which represents the purchase.
Format: Numeric; maximum 20 digits
Example: "callId":"..." Since 2.0 |
responseStatus |
Response status.
|
encKey |
Encrypted key to be used to decrypt encPaymentData. You use your shared secret to decrypt this key.
Format: Alphanumeric; maximum 128 characters
Example: "encKey":"..." Since 2.0 |
encPaymentData |
Encrypted consumer and payment data that can be used to process the transaction. You decrypt this by first unwrapping the encKey value, then using that unwrapped key to decrypt this value.
Format: Alphanumeric; maximum 1024 characters
Example: "encPaymentData":"..." Since 2.0 |
externalClientId |
Merchant ID of the merchant receiving the payment.
Format: Alphanumeric; maximum 100 characters Since 2.0 |
partialShippingAddress |
Partial shipping address of the consumer.
Format: Partial shipping address structure Since 2.0 |
Response Status
Property |
Description |
status |
HTTPS response status.
Format: Numeric Since 2.0 |
code |
Internal subcode.
Format: Numeric Since 2.0 |
severity |
Severity of the error.
Format: It is one of the following values: • ERROR • WARNING Since 2.0 |
message |
Description of the error.
Format: Alphanumeric Since 2.0 |
Partial Shipping Address
Property |
Description |
countryCode |
Country code of the country where the purchase should be shipped, such as US; useful for calculating shipping costs.
Format: Alphanumeric; maximum 2 characters Since 2.0 |
postalCode |
Postal code of the location where the purchase should be shipped, if available; useful for calculating shipping costs.
Format: Alphanumeric; maximum 128 characters Since 2.0 |
Response to Payment Cancelled Events
Property |
Description |
callId |
Visa Checkout transaction ID, which represents the cancelled payment.
Example: "callId":"..." Since 2.0 |
Response to Error Events
Property |
Description |
status |
HTTPS response status.
Format: Numeric Since 2.0 |
code |
Internal subcode.
Format: Numeric Since 2.0 |
severity |
Severity of the error.
Format: It is one of the following values: • ERROR • WARNING Since 2.0 |
message |
Description of the error.
Format: Alphanumeric Since 2.0 |
Example
{
"responseStatus" : { "status" : 404,
"code" : "1010",
"severity" : "ERROR",
"message" : "CallId b9346ed5-08d1-44b2-be32-bbde5c4bf34f was not found."
}}
Optimizing the Checkout Flow for Mobile Browsers
Visa Checkout is optimized for mobile browsers even if your checkout flow is not. Support is provided for both iOS and Android devices. In order to allow for a mobile optimized Visa Checkout experience, add the following <meta> tag to your HTML <head> block:
<html>
<head>
...
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0,
user-scalable=no" />
...
</head>
Complete Web Page HTML Example
You initialize the Visa Checkout library in the V.init event handler of your onVisaCheckoutReady function with properties that identify the merchant implementing the button, button characteristics and settings related to the behavior of the lightbox, and payment request properties. You specify how to respond to events related to the lightbox closing and the payment request in V.on event handlers.
Note: You must provide your Visa Checkout API key when initializing the Visa Checkout JavaScript library.
The following example shows an HTML web page that loads the Visa Checkout library, defines handlers for initialization and payment events, and creates a Visa Checkout button:
<html>
<head>
<script type="text/javascript">
function onVisaCheckoutReady() {
V.init({
apikey: "...",
sourceId: "Merchant Defined Source ID",
settings: {
locale: "en_US",
countryCode: "US",
displayName: "...Corp",
logoUrl: "www.Some_Image_URL.gif",
websiteUrl: "www....Corp.com",
customerSupportUrl: "www....Corp.support.com",
shipping: {
acceptedRegions: ["US", "CA"],
collectShipping: "true"
},
payment: {
cardBrands: [
"VISA",
"MASTERCARD"],
acceptCanadianVisaDebit: "true"
},
review: {
message: "Merchant defined message",
buttonAction: "Continue"
},
dataLevel: "SUMMARY"
},
paymentRequest: {
merchantRequestId: "Merchant defined request ID",
currencyCode: "USD",
subtotal: "10.00",
shippingHandling: "2.00",
tax: "2.00",
discount: "1.00",
giftWrap: "2.00",
misc: "1.00",
total: "16.00",
description: "Megacorp Product",
orderId: "Merchant defined order ID",
promoCode: "Merchant defined promo code",
customData: {
"nvPair": [
{ "name": "customName1", "value": "customValue1" },
{ "name": "customName2", "value": "customValue2" }
]
}
}
}
);
V.on("payment.success", function(payment){document.write(JSON.stringify(payment)); });
V.on("payment.cancel", function (payment) { ... });
V.on("payment.error", function (payment, error) { ... });
}
</script>
</head>
<body>
<img alt="Visa Checkout" class="v-button" role="button"
src="https://sandbox.secure.checkout.visa.com/wallet-services-web/xo/button.png?
cardBrands=VISA,MASTERCARD,DISCOVER,AMEX"/>
<script type="text/javascript"
src="https://sandbox-assets.secure.checkout.visa.com/
checkout-widget/resources/js/integration/v1/sdk.js">
</script>
</body>
</html>
Clickjacking Prevention
Clickjacking Prevention Steps
To prevent clickjacking of your pages, each page must contain JavaScript to verify that there are no transparent layers, such as might be the case if your page was loaded as an iFrame of a page containing malicious code, and that only your site can load your pages.
Checking for Hidden Layers
Pages that prevent clickjacking contain JavaScript, such as the following, to verify that there are no transparent layers in which malicious code could reside:
<head>
...
<style id=”antiClickjack”>body{display:none;}</style>
<script type=”text/javascript”>
if (self === top) {
var antiClickjack = document.getElementById(“antiClickjack”);
antiClickjack.parentNode.removeChild(antiClickjack);
} else {
top.location = self.location;
}
</script>
...
</head>
Using the X-Options Header
Messages directed at your pages must include an X-FRAME-OPTIONS header to verify that the response is known to be from your web application:
- X-FRAME-OPTIONS DENY prevents anything from framing your page.
- X-FRAME-OPTIONS SAMEORIGIN prevents anything except your application from framing your page.
Testing Your Clickjacking Prevention Implementation
To test your implementation of anti-clickjacking measures:
Note: –These steps assume your site is not already in an iFrame.
- Install or use a test server that is not being used for your production or sandbox site and does not contain the pages that you want to test. For example, you can test using Tomcat on localhost:8080.
- Create a page on your test server that loads the page containing the Visa Checkout button in an iFrame.
<html>
<body>
<iframe src="https://www.yoursite.com/..." width=100% height=100%>
<p>Your browser does not support iframes.</p>
</iframe>
</body>
</html>
- Test the page you created to load your actual page in an iFrame. Your test page should either be blank or display a message, such as The content cannot be displayed in a frame.
If you can see the page that contains the Visa Checkout button, your prevention measures are not sufficient.
As a best practice, you should automate these steps so that you automatically run a script to test your clickjacking prevention measures whenever you change or add a page to your site.
Example Server-Side Clickjacking Prevention Implementation
The following example shows how to implement X-FRAME-OPTIONS DENY or X-FRAME-OPTIONS SAMEORIGIN headers in a Java servlet for pages served by Tomcat:
Java Servlet
The following sample implements a servlet to provide either the X-FRAME-OPTIONS DENY header or the X-FRAME-OPTIONS SAMEORIGIN header as a filter:
package com.your_package.filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
public class ClickjackFilter implements Filter
{
private String mode = “DENY”;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse)response;
chain.doFilter(request, response);
res.addHeader(“X-FRAME-OPTIONS”, mode );
}
public void destroy() {
}
public void init(FilterConfig filterConfig) {
String configMode = filterConfig.getInitParameter(“mode”);
if ( configMode != null ) {
mode = configMode;
}
}
}
List of supported Visa Checkout Transaction Types
- authorization
- capture
- refund
- void
All Visa Checkout transaction types are submitted through the standard Payeezy Gateway Web Service API endpoints ().
Authorization Transaction
Notes:
- The Visa Checkout Call ID is required in the request
- No payment details are passed in the request
- Masked card information, customer address, and transaction amount are obtained from Visa Checkout and are included in response
Request
{"transaction_type":"01","visa_checkout":{"call_id":"5467428919436032412"}}
Response
{
"merchant_url": "http://www.firstdata-demo-account.com",
"merchant_address": "3393 Peachtree Road NE",
"bank_message": "Approved",
"partial_redemption": 0,
"transaction_approved": 1,
"cc_number": "############1111",
"bank_resp_code": "100",
"address": {
"zip": "90210",
"country_code": "US",
"address1": "21 Jump Street",
"city": "Beverley Hills",
"state": "CA",
"phone_number": "2122524000"
},
"currency_code": "CAD",
"avs": "2",
"transaction_error": 0,
"exact_resp_code": "00",
"exact_message": "Transaction Normal",
"client_ip": "127.0.0.1",
"transaction_type": "01",
"merchant_country": "United States",
"gateway_id": "AD0160-01",
"cc_expiry": "1016",
"sequence_no": "000005",
"merchant_postal": "30342",
"visa_checkout": {
"call_id": "5467428919436032412"
},
"cvd_presence_ind": 0,
"merchant_city": "Atlanta",
"cardholder_name": "Timothy Duncan",
"credit_card_type": "Visa",
"retrieval_ref_no": "7526387",
"transaction_tag": 5273,
"ctr": "=========== TRANSACTION RECORD ==========\nSettlement - First Data Testing 002\n3393 Peachtree Road NE\nAtlanta, GA 30342\nUnited States\nhttp://www.firstdata-demo-account.com\n\nTYPE: Pre-Authorization\n\nACCT: Visa $ 1,036.26 CAD\n\nCARDHOLDER NAME : Timothy Duncan \nCARD NUMBER : ############1111\nDATE/TIME : 10 Dec 14 12:20:26\nREFERENCE # : 000005 M\nAUTHOR. # : ET187971\nTRANS. REF. : \n\n Approved - Thank You 100\n\nSIGNATURE\n\n\n\n\n------------------------------------\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to card\nissuer pursuant to cardholder agreement.\n=========================================",
"cvv2": "I",
"merchant_province": "Georgia",
"client_email": " Timothy.Duncan @email.com",
"merchant_name": "Settlement - First Data Testing 002",
"authorization_num": "ET187971",
"amount": 1036.26
}
Capture Transaction – Capture of a previous Authorization
Notes
- The Visa Checkout Call ID is not passed in the request. Instead, the previous authorization transaction is identified by transaction_tag and authorization_num, which are required in the request
- The Visa Checkout Call ID is obtained from the original transaction and included in the response
Request
{"transaction_type":"32","amount":1036.26,"transaction_tag": 5273,"authorization_num":"ET187971"}
Response
{
"merchant_postal": "30342",
"transaction_type": "32",
"amount": 1036.26,
"ctr": "=========== TRANSACTION RECORD ==========\nSettlement - First Data Testing 002\n3393 Peachtree Road NE\nAtlanta, GA 30342\nUnited States\nhttp://www.firstdata-demo-account.com\n\nTYPE: Completion\n\nACCT: Visa $ 1,036.26 CAD\n\nCARDHOLDER NAME : Donncha Redmond\nCARD NUMBER : ############1111\nDATE/TIME : 10 Dec 14 12:24:17\nREFERENCE # : 000005 M\nAUTHOR. # : ET191879\nTRANS. REF. : \n\n Approved - Thank You 100\n\nSIGNATURE\n\n\n\n\n------------------------------------\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to card\nissuer pursuant to cardholder agreement.\n=========================================",
"transaction_tag": 5274,
"retrieval_ref_no": "2655088",
"bank_message": "Approved",
"exact_resp_code": "00",
"cvv2": "I",
"merchant_address": "3393 Peachtree Road NE",
"currency_code": "CAD",
"visa_checkout": {
"call_id": "5467428919436032412"
},
"merchant_city": "Atlanta",
"cc_number": "############1111",
"partial_redemption": 0,
"transaction_approved": 1,
"merchant_name": "Settlement - First Data Testing 002",
"merchant_country": "United States",
"authorization_num": "ET191879",
"gateway_id": "AD0160-01",
"bank_resp_code": "100",
"cardholder_name": "Timothy Duncan",
"credit_card_type": "Visa",
"cc_expiry": "1016",
"cvd_presence_ind": 0,
"sequence_no": "000005",
"merchant_url": "http://www.firstdata-demo-account.com",
"merchant_province": "Georgia",
"transaction_error": 0,
"exact_message": "Transaction Normal",
"client_ip": "127.0.0.1"
}
Tagged Refund Transaction – Refund of a previous Capture Transaction
Notes
- The Visa Checkout CallID is not passed in the request. Instead, the previous captured transaction is identified by transaction_tag and authorization_num, which are required in the request
- The Visa Checkout CallID is obtained from the original transaction and included in the response
Request
{"transaction_type":"34","amount":500.34,"transaction_tag": 5274,"authorization_num":"ET191879"}
Response
{
"merchant_postal": "30342",
"transaction_type": "34",
"amount": 500.34,
"ctr": "=========== TRANSACTION RECORD ==========\nSettlement - First Data Testing 002\n3393 Peachtree Road NE\nAtlanta, GA 30342\nUnited States\nhttp://www.firstdata-demo-account.com\n\nTYPE: Refund\n\nACCT: Visa $ 500.34 CAD\n\nCARDHOLDER NAME : Donncha Redmond\nCARD NUMBER : ############1111\nDATE/TIME : 10 Dec 14 12:26:39\nREFERENCE # : 000006 M\nAUTHOR. # : ET165885\nTRANS. REF. : \n\n Approved - Thank You 100\n\nSIGNATURE\n\n\n\n\n------------------------------------\n\nPlease retain this copy for your records.\n\n=========================================",
"transaction_tag": 5275,
"retrieval_ref_no": "7769505",
"bank_message": "Approved",
"exact_resp_code": "00",
"cvv2": "I",
"merchant_address": "3393 Peachtree Road NE",
"currency_code": "CAD",
"visa_checkout": {
"call_id": "5467428919436032412"
},
"merchant_city": "Atlanta",
"cc_number": "############1111",
"partial_redemption": 0,
"transaction_approved": 1,
"merchant_name": "Settlement - First Data Testing 002",
"merchant_country": "United States",
"authorization_num": "ET165885",
"gateway_id": "AD0160-01",
"bank_resp_code": "100",
"cardholder_name": "Timothy Duncan",
"credit_card_type": "Visa",
"cc_expiry": "1016",
"cvd_presence_ind": 0,
"sequence_no": "000006",
"merchant_url": "http://www.firstdata-demo-account.com",
"merchant_province": "Georgia",
"transaction_error": 0,
"exact_message": "Transaction Normal",
"client_ip": "127.0.0.1"
}
Void Transaction – Void of a previous Refund Transaction
Notes
- The Visa Checkout Call ID is not passed in the request. Instead, the previous refund transaction is identified by transaction_tag and authorization_num, which are required in the request
- The Visa Checkout Call ID is obtained from the original transaction and included in the response
Request
{"transaction_type":"33","amount":500.34,"transaction_tag": 5275,"authorization_num":"ET165885"}
Response
{
"merchant_postal": "30342",
"transaction_type": "33",
"amount": 500.34,
"ctr": "=========== TRANSACTION RECORD ==========\nSettlement - First Data Testing 002\n3393 Peachtree Road NE\nAtlanta, GA 30342\nUnited States\nhttp://www.firstdata-demo-account.com\n\nTYPE: Void\n\nACCT: Visa $ 500.34 CAD\n\nCARDHOLDER NAME : Donncha Redmond\nCARD NUMBER : ############1111\nDATE/TIME : 10 Dec 14 12:27:11\nREFERENCE # : 000006 M\nAUTHOR. # : ET149705\nTRANS. REF. : \n\n Approved - Thank You 100\n\nSIGNATURE\n\n\n\n\n------------------------------------\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to card\nissuer pursuant to cardholder agreement.\n=========================================",
"transaction_tag": 5276,
"retrieval_ref_no": "0139961",
"bank_message": "Approved",
"exact_resp_code": "00",
"cvv2": "I",
"merchant_address": "3393 Peachtree Road NE",
"currency_code": "CAD",
"visa_checkout": {
"call_id": "5467428919436032412"
},
"merchant_city": "Atlanta",
"cc_number": "############1111",
"partial_redemption": 0,
"transaction_approved": 1,
"merchant_name": "Settlement - First Data Testing 002",
"merchant_country": "United States",
"authorization_num": "ET149705",
"gateway_id": "AD0160-01",
"bank_resp_code": "100",
"cardholder_name": "Timothy Duncan",
"credit_card_type": "Visa",
"cc_expiry": "1016",
"cvd_presence_ind": 0,
"sequence_no": "000006",
"merchant_url": "http://www.firstdata-demo-account.com",
"merchant_province": "Georgia",
"transaction_error": 0,
"exact_message": "Transaction Normal",
"client_ip": "127.0.0.1"
}
3.7 Debit Bill Pay
For full feature description please refer to the following URL: https://support.payeezy.com/hc/en-us/articles/212571807
The API v9 and higher supports Debit Bill Pay service. In order to use HMAC, please use API v12 and higher.
Debit Bill Pay Transaction:
Requesting a Debit Bill Pay transaction should follow similar structure to Credit Card transactions. However, please specify the credit_card_type property as "Debit Bill Pay". You will notice in the Response that "credit_card_type" property will be updated to the Debit Network name the request was processed through (e.g., STAR, NYCE, PULSE).
In addition, "customer_ref" field must be populated with an alpha-numeric value (no longer than 20 characters). (customer_ref (JSON) , Customer_Ref (XML/SOAP)). A failure to populate this field may result in rejection with Bank Code 227 (Missing Companion Data).
Supported e-commerce flags for this feature are: 2, 7, I.
NOTE: A Debit Bill Pay Tagged Refund and Void request works in similar way as a Credit Card Tagged Refund and Void. One important difference: Debit Bill Pay void can only be performed within a 90 minute window. After that a tagged refund must be completed, instead of a void. Click here to see Credit Card request samples.
Request Sample (JSON):
{
"credit_card_type":"Debit Bill Pay",
"customer_ref":"12345abcdef",
"amount":"77.00",
"transaction_type":"00",
"cardholder_name":"Claudia Crooks",
"cc_number":"XXXXXXXXXXXXX",
"cc_expiry":"0920",
}
Response Sample (JSON):
{"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal","bank_resp_code":"100","bank_message":"Approved","sequence_no":"0149537","retrieval_ref_no":"200303","amount_requested":0.0,"merchant_name":"Settlement - Debit Bill Pay","merchant_address":"128 W 6th Ave","merchant_city":"Vancouver","merchant_province":"British Columbia","merchant_country":"Canada","merchant_postal":"BC V5Y 1K","ctr":"========== TRANSACTION RECORD ==========\nSettlement - Debit Bill Pay\n128 W 6th Ave\nVancouver, BC BC V5Y 1K\nCanada\n\n\nTYPE: Purchase\n\nACCT: NYCE Debit Bill Pay $ 77.00 USD\n\nCARDHOLDER NAME : Claudia Crooks\nCARD NUMBER : ############4453\nDATE/TIME : 03 Mar 20 13:44:43\nREFERENCE # : 001 0149537 M\nAUTHOR. # : 412586\nTRANS. REF. : \n\n Approved - Thank You 100\n\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================","gateway_id":"XXX","transaction_type":"00","amount":77.0,"cc_number":"############4453","transaction_tag":4300022270,"authorization_num":"412586","cc_expiry":"0920","cardholder_name":"Claudia Crooks", "partial_redemption":0,"credit_card_type":"Debit Bill Pay, "customer_ref":"12345abcdef"}
Request Sample (XML):
<?xml version="1.0" encoding="UTF-8"?>
<Transaction>
<ExactID>XXXXXXXX</ExactID>
<Password>XXXXXXXXX</Password>
<Card_Number>XXXXXXXXXXXXXXXX</Card_Number>
<Transaction_Type>00</Transaction_Type>
<DollarAmount>50</DollarAmount>
<Expiry_Date>1018</Expiry_Date>
<CardHoldersName>Happy Customer</CardHoldersName>
<CardType>Debit Bill Pay</CardType>
<Customer_Ref>12345abcdef</Customer_Ref>
<Currency_Code>USD</Currency_Code>
</Transaction>
Response Sample (XML):
<?xml version="1.0" encoding="UTF-8" ?>
<TransactionResult>
<ExactID>XXXXXXXXX</ExactID>
<Password/>
<Transaction_Type>00</Transaction_Type>
<DollarAmount>50.0</DollarAmount>
<SurchargeAmount/>
<Card_Number>XXXXXXXXXXXXXXXXXX</Card_Number>
<Transaction_Tag>4883300</Transaction_Tag>
<Track1/>
<Track2/>
<PAN/>
<Authorization_Num>332932</Authorization_Num>
<Expiry_Date>0918</Expiry_Date>
<CardHoldersName>Happy Customer</CardHoldersName>
<VerificationStr1/>
<VerificationStr2/>
<CVD_Presence_Ind>0</CVD_Presence_Ind>
<ZipCode/>
<Tax1Amount/>
<Tax1Number/>
<Tax2Amount/>
<Tax2Number/>
<Secure_AuthRequired/>
<Secure_AuthResult/>
<Ecommerce_Flag/>
<XID/>
<CAVV/>
<CAVV_Algorithm/>
<Reference_No/>
<Customer_Ref/>
<Reference_3/>
<Language/>
<Client_IP/>
<Client_Email/>
<User_Name/>
<Transaction_Error>false</Transaction_Error>
<Transaction_Approved>true</Transaction_Approved>
<EXact_Resp_Code>00</EXact_Resp_Code>
<EXact_Message>Transaction Normal</EXact_Message>
<Bank_Resp_Code>100</Bank_Resp_Code>
<Bank_Message>Approved</Bank_Message>
<Bank_Resp_Code_2/>
<SequenceNo>0200862</SequenceNo>
<AVS/>
<CVV2/>
<Retrieval_Ref_No>151014</Retrieval_Ref_No>
<CAVV_Response/>
<Currency>USD</Currency>
<AmountRequested>0.0</AmountRequested>
<PartialRedemption>false</PartialRedemption>
<MerchantName>XXXXXXXXXXXX</MerchantName>
<MerchantAddress/>
<MerchantCity/>
<MerchantProvince>XXXXXXX</MerchantProvince>
<MerchantCountry>XXXXXXXX</MerchantCountry>
<MerchantPostal/>
<MerchantURL/>
<TransarmorToken/>
<CardType>Debit Bill Pay</CardType>
<CurrentBalance/>
<PreviousBalance/>
<EAN/>
<CardCost/>
<VirtualCard>false</VirtualCard>
<CTR>
3.8 Special Payment Transactions
The API v21 and higher supports the Special Payment feature.
Special Payment Transaction Sample:
Requesting a Special Payment transaction should follow similar structure to the regular Credit Card transactions.
The differences that is present compared to a regular credit card transactions: to process a Special Payment, there is a need to use the optional "special_payment" flag.
Field name | Data Type | Request Values | Response Values |
special_payment (JSON) SpecialPayment (XML) (API v21 and higher) |
String |
|
|
Special Payment flag works for Visa transactions only. If Special Payments are enabled on a terminal and the special_payment flag is used for a Visa transaction, then the transaction will be processed as Special Payment. If the terminal is not enabled for Special Payments, the flag will be ignored and the transaction will be processed as a regular credit card transaction.
If the flag is used for other credit card brands, it will be ignored and the transaction will be processed as a regular credit card transaction.
API Request sample (JSON):
{
"gateway_id": "XX1234-12",
"password": "XXXXXXXX",
"transaction_type":"01",
"cc_number":"4111111111111111",
"cardholder_name": "John Snow",
"cc_expiry":"1020",
"amount":"100.25",
"special_payment": "B"
}
API Response sample (JSON):
{
"transaction_error":0,
"transaction_approved":1,
"exact_resp_code":"00",
"exact_message":"Transaction Normal",
"bank_resp_code":"100",
"bank_message":"Approved",
"sequence_no":"000013",
"cvv2":"I",
"retrieval_ref_no":"6288297",
"merchant_name":"MerchantName",
"merchant_address":"123 Merchant street",
"merchant_city":"MerchantCity",
"merchant_province":"CA",
"merchant_country":"US",
"merchant_postal":"12345",
"merchant_url":"http://www.url.com",
"ctr":"========== TRANSACTION RECORD ==========\nMerchantName\n 123 Merchant street way\nMerchantCity, CA 12345\nUS\nhttp://www.url.com\n\nTYPE: Pre-Authorization\n\nACCT: Visa $ 100.25 USD\n\nCARDHOLDER NAME : John Snow\nCARD NUMBER : ############1111\nDATE/TIME : 18 Aug 16 15:04:06\nREFERENCE # : 001 000013 M\nAUTHOR. # : XP174346\nTRANS. REF. : \n\n Approved - Thank You 100\n\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================",
"gateway_id":"XX1234-12",
"transaction_type":"01",
"amount":100.25,
"cc_number":"############1111",
"transaction_tag":1234567890123,
"authorization_num":"XP123456",
"cc_expiry":"1020",
"cardholder_name":"John Snow",
"cvd_presence_ind":0,
"currency_code":"USD",
"partial_redemption":0,
"credit_card_type":"Visa",
"special_payment":"approved"
}
3.9 Wallet Provider ID
Please use this field to differentiate between the digital wallet providers. This feature is supported by API version 22 and higher.
If a digital wallet was used during a transaction, then Wallet Provider ID must be specified. Without this info a transaction will be incorrectly identified as a 3D Secure transaction. (If a 3D Secure transaction is processed, there is no Wallet Provider and hence no need to populate the wallet_provider_id field)
If the API field is not populated, Payeezy Gateway will default to value=1 (no wallet provider)
Field name | Data Type | Request Values | Response Values |
wallet_provider_id (JSON) WalletProviderID (XML) (API v22 and higher ) |
String (optional) |
|
|
API Request example (JSON):
{
"gateway_id": "XXXXXX-XXX",
"password": "XXXXXXX",
"transaction_type": "00",
"amount": "10",
"cc_number": "373953192351004",
"cardholder_name": "Jonny Step",
"wallet_provider_id": "4",
"cc_expiry": "0920"
}
API Response example (JSON):
{"transaction_error":0,
"transaction_approved":1,
"exact_resp_code":"00",
"exact_message":"Transaction Normal",
"bank_resp_code":"100",
"bank_message":"Approved",
"sequence_no":"0226916",
"retrieval_ref_no":"170124",
"merchant_name":"ACME Water Co.",
"merchant_address":"12345 Main St",
"merchant_city":"Coral Springs",
"merchant_province":"Florida",
"merchant_country":"United States",
"merchant_postal":"33065",
"ctr":"========== TRANSACTION RECORD ==========\nACME Water Co.\n12345 Main St\nCoral Springs, FL 33065\nUnited States\n\n\nTYPE: Purchase\n\nACCT: American Express $ 10.00 USD\n\nCARDHOLDER NAME :Jonny Step\nCARD NUMBER : ###########1004\nDATE/TIME : 24 Jan 17 19:43:37\nREFERENCE # : 001 0226916 M\nAUTHOR. # : 989484\nTRANS. REF. : \n\n Approved - Thank You 100\n\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================",
"gateway_id”:”XXXXXX-01",
"transaction_type":"00",
"amount":10.0,
"cc_number":"###########1004",
"transaction_tag":6579819,
"authorization_num":"989484",
"cc_expiry":"0920",
"cardholder_name":"Jonny Step",
"cvd_presence_ind":0,
"currency_code":"USD",
"partial_redemption":0,
"credit_card_type":"American Express"}
3.10 Payment Facilitator (PFac)
Preparation:
- API transactions for Payment Facilitator are supported by API v23 and above.
- Transaction Search and Report API specification is available here: https://support.payeezy.com/hc/en-us/articles/203731129
API Fields for Global Payment Facilitator Transactions (Multi MID PFac)
There are no additional API fields needed for Global Payment Facilitator.
Sample Global PFac Transaction Request (JSON)
{
"mid":"xxxxxxxxxxxx",
"division_id":"xxxxxx",
"transaction_type":"00",
"cc_number":"xxxxxxxxxxxx0026",
"correlation_id":"Unique_Correlation_ID_1",
"amount":"10.00",
"cc_expiry":"1225",
"cardholder_name":"John Doe",
"address": {
"address1":"12115 LACKLAND",
"address2":"",
"city":"St Louis",
"state":"MO",
"zip":"63146",
"country_code":"US",
"phone_number":"1234567890",
"phone_type":"H"
}
}
Sample Global PFac Transaction Response (JSON)
{"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal","bank_resp_code":"100","bank_message":"Approved","sequence_no":"0836600","retrieval_ref_no":"170324","merchant_name":"Payment FACILITATOR1","merchant_address":"ADDRESS","merchant_city":"CITY","merchant_province":"New York","merchant_country":"United States","merchant_postal":"90210","merchant_url":"WWW.E-XACT.COM","ctr":"========== TRANSACTION RECORD ==========\nPayment FACILITATOR1\nADDRESS\nCITY, NY 90210\nUnited States\nWWW.E-XACT.COM\n\nTYPE: Purchase\n\nACCT: Visa $ 10.00 USD\n\nCARDHOLDER NAME : John Doe\nCARD NUMBER : ############0026\nDATE/TIME : 24 Mar 17 16:12:40\nREFERENCE # : 001 0836600 M\nAUTHOR. # : 150988\nTRANS. REF. : \n\n Approved - Thank You 100\n\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================","gateway_id":"xxxxxx-xx","transaction_type":"00","amount":10.0,"cc_number":"############0026","transaction_tag":xxxxxxx,"authorization_num":"xxxxxx","cc_expiry":"1225","cardholder_name":"John Doe","cvd_presence_ind":0,"currency_code":"USD","partial_redemption":0,"credit_card_type":"Visa","correlation_id":"Unique_Correlation_ID_1","soft_descriptor":{"mvv_maid":"1234abcd"},"address":{"address1":"12115 LACKLAND","city":"St Louis","state":"MO","zip":"63146","country_code":"US","phone_number":"1234567890","phone_type":"H"}}
API Fields for Legacy Payment Facilitator Transactions (Single MID PFac)
Field Name |
Length |
Data Type |
Description |
soft_descriptor |
Not applicable |
Not applicable |
Parent of the properties listed below. Note: to use any of the properties listed below, this property must be used as their parent. |
dba_name |
Maximum length of 22. |
Alphanumeric |
dba_name must be formatted as shown--the prefix indicates the Payment Facilitator (‘XYZ’) and the suffix indicates the Submerchant (‘ASMALLCO’): Example: XYZ*ASMALLCO Prefices and suffices must adhere to this format: 3 chars * 18 chars (max) 7 chars * 14 chars (max) 12 chars * 9 chars (max) |
pfac_name |
Maximum length of 50. Note that pfac_name should NOT be submitted for AMEX transactions. |
Alphanumeric |
Payment Facilitator name, as registered with the appropriate Card Brand. |
pfac_submerchant_id |
Minimum length of 10. |
Alphanumeric |
|
mvv_maid |
10 digits for VISA transactions; 6 digits for all non-VISA transactions |
Alphanumeric |
|
amex_merchant_phone |
Length of 24 |
Alphanumeric |
Sub-merchant phone. For AMEX transactions only. |
amex_merchant_email |
Length of 40 |
Alphanumeric |
Sub-merchant email. For AMEX transactions only. |
Sample Legacy PFac Transaction JSON Request
{
"gateway_id":"xxxxxx-xx",
"password":"xxxxxxxx",
"transaction_type":"00",
"Cc_number":"xxxxxxxxxxxx0026",
"amount":"10.00",
"cc_expiry":"1225",
"cardholder_name":"John Doe",
"address": {
"address1":"12115 LACKLAND",
"address2":"",
"city":"St Louis",
"state":"MO",
"zip":"63146",
"country_code":"US",
"phone_number":"1234567890",
"phone_type":"H"
},
"soft_descriptor":{
"dba_name":"MSC*EXACTSOFT",
"pfac_name":"microexact",
"street":"12115 LACKLAND",
"city":"855-448-3493",
"region":"MO",
"postal_code":"63146",
"country_code":"US",
"mid":"",
"mcc":"456",
"merchant_contact_info":"contactus@welovesoftware.com",
"pfac_submerchant_id":"abcdefg1234567890",
"mvv_maid":"0123456789"
}
}
Sample Legacy PFac Transaction JSON Response
{"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal","bank_resp_code":"100","bank_message":"Approved","sequence_no":"0056286","avs":"Y","retrieval_ref_no":"170324","merchant_name":"PFAC Terminal Settlement Name","merchant_province":"Alabama","merchant_country":"United States","ctr":"========== TRANSACTION RECORD ==========\nPFAC Terminal Settlement Name\n\n, AL\nUnited States\n\n\nTYPE: Purchase\n\nACCT: Visa $ 10.60 USD\n\nCARDHOLDER NAME : John Doe\nCARD NUMBER : ############0026\nDATE/TIME : 24 Mar 17 11:45:41\nREFERENCE # : 001 0056286 M\nAUTHOR. # : 402570\nTRANS. REF. : \n\n Approved - Thank You 100\n\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================","gateway_id":"xxxxxx-xx","transaction_type":"00","amount":10.6,"cc_number":"############0026","transaction_tag":xxxxxxx,"authorization_num":"xxxxxx","cc_expiry":"1225","cardholder_name":"John Doe","cvd_presence_ind":0,"cavv_algorithm":"microexact","currency_code":"USD","partial_redemption":0,"credit_card_type":"Visa","soft_descriptor":{"dba_name":"MSC*EXACTSOFT","street":"12115 LACKLAND","city":"855-448-3493","region":"MO","postal_code":"63146","country_code":"US","mcc":"456","merchant_contact_info":"contactus@welovesoftware.com","mvv_maid":"0123456789","pfac_submerchant_id":"abcdefg1234567890","pfac_name":"microexact"},"address":{"address1":"12115 LACKLAND","city":"St Louis","state":"MO","zip":"63146","country_code":"US","phone_number":"1234567890","phone_type":"H"}}
3.11 Masterpass
API transactions for MasterPass are supported by API v24 and above.
Please ensure to read section 3.9 Wallet Provider ID. If a digital wallet was used during a transaction, then the Wallet Provider ID must be specified.
Field Name |
Data Type |
Description |
master_pass |
Not applicable |
Parent of the properties listed below. Note: to use any of the properties listed below, this property must be used as their parent. |
transaction_id |
Numeric |
Transaction identifier |
wallet_id |
Numeric |
Valid Values: 101 = Masterpass Remote 102 = Masterpass Remote NFC (Other values will be issued by Mastercard in the future).
|
indicator |
String |
Valid Values: N - Non-SecureCode U - UCAF S - Static AAV A - Mastercard risk-based-decisioning I - Issuer risk-based-decisioning M - Merchant risk-based-decisioning Space - not applicable |
Sample Masterpass Transaction JSON Request
{
"gateway_id": "P08976-86",
"password": "some_password",
"cc_number": "4012000033330026",
"transaction_type": "00",
"cardholder_name": "MP test",
"cc_expiry": "1023",
"amount": "10.00",
"reference_no": "R1111",
"customer_ref": "CR444",
"email_address": "test@masterpass.com",
"wallet_provider_id": "3",
"master_pass": {
"transaction_id": "3752301070040561792",
"wallet_id": "101",
"indicator": "N"
}
}
Sample Masterpass Transaction JSON Response
{
"transaction_error":0,
"transaction_approved":1,
"exact_resp_code":"00",
"exact_message":"Transaction Normal",
"bank_resp_code":"100",
"bank_message":"Approved",
"bank_resp_code_2":"01",
"sequence_no":"0612189",
"retrieval_ref_no":"170314",
"merchant_name":"MP test",
"merchant_address":"56 Quete St",
"merchant_city":"Vancouver",
"merchant_province":"British Columbia",
"merchant_country":"Canada",
"merchant_postal":"V7L 4M8",
"ctr":"========== TRANSACTION RECORD ==========\nMP test\n56 Quete St\nVancouver, BC V7L 4M8\nCanada\n\n\nTYPE: Purchase\n\nACCT: Visa $ 10.00 USD\n\nCARDHOLDER NAME : MP test\nCARD NUMBER : ############0026\nDATE/TIME : 14 Mar 17 12:48:33\nREFERENCE # : 005 0612189 M\nAUTHOR. # : ET4835\nTRANS. REF. : R1111\n\n Approved - Thank You 100\n\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================",
"gateway_id":"P08976-86",
"transaction_type":"00",
"amount":10.0,
"cc_number":"############0026",
"transaction_tag":2520646,
"authorization_num":"ET4835",
"cc_expiry":"1023",
"cardholder_name":"MP test",
"cvd_presence_ind":0,
"reference_no":"R1111",
"customer_ref":"CR444",
"currency_code":"USD",
"partial_redemption":0,
"credit_card_type":"Visa",
"master_pass":{
"transaction_id":"3752301070040561792",
"wallet_id":"101",
"indicator":"N"
}
}
3.12 Timeout Reversal
Timeout reversal functionality is available on v19. Timeout reversal allows for the inclusion of a unique identifier on transaction types that are eligible for a Tagged Void (00, 01, 32, and 34). If a timeout occurs, the unique id can be utilized in an attempt to reverse the original transaction.
To utilize the timeout reversal functionality, the correlation_id field should be included on all transaction types mentioned above. It is suggested that a GUID or UUID be used for the correlation_id value. In the event of a transaction timeout, a Tagged Void (33) transaction type can be executed with a modified payload, removing the requirements for the authorization number and transaction tag values and in their place including the correlation_id value presented on the original transaction. The original amount of the transaction is also required.
Sample Authorization Payload (JSON)
{
"amount": 1.1,
"cardholder_name": "Tester CorrID",
"cc_expiry": "0419",
"cc_number": "XXXX XXXX XXXX XXXX ",
"gateway_id": "XXXXXX",
"password": "XXXXXX",
"transaction_type": "00",
"correlation_id": "8bbecc96-08e4-49fe-96f9-a65171bfc752"
}
Sample Timeout Reversal Payload (JSON)
{
"amount": 1.1,
"gateway_id": "xxxxx",
"password": "xxxxx",
"transaction_type": "33",
"correlation_id": "8bbecc96-08e4-49fe-96f9-a65171bfc752"
}
Failure to pass a unique correlation_id will result in ETG Code 88 – “Invalid Correlation ID” being returned.
If the transaction has been previously reversed, a response code of 69 – “Invalid Transaction Tag” will be returned.
If the amount is missing or does not match, or the original transaction was never executed, you will receive a 404 response with a “No transaction found for correlation_id” message in the body.
Timeout reversals should be executed immediately following a timeout.
3.13 Stored Credentials (also known as Credentials-on-File)
The purpose of this feature is to identify the card on file/stored credentials transaction type. It is available via API v28 and higher. The feature is supported for Visa, Mastercard, Discover, and Amex.
For Mastercard transactions, these credentials must be sent for non-Canadian merchants only; data fields are ignored if sent for Canadian merchants (in this case the transaction will be processed as a regular credit card transaction and the API fields for Stored Credentials won't be returned in the API response).
Stored Credentials API fields are optional. However, if the Stored Credentials fields are submitted, they must be populated with valid values. Otherwise, the transaction may be rejected or processed as a regular credit card transaction.
Please note: if the transaction is approved, but the fields for Stored Credentials are not returned back in the API response, then the transaction is not processed as Stored Credentials. The reason: the API request with regards to Stored Credentials was not structured properly (e.g., typo in the field name) and hence these fields were dropped.
Please refer to the table below for the list of allowed values
(This table is applicable for Visa, Mastercard, and Discover. See a separate section for American Express)
Field Name. JSON (XML) |
Allowed Values and Comments |
stored_credentials (StoredCredentials) |
A nesting object. The API fields of Stored Credentials are nested under this object |
indicator |
For Visa and Discover: For Mastercard: merchants should send "S" in the Stored Credential Indicator. Merchants do not need to separately identify first and subsequent transactions. |
initiation (Initiation) |
"M" = Merchant Initiated "C" = Cardholder Initiated |
schedule (Schedule) |
"U" = Unscheduled "S" = Scheduled |
authorization_type_override |
For Visa only |
transaction_id |
Used only for Visa and Discover
|
original_amount |
Used only for Discover "original_amount" is returned via the API response and must be used in the subsequent transactions. Without it a subsequent transaction may be rejected with Bank Response Code 225 (Invalid Field Data). |
protectbuy_indicator |
Used only for Discover |
Stored Credentials for American Express
The usage of Stored Credentials for American Express is different from other card brands. For American Express the e-commerce flag defines if the transaction is Stored Credentials type or not. “stored_credentials” field shouldn’t be used for American Express transactions.
E-commerce flag is an API field: “ecommerce_flag” (JSON) and “Ecommerce_Flag” (SOAP/XML)
Available “ecommerce_flag” values for AMEX Stored Credentials |
Details |
Send “ecommerce_flag”:”2” for payments scheduled at regular frequency |
Used for regular recurring transactions, such as periodic billings. The billing amount can vary but the frequency is scheduled.
|
Send “ecommerce_flag”:”X” for Re-authorize Transactions. |
Designates a non-recurring re-authorize scenario e.g., standing approval, card on file, or split shipment transaction.
|
Sample API request in JSON format (Visa card)
{
"cc_number": "4111111111111111",
"cc_expiry": "0418",
"cardholder_name": "Simon Jones",
"gateway_id": "AD0123-01",
"password": "sample_password",
"transaction_type": "00",
"amount": 12,
"stored_credentials": {
"indicator": "1",
"initiation": "M",
"schedule": "S",
"transaction_id”: ”new”
}
}
Sample Response in JSON format (Visa card)
{
"transaction_error": 0,
"transaction_approved": 1,
"exact_resp_code": "00",
"exact_message": "Transaction Normal",
"bank_resp_code": "100",
"bank_message": "Approved",
"sequence_no": "Replaced sequence_no",
"cvv2": "Replaced cvv2",
"retrieval_ref_no": "Replaced retrieval_ref_no",
"merchant_name": "Settlement - API Testing (Generic) 001",
"merchant_address": "1 API CAD Terminal Way",
"merchant_city": "Toronto",
"merchant_province": "Ontario",
"merchant_country": "Canada",
"merchant_postal": "M4B 1B3",
"merchant_url": "Replaced merchant_url",
"ctr": "========== TRANSACTION RECORD ==========\nSettlement - API Testing (Generic) 001\n1 API CAD Terminal Way\nToronto, ON M4B 1B3\nCanada\n\n\nTYPE: Purchase\n\nACCT: Visa $ 12.00 USD\n\nCARDHOLDER NAME : Simon Jones\nCARD NUMBER : ############1111\nDate/Time : REPLACED_DATE_TIME\nREFERENCE : REPLACED_REFERENCE_NNOO\nAUTHOR. : REPLACED_AUTHORICE_NNOO\nTRANS. REF. : REPLACED_TRANS. REF.\n\n Approved - Thank You 100\n\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================",
"gateway_id": "Replaced gateway_id",
"transaction_type": "00",
"amount": 12.0,
"cc_number": "############1111",
"transaction_tag": "Replaced transaction_tag",
"authorization_num": "Replaced authorization_num",
"cc_expiry": "Replaced cc_expiry",
"cardholder_name": "Simon Jones",
"cvd_presence_ind": 0,
"currency_code": "USD",
"partial_redemption": 0,
"credit_card_type": "Visa",
"stored_credentials": {
"indicator": "1",
"initiation": "M",
"schedule": "S",
“transaction_id”: ”098765432154321”
},
"cavv_response": "Replaced cavv_response",
"client_ip": "Replaced client_ip",
"bank_resp_code_2": "Replaced bank_resp_code_2",
"reference_no": "Replaced reference_no"
}
Sample API request in JSON format (American Express card)
example of a recurring transaction
{
"cc_number": "340000000000009",
"cc_expiry": "0920",
"cardholder_name": "Simon Jones",
"ecommerce_flag": "2",
"gateway_id": "AB0123-01",
"password": "sample_password",
"transaction_type": "00",
"amount": "20.00",
}
Sample Response in JSON format (American Express card)
{"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal","bank_resp_code":"100","bank_message":"Approved","sequence_no":"0619824","retrieval_ref_no":"190715","merchant_name":"some name","merchant_address":"675 main st.","merchant_city":"los angelese","merchant_province":"California","merchant_country":"United States","merchant_postal":"87664","merchant_url":"https://payeezy.com","ctr":"========== TRANSACTION RECORD ==========\\njhgkjh\\n675 main st.\\nlos angelese, CA 87664\\nUnited States\\nhttps://payeezy.com\\n\\nTYPE: Purchase\\n\\nACCT: American Express $ 20.00 USD\\n\\nCARDHOLDER NAME :Simon Jones\\nCARD NUMBER : ###########0009\\nDATE/TIME : 15 Jul 19 17:44:21\\nREFERENCE # : 002 0619824 M\\nAUTHOR. # : 200316\\nTRANS. REF. : \\n\\n Approved - Thank You 100\\n\\n\\nPlease retain this copy for your records.\\n\\nCardholder will pay above amount to\\ncard issuer pursuant to cardholder\\nagreement.\\n========================================","gateway_id":"AB0123-01",
"transaction_type":"00","amount":20.0,"cc_number":"###########0009","transaction_tag":4301233334,"authorization_num":"200316","cc_expiry":"0920","cardholder_name":"Simon Jones",
"cvd_presence_ind":0,"ecommerce_flag":"2","currency_code":"USD","partial_redemption":0,"credit_card_type":"American Express"}
3.14 Visa Non Original Credit Account Funding
Transaction (NON-OCT AFT)
Visa Non-OCT (Original Credit Transactions) enable the movement of funds to a Visa card account. Merchants or vendors that use Visa Non-OCT can facilitate services such as money transfers, government & merchant disbursements, etc. This program offerings require special client vetting, a separate merchant identifier (Division Number), and client contracts prior to beginning processing. Merchants or vendors performing money transfers must be state licensed Money Services Business (MSBs).
The supported card brand is Visa only.
Supported API version
API version should be v29 or above.
A new top-level API field is introduced to pass Visa NON-OCT AFT Transfer Type values:
● aft_transfer_type (JSON)
● AFTTransferType (XML/SOAP)
Valid NON-OCT AFT Transfer Type Values |
Business meaning |
Cross-Border Restriction |
Valid Terminal MCC |
AA |
Account to Account |
No cross-border transfers. Merchant and Issuer must be in the same country. |
4829, 6012 |
BI |
Person-to-Person, Bank Initiated |
No cross-border transfers. Merchant and Issuer must be in the same country. |
6012 |
PP |
Person-to-Person |
No cross-border transfers. Merchant and Issuer must be in the same country. |
4829, 6012 |
TU |
Top-up for enhanced prepaid loads |
No cross-border transfers, except USA/Canada. Merchant and Issuer must be in the same country. |
6012, 6051, 6540 |
WT |
Wallet Transfer |
No restriction |
4829, 6051, 7995 |
NON-OCT AFT Transfer Type will be shown in Transaction Details:
Submission of Merchant Category Code (MCC)
Please ensure that First Data sets up the processing terminal with the MCC code appropriate
for your merchant category. Alternatively, it is also possible to submit the MCC code via Soft
Descriptors (Please refer to API spec section “ Soft Descriptor Properties ”).
If the NON-OCT AFT Transfer Type value is not one of the permitted MCC code for a terminal,
then the transaction will be rejected with Bank Response Code ` 249 Invalid MCC `
Bank Response code will be shown in Transaction Details:
Transactions with wrong aft_transfer_type or with non-Visa card brand will be processed as
regular credit card transactions. However, submitting an AFT Transfer Type with more than 2
characters will result in an error response of “Bad Request (07) - Invalid Attribute
(aft_transfer_type).” When submitting an AFT Transfer Type for a non-Visa card type, it will be
ignored, but returned in the response.
Visa NON-OCT AFT API request example
{
"gateway_id":"XXXX",
"password":"XXXXXX",
"transaction_type":"00",
"amount":"110.12",
"cardholder_name":"Jon Sample",
"cc_number":"XXXXXXX",
"cc_expiry":"XXXX",
"aft_transfer_type":"AA",
}
Visa NON-OCT AFT API response example
{"transaction_error":0,
"Transaction_approved":1,
"Exact_resp_code":"00",
"exact_message":"Transaction Normal",
"Bank_resp_code":"100",
"bank_message":"Approved",
"Sequence_no":"0176417",
"Retrieval_ref_no":"190322",
"merchant_name":"FDT Terminal ACTIVE Shop",
"merchant_province":"Alabama",
"merchant_country":"United States",
"Merchant_postal":"90210",
"ctr":"========== TRANSACTION RECORD ==========\nFDT Terminal ACTIVE Shop\n\n,
AL 90210\nUnited States\n\n\nTYPE: Purchase\n\nACCT: Visa $ 110.12
USD\n\nCARDHOLDER NAME : Jon Sample\nCARD NUMBER :
############0018\nDATE/TIME : 22 Mar 19 12:36:40\nREFERENCE # : 001 0176417
M\nAUTHOR. # : 121450\nTRANS. REF. : \n\n Approved - Thank You 100\n\n\nPlease
retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant
to cardholder\nagreement.\n========================================",
"gateway_id":"K02131-65",
"Transaction_type":"00",
"Amount":110.12,
"cc_number":"############0018",
"Transaction_tag":2200900311,
"Authorization_num":"121450",
"Cc_expiry":"1225",
"cardholder_name":"Jon Sample",
"Cvd_presence_ind":0,
"currency_code":"USD",
"Partial_redemption":0,
"credit_card_type":"Visa",
"aft_transfer_type":"AA" }
3.15 3DS version 2
Mastercard is enhancing the Mastercard Identity Check™ and Accountholder Authentication Value (AAV) verification services as part of the EMV™ 3-D secure authentication protocol for e-commerce transactions. By providing the new 3DS v2 info, Mastercard will help issuers to associate a Mastercard Identity Check™ transaction with its subsequent authorization. (EMV refers to EMV Co., the standards organization, not chip-based acquiring)
Presently the feature is limited to Mastercard’s new implementation of 3D Secure version 2.
Please use API v30 or later for this feature.
The info must be provided by those merchants who are participating in the Mastercard Identity Check™ (SecureCode) program when the Program Protocol and Transaction ID values are returned by the plug-ins. These fields are pass-through from First Data perspective, and the merchants need to coordinate with their merchant plug-in (MPI) to receive the Directory Server Transaction ID.
Please note that the AAV (Accountholder Authentication Value) must be provided as part of the API request (using the “cavv” API field).
API field name |
Purpose |
Valid values |
“three_d_secure_program_protocol” |
Determines the 3D Secure protocol version to use. Can be either “1” or “2”. |
1 = 3D Secure version 1 2 = 3D Secure version 2 If any value other than |
“three_d_secure_directory_server_transaction_id” |
This is a universally unique Transaction ID that the merchant should provide to Payeezy Gateway. |
Example: f38e6948-5388-41a6-bca4-b49723c19437 |
“cavv” |
3-D Secure value returned by Plug-in software application. |
Example of API request (JSON). Mastercard 3D Secure version 2 transaction.
{
“gateway_id”: "XXXXXXX-XX",
“transaction_type”: "00",
“amount”: "120.25",
“cc_number”: "XXXXXXXXXXXXXXXX",
“cc_expiry”: "0619",
“cardholder_name”: "Simon Jones",
“three_d_secure_program_protocol”: "2",
“three_d_secure_directory_server_transaction_id”: "XXXXXXXXX",
“cavv”: “XXXXXXXXX”
}
Example of API response (JSON). Mastercard 3D Secure version 2 transaction.
{
"transaction_error": 0,
"transaction_approved": 1,
"exact_resp_code": "00",
"exact_message": "Transaction Normal",
"bank_resp_code": "100",
"bank_message": "Approved",
"sequence_no": "Replaced sequence_no",
"retrieval_ref_no": "Replaced retrieval_ref_no",
"merchant_name": "Settlement - API Testing (Generic) 001",
"merchant_address": "1 API CAD Terminal Way",
"merchant_city": "Toronto",
"merchant_province": "Ontario",
"merchant_country": "Canada",
"merchant_postal": "M4B 1B3",
"merchant_url": "Replaced merchant_url",
"ctr": "========== TRANSACTION RECORD ==========\nSettlement - API Testing (Generic) 001\n1 API CAD Terminal Way\nToronto, ON M4B 1B3\nCanada\n\n\nTYPE: Purchase\n\nACCT: Mastercard $ 120.25 USD\n\nCARDHOLDER NAME : Simon Jones\nCARD NUMBER : ############5454 \nDate/Time : REPLACED_DATE_TIME\nREFERENCE : REPLACED_REFERENCE_NNOO\nAUTHOR. : REPLACED_AUTHORICE_NNOO\nTRANS. REF. : REPLACED_TRANS. REF.\n\n Approved - Thank You 100\n\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================",
"gateway_id": "XXXXXXX",
"transaction_type": "00",
"amount": 120.25,
"cc_number": "############5454",
"transaction_tag": "Replaced transaction_tag",
"authorization_num": "Replaced authorization_num",
"cc_expiry": "Replaced cc_expiry",
"cardholder_name": "Simon Jones",
"cvd_presence_ind": 0,
"cavv": "XXXXXXXXXXXX",
"currency_code": "USD",
"partial_redemption": 0,
"credit_card_type": "Mastercard",
"three_d_secure_program_protocol": "2",
"three_d_secure_directory_server_transaction_id": "XXXXXXX",
"cavv_response": "Replaced cavv_response",
"transarmor_token": "Replaced transarmor_token",
"client_ip": "Replaced client_ip",
"bank_resp_code_2": "Replaced bank_resp_code_2",
"reference_no": "Replaced reference_no"
}
3.16 Business Application Indicator (BAI)
The feature is supported for PGW API version 31 and up.
Please note: this feature is not compatible with Transarmor
New field 'ba_indicator' (JSON) nested under the 'extra' object.
(<BaIndicator> in XML/SOAP format)
The API transaction will be processed as a BAI transaction under the following conditions:
- 'ba_indicator' must be sent as 'CB' (upper case)
- 'aft_transfer_type' field must be blank or not sent.
- terminal is enabled for BAI (via RPM)
- card used must be VISA
- one of the following transaction types : purchase, pre-authorization, tagged completion (tagged completion will be processed as BAI even if the ba_indicator is not sent, if the original transaction was processed as BAI)
If the API transaction was processed as a BAI transaction, the possible values for 'ba_indicator' in the response are :
- if the transaction is approved : "Approved"
- if the transaction is declined : "Declined"
- if the transaction received an error (ETG) : "Not processed"
Please ensure to check the 'ba_indicator' value in the response to ensure that the transaction is processed as BAI transaction.
API request example (JSON)
{
"transaction_type" : "00",
"cardholder_name" : "Simon Jones",
"cc_number"" : "4111111111111111",
"cc_expiry" : "0922",
"amount" : "20.00",
"extra": {
"ba_indicator":"CB" //please note the upper case for CB
}
}
API response example (JSON)
{
"transaction_error":0,
"transaction_approved":1,
"exact_resp_code":"00",
"exact_message":"Transaction Normal",
"bank_resp_code":"100",
"bank_message":"Approved",
"sequence_no":"000007",
"cvv2":"I",
"retrieval_ref_no":"210521",
"merchant_name":"Testing merchant",
"merchant_address":"3393 Peachtree Road NE",
"merchant_city":"Atlanta",
"merchant_province":"Georgia",
"merchant_country":"United States",
"merchant_postal":"30342",
"merchant_url":"http://www.firstdata-demo-account.com",
"ctr":"========== TRANSACTION RECORD ==========\\nTesting merchant\\n3393 Peachtree Road NE\\nAtlanta, GA 30342\\nUnited States\\nhttp://www.firstdata-demo-account.com\\n\\nTYPE: Purchase\\n\\nACCT: Visa $ 20.00 CAD\\n\\nCARDHOLDER NAME : Simon Jones\\nCARD NUMBER : ############1111\\nDATE/TIME : 21 May 21 21:01:50\\nREFERENCE # : 002 000007 M\\nAUTHOR. # : ET171722\\nTRANS. REF. : \\n\\n Approved - Thank You 100\\n\\nSIGNATURE\\n\\n\\n\\n\\n----------------------------------------\\n\\nPlease retain this copy for your records.\\n\\nCardholder will pay above amount to\\ncard issuer pursuant to cardholder\\nagreement.\\n========================================",
"gateway_id":"XXXXXXXXX",
"transaction_type":"00",
"amount":20.0,
"cc_number":"############1111",
"transaction_tag":2147484394,
"authorization_num":"ET171722",
"cc_expiry":"0922",
"cardholder_name":"Simon Jones",
"cvd_presence_ind":0,
"currency_code":"CAD",
"partial_redemption":0,
"credit_card_type":"Visa",
"extra": {
"ba_indicator":"Approved"
}
}
3.17 Foreign Access Code (FAC)
Non-ValueLink gift cards that use Foreign Access.
Prior to usage, please confirm with your merchant support manager that your terminal is properly setup to accept non-ValueLink gift cards.
This feature works with API v32 and above.
For general review of the Payeezy Gateway API spec and gift card feature, please follow the URL:
https://support.payeezy.com/hc/en-us/articles/206601408
The processing for FAC cards is similar to regular gift cards (the above URL), but a Foreign Access Code needs to be provided for each transaction.
A new field is added:
foreign_access_code (JSON format)
<ForeignAccessCode> (XML format)
Please note that "foreign_access_code" should be used inside the object "Extra"
Example:
(JSON format)
"extra" {
"foreign_access_code" : "1234"
}
(XML format)
<Extra>
<Field>ForeignAccessCode</Field>
<Value>12345</Value>
</Extra>
FAC API examples are given in the XML format. However, JSON and SOAP can be used as well. For more examples on how to use the API, please refer to https://support.payeezy.com/hc/en-us/articles/206601408
Activation API Request example (XML format):
<?xml version="1.0" encoding="UTF-8"?>
<Transaction>
<ExactID>xxxx</ExactID>
<Password>xxxx</Password>
<DollarAmount>100.00</DollarAmount>
<Transaction_Type>85</Transaction_Type>
<CardHoldersName>William Ferguson</CardHoldersName>
<CardType>gift</CardType>
<Card_Number>XXXXXXXXXXXXXX</Card_Number>
<CardCost>100.00</CardCost>
<Extra>
<Field>ForeignAccessCode</Field>
<Value>XXXX</Value>
</Extra>
</Transaction>
Activation API Response example (XML format):
<TransactionResult>
<ExactID>XXXXXXXXX</ExactID>
<Password/>
<Transaction_Type>85</Transaction_Type>
<DollarAmount>100.0</DollarAmount>
<SurchargeAmount/>
<Card_Number>############7609</Card_Number>
<Transaction_Tag>5000146805</Transaction_Tag>
<SplitTenderID/>
<Track1/>
<Track2/>
<PAN/>
<Authorization_Num>VL0049</Authorization_Num>
<Expiry_Date/>
<CardHoldersName>William Ferguson</CardHoldersName>
<CVD_Presence_Ind>0</CVD_Presence_Ind>
<ZipCode/>
<Tax1Amount/>
<Tax1Number/>
<Tax2Amount/>
<Tax2Number/>
<Secure_AuthRequired/>
<Secure_AuthResult/>
<Ecommerce_Flag/>
<XID/>
<CAVV/>
<Reference_No/>
<Customer_Ref/>
<Reference_3/>
<Language/>
<Client_IP/>
<Client_Email/>
<User_Name/>
<Transaction_Error>false</Transaction_Error>
<Transaction_Approved>true</Transaction_Approved>
<EXact_Resp_Code>00</EXact_Resp_Code>
<EXact_Message>Transaction Normal</EXact_Message>
<Bank_Resp_Code>100</Bank_Resp_Code>
<Bank_Message>Approved</Bank_Message>
<Bank_Resp_Code_2/>
<SequenceNo>0354069</SequenceNo>
<AVS/>
<CVV2/>
<Retrieval_Ref_No>201008</Retrieval_Ref_No>
<CAVV_Response/>
<Currency>USD</Currency>
<AmountRequested>100.0</AmountRequested>
<PartialRedemption>false</PartialRedemption>
<MerchantName>Amazing Dreams</MerchantName>
<MerchantAddress/>
<MerchantCity/>
<MerchantProvince>Alabama</MerchantProvince>
<MerchantCountry>United States</MerchantCountry>
<MerchantPostal/>
<MerchantURL/>
<TransarmorToken/>
<CardType>Gift Card</CardType>
<CurrentBalance>100.0</CurrentBalance>
<PreviousBalance>0.0</PreviousBalance>
<EAN/>
<CardCost>100.0</CardCost>
<VirtualCard>false</VirtualCard>
<CTR>========== TRANSACTION RECORD ==========
Amazing Dreams
, AL
United States
TYPE: Activate Card
ACCT: Gift Card $ 100.00 USD
($ 100.00 USD was requested)
CARDHOLDER NAME : William Ferguson
CARD NUMBER : ############7609
DATE/TIME : 08 Oct 20 13:09:59
REFERENCE # : 001 0354069 M
AUTHOR. # : VL0049
TRANS. REF. :
Approved - Thank You 100
Please retain this copy for your records.
Cardholder will pay above amount to
card issuer pursuant to cardholder
agreement.
========================================</CTR>
<FraudSuspected/>
<CVDCode/>
<SplitShipmentNumber/>
<ValueLinkAuthCode>904753</ValueLinkAuthCode>
<LocalCurrencyCode>840</LocalCurrencyCode>
<Extra>
<Field>ForeignAccessCode</Field>
<Value>####</Value>
</Extra>
<ThreeDSecureProgramProtocol/>
<ThreeDSecureDirectoryServerTransactionId/>
</TransactionResult>
Purchase API Request example (XML format):
<?xml version="1.0" encoding="UTF-8"?>
<Transaction>
<ExactID>xxxxx</ExactID>
<Password>xxxxx</Password>
<DollarAmount>25.00</DollarAmount>
<Transaction_Type>00</Transaction_Type>
<CardHoldersName>William Ferguson</CardHoldersName>
<CardType>gift</CardType>
<Card_Number>XXXXXXXX</Card_Number>
<Extra>
<Field>ForeignAccessCode</Field>
<Value>4307</Value>
</Extra>
</Transaction>
Purchase API Response example (XML format)
<?xml version="1.0" encoding="UTF-8"?>
<TransactionResult>
<ExactID>O02677-40</ExactID>
<Password/>
<Transaction_Type>00</Transaction_Type>
<DollarAmount>25.0</DollarAmount>
<SurchargeAmount/>
<Card_Number>############7609</Card_Number>
<Transaction_Tag>5000146806</Transaction_Tag>
<SplitTenderID/>
<Track1/>
<Track2/>
<PAN/>
<Authorization_Num>VL1686</Authorization_Num>
<Expiry_Date/>
<CardHoldersName>William Ferguson</CardHoldersName>
<CVD_Presence_Ind>0</CVD_Presence_Ind>
<ZipCode/>
<Tax1Amount/>
<Tax1Number/>
<Tax2Amount/>
<Tax2Number/>
<Secure_AuthRequired/>
<Secure_AuthResult/>
<Ecommerce_Flag/>
<XID/>
<CAVV/>
<Reference_No/>
<Customer_Ref/>
<Reference_3/>
<Language/>
<Client_IP/>
<Client_Email/>
<User_Name/>
<Transaction_Error>false</Transaction_Error>
<Transaction_Approved>true</Transaction_Approved>
<EXact_Resp_Code>00</EXact_Resp_Code>
<EXact_Message>Transaction Normal</EXact_Message>
<Bank_Resp_Code>100</Bank_Resp_Code>
<Bank_Message>Approved</Bank_Message>
<Bank_Resp_Code_2/>
<SequenceNo>0372932</SequenceNo>
<AVS/>
<CVV2/>
<Retrieval_Ref_No/>
<CAVV_Response/>
<Currency>USD</Currency>
<AmountRequested/>
<PartialRedemption>false</PartialRedemption>
<MerchantName>Amazing Dreams</MerchantName>
<MerchantAddress/>
<MerchantCity/>
<MerchantProvince>Alabama</MerchantProvince>
<MerchantCountry>United States</MerchantCountry>
<MerchantPostal/>
<MerchantURL/>
<TransarmorToken/>
<CardType>Gift Card</CardType>
<CurrentBalance>75.0</CurrentBalance>
<PreviousBalance>100.0</PreviousBalance>
<EAN/>
<CardCost/>
<VirtualCard>false</VirtualCard>
<CTR>========== TRANSACTION RECORD ==========
Amazing Dreams
, AL
United States
TYPE: Purchase
ACCT: Gift Card $ 25.00 USD
CARDHOLDER NAME : William Ferguson
CARD NUMBER : ############7609
DATE/TIME : 08 Oct 20 13:13:16
REFERENCE # : 001 0372932 M
AUTHOR. # : VL1686
TRANS. REF. :
Approved - Thank You 100
Please retain this copy for your records.
Cardholder will pay above amount to
card issuer pursuant to cardholder
agreement.
========================================</CTR>
<FraudSuspected/>
<CVDCode/>
<SplitShipmentNumber/>
<ValueLinkAuthCode>637699</ValueLinkAuthCode>
<LocalCurrencyCode>840</LocalCurrencyCode>
<Extra>
<Field>ForeignAccessCode</Field>
<Value>####</Value>
</Extra>
<ThreeDSecureProgramProtocol/>
<ThreeDSecureDirectoryServerTransactionId/>
</TransactionResult>
4 Request Properties
Only some of the following properties are required, depending on the processing scenario being used. Refer to the Processing Scenarios section for more information on which properties are required for each particular scenario. The value for a property should be a string conforming to the data type (i.e. Null, String, Integer etc.) indicated below. Note that a small number of the parameters have different names when using the JSON format.
Character Encoding: Incoming parameters must be encoded in UTF-8 to ensure correct text display and processing. Using other encoding may result in rejected transactions.
Property |
Description |
ExactID
gateway_id (JSON format)
|
Identifies the location/terminal that is sending the transaction. This number is of the format Axxxxx-xx and is provided by First Data upon set-up. The ExactID must be accompanied by a password. |
Password
password (JSON format)
|
Minimum 8 digit alphanumeric password that is uniquely associated with each ExactID. This value must be kept as secure (and secret) as possible. |
Transaction_Type
transaction_type (JSON format) |
Populated with a two-digit string indicator. The indicator identifies the transaction type. Descriptions of these transaction types can be found here. Supported values include:
|
DollarAmount
amount (JSON format)
|
For information on the highest dollar amounts allowed within Payeezy Gateway, please click here. |
Card_Number
cc_number (JSON format)
|
The customer’s credit card number. Not used for tagged transaction types. |
Transaction_Tag
transaction_tag (JSON format)
|
A unique identifier to associate with a tagged transaction. Only for tagged transaction types. |
Track1
track1 (JSON format)
|
Populated with the unmodified track 1 data swiped from a valid credit card. Start and end sentinels should not be included. Only for swiped transactions. |
Track2
track2 (JSON format)
|
Populated with the unmodified track 2 data swiped from a valid credit card. Start and end sentinels should not be included. Only for swiped transactions. |
Authorization_Num
authorization_num (JSON format)
|
This is the authorization number returned by the cardholder’s financial institution when a transaction has been approved. This value needs to be sent when sending various transaction types such as preauthorization completion, void, or tagged transaction. |
Expiry_Date
cc_expiry (JSON format)
|
The credit card expiry date in the format mmyy. Property for manually entering expiry date. If Track1 or Track2 is populated, there is no need to set this field. |
CardHoldersName
cardholder_name (JSON format)
|
The customer’s name. The following characters will be stripped from this field: ; ` " / % as well as -- (2 consecutive dashes). Required Character Format is ASCII. |
VerificationStr1
cc_verification_str1 (JSON format)
|
This string is populated with the cardholders address information in a specific format. The address is verified and a result is returned (AVS property) that indicates how well the address matched. VerificationStr1 is comprised of the following constituent address values: Street, Zip/Postal Code, City, State/Province, Country. They are separated by the Pipe Character "|". Street Address|Zip/Postal|City|State/Prov|Country Required Character Format is ASCII. Note: not supported after endpoint v13. Use the Address element from v14 onwards (see Section 4.1) |
VerificationStr2
cc_verification_str2 (JSON format)
|
This is the 0, 3, or 4-digit code on the back of the credit card sometimes called the CVV2 or CVD value. Note: not supported after endpoint v13. Use the CVDCode element below. |
CVDCode
cvd_code (JSON format)
|
This is the 0, 3, or 4-digit code on the back of the credit card sometimes called the CVV2 or CVD value. |
CVD_Presence_Ind
cvd_presence_ind (JSON format)
|
The number indicates how the CVV2 value should be handled when processing. The value must be either null or the integer 0, 1, 2, or 9. Note that null defaults to 0.
|
Reference_No
reference_no (JSON format)
|
A merchant defined value that can be used to internally identify the transaction. This value is passed through to the Payeezy Gateway unmodified, and may be searched in First Data Payeezy Gateway Real-time Payment Manager (RPM). It is not passed on to the financial institution. The following characters will be stripped from this field: ; ` " / % as well as -- (2 consecutive dashes). NOTE: For non-international transactions, DO NOT USE the following characters: pipe (|), caret (^), percent symbol (%), backslash (\), or forward slash (/). For international transactions DO NOT USE the following punctuation: caret (^), backslash (\), openbracket ([), closed bracket (]), tilde (~) or accent key (`). If used the transaction will reject for Response Reason Code 225 (Invalid field data) For two stage transactions (pre-auth/completion), the reference number utilized at the time of pre-authorization will be utilized at |
ZipCode
zip_code (JSON format)
|
Customer zip code used for qualifying transactions, only applicable to merchants passing level 2 (Corporate Credit Card - Level II) data. Payeezy Gateway supports Level II processing for Visa, MasterCard and American Express, and Level III processing for Visa and MasterCard. |
Tax1Amount
tax1_amount (JSON format)
|
Tax value included in total amount, only applicable to merchants passing level 2 (Corporate Credit Card - Level II) data. For Canadian merchants this field is the PST amount. Payeezy Gateway supports Level II processing for Visa, MasterCard and American Express, and Level III processing for Visa and MasterCard. |
Tax1Number
tax1_number (JSON format)
|
Registered number associated with the tax value. Used for reference or government claims purposes and only applicable to merchants passing level 2 (Corporate Credit Card - Level II) data. For Canadian merchants this field is the PST number. Payeezy Gateway supports Level II processing for Visa, MasterCard and American Express, and Level III processing for Visa and MasterCard. |
Tax2Amount
tax2_amount (JSON format)
|
Tax value included in total amount, only applicable to merchants passing level 2 (Corporate Credit Card - Level II) data. For Canadian merchants this field is the GST amount. Payeezy Gateway supports Level II processing for Visa, MasterCard and American Express, and Level III processing for Visa and MasterCard. |
Tax2Number
tax2_number (JSON format)
|
Registered number associated with the tax value. Used for reference or government claims purposes and only applicable to merchants passing level 2 (Corporate Credit Card - Level II) data. For Canadian merchants this field is the GST number. Payeezy Gateway supports Level II processing for Visa, MasterCard and American Express, and Level III processing for Visa and MasterCard. |
Customer_Ref
customer_ref (JSON format)
|
A merchant defined value that can be used to internally identify the transaction. This value is passed through to the Payeezy Gateway unmodified, and may be searched in First Data Payeezy Gateway Real-time Payment Manager (RPM). It is passed on to the financial institution. The following characters will be stripped from this field: ; ` " / % as well as -- (2 consecutive dashes). Required Character Format is ASCII. |
Reference_3
reference_3 (JSON format)
|
A merchant defined value that can be used to internally identify the transaction. This value is passed through to the Payeezy Gateway unmodified. It is not searchable and is not passed on to the financial institution. The following characters will be stripped from this field: ; ` " / % as well as -- (2 consecutive dashes). Also used to pass on the Foreign Access Code for ValueLink transactions. Required Character Format is ASCII. |
Language
language (JSON format)
|
Selects the language the CTR is to appear in. Supported Values:
|
Client_IP
client_ip (JSON format)
|
This is the IP address of the customer (i.e. client browser) connecting to the merchant. This value is stored for fraud investigation. It is not passed on to the financial institution. |
Client_Email
client_email (JSON format)
|
This is the email address of the customer connecting to the merchant. This value is stored for fraud investigation. It is not passed on to the financial institution. |
user_name
user_name (JSON format) |
This is the user_name of the user processing the transaction. This field is visible in the Real Time Payment manager as the "User ID" and defaults to "API-(ExactID)." |
Currency
currency_code (JSON format)
|
A currency code used for charging the transaction. Currencies and their values can be found here. |
PartialRedemption
partial_redemption (JSON format)
|
Submit true to allow partial redemptions, false otherwise. A partial redemption will be returned if only a portion of the requested funds are available. For example, if a transaction is submitted for $100, but only $80 is available on the customer's card, the $80 will be authorized or captured when this property is set to true. This property can be used for all types of pre-authorization and purchase transactions. Note: Partial Redemption field property is not applicable to ValueLink. |
CAVV
cavv (JSON format)
|
3-D Secure/Verified by Visa value returned by Cardinal Commerce |
XID
xid (JSON format)
|
3-D Secure/Verified by Visa value returned by Cardinal Commerce |
Ecommerce_Flag
ecommerce_flag (JSON format)
|
The value passed in this flag can be used to classify the type of payment being performed. Possible values are outlined here. |
TransarmorToken
transarmor_token (JSON format) |
Used to submit a Transarmor token for transaction processing rather than using a credit card number for processing. If using this property, CardType must also be populated. Note that when a terminal is set up with TransArmor, a value will be returned in this property each time a transaction is submitted using a regular card number. This property can only be used with the v9 or higher endpoint of the API. |
CardType
credit_card_type (JSON format) |
CardType value associated with a TransArmor token, PayPal transaction, or if submitting a ValueLink transaction, this property's value is required to be "Gift." Required for TransArmor transactions, PayPal transactions, and ValueLink transactions that submit a card number. Note that when a terminal is set up with TransArmor, a value will be returned in this property each time a transaction is submitted using a regular card number. Possible values include "American Express", "Visa", "Mastercard", "Discover", "Diners Club", "JCB", "Gift", "PayPal", "Debit" This property can only be used with the v9 or higher endpoint of the API. |
EAN
ean (JSON format)
|
ValueLink card verification value similar to CVV2 numbers on the back of credit cards. This can only be used for ValueLink transactions and is only available in the v9 or higher endpoint. |
VirtualCard
virtual_card (JSON format)
|
Flag used to indicate whether a ValueLink card is virtual or not. This can only be used for ValueLink transactions and is only available in the v9 or higher endpoint. |
CardCost
card_cost (JSON format)
|
Used for ValueLink activation transactions. This can only be used for ValueLink transactions and is only available in the v9 or higher endpoint. |
FraudSuspected
fraud_suspected (JSON format)
|
This property can only be used with the refund or void transaction types, and is only applicable to MasterCard transactions using the v12 or higher endpoints. When fraud is suspected for a MasterCard transaction, this property should be populated with a value of "200" when issuing the refund. |
CheckNumber
check_number (JSON format)
|
The check number being used to complete payment. This property is only applicable to the v13 or higher endpoint. |
CheckType
check_type (JSON format)
|
Allowed values for this field are "P" (personal check), or "C" (corporate check). This property is only applicable to the v13 or higher endpoint. |
BankAccountNumber
account_number (JSON format)
|
The bank account number of the check being used to complete payment. This property is only applicable to the v13 or higher endpoint. |
BankRoutingNumber
bank_id (JSON format)
|
The bank routing number of the check being used to complete payment. This property is only applicable to the v13 or higher endpoint. |
CustomerName
cardholder_name (JSON format)
|
The name of the customer making the payment. This property is only applicable to the v13 or higher endpoint. |
CustomerIDType
customer_id_type (JSON format)
|
The type of ID used to validate the identity of the check holder. Allowed values are:
|
CustomerID
customer_id_number (JSON format)
|
Number on the type of identification specified in the previous property. This property is only applicable to the v13 or higher endpoint. |
TPPID
tpp_id (JSON format) |
Third-Party Property ID, also known as Partner ID. If you are a Third-Party Processor, this can be used to include your ID when processing. This property is only applicable to the v14 endpoint. |
SplitTenderID
split_tender_id (JSON format) |
Split Tender ID. A partially-authorized transaction will generate a Split Tender ID. Subsequent transactions to complete the authorization should include the Split Tender ID so that all the transactions comprising that authorization can be linked. This property is only applicable to the v13 or higher endpoint. |
SplitShipmentNumber
split_shipment_number(JSON format)
|
SplitShipmentNumber String ("xx/yy") where: xx = number of the shipment Example: Shipment 2 of 5 => Split_Shipment = "02/05" <SplitShipmentNumber>02/05</SplitShipmentNumber> This property is only applicable to the v15 or higher endpoint.
Please Note: - Total Number of Shipments must match Shipment Number on final shipment. - Additionally, Split Shipment through the Omaha back-end is not supported. |
4.1 Address Properties
From the V14 endpoint onwards, the VerificationStr1 property has been replaced with the new compound Address element to allow greater flexibility in the specification of address information. It can be used to send AVS address information with credit transactions, or check address information with TeleCheck transactions.
Element lengths are softly enforced; that is, elements longer than the specified maximum are truncated to the maximum length before processing. This truncation may affect AVS validation, or any address-based Fraud Filters.
Property | Length | Format | Required/Optional | Description |
Address address (JSON format) |
Parent of the properties listed below. | |||
Address1 address1 (JSON format) |
30 | String | Optional | |
Address2 address2 (JSON format) |
28 | String | Optional | |
City city (JSON format) |
20 | String | Optional | |
State state (JSON format) |
2 | String | Optional | |
Zip zip (JSON format) |
10 | String | Optional | |
CountryCode country_code (JSON format) |
2 | String | Optional | |
PhoneNumber phone_number (JSON format) |
14 | String | Optional | Non digits will be removed before processing. When phone_number is used, phone_type must be provided. |
PhoneType phone_type (JSON format) |
1 | String | Optional |
Only the following values are accepted: H = Home W = Work D = Day N = Night PhoneType is required when the PhoneNumber field is populated in a transaction request. Otherwise, it is optional. |
The following is an example of a credit transaction including the Address element, using the REST format:
<?xml version="1.0" encoding="utf-8" ?> <Transaction> <ExactID>A1234-01</ExactID> <Password>12345pwd</Password> <Card_Number>5454545454545454</Card_Number> <CardHoldersName>ARTHUR DIGBY SELLERS</CardHoldersName> <Transaction_Type>00</Transaction_Type> <Expiry_Date>0915</Expiry_Date> <DollarAmount>168.67</DollarAmount> <Address> <Address1>21 Jump Street</Address1> <City>Los Angeles</City> <Zip>90210</Zip> <PhoneNumber>5557891234</PhoneNumber> <PhoneType>W</PhoneType> </Address> </Transaction>
The same example, this time in JSON format:
{ "gateway_id": "A1234-01", "password": "12345pwd", "cardholder_name": "ARTHUR DIGBY SELLERS", "cc_number": "5454545454545454", "cc_expiry": "0915", "transaction_type": "00", "amount": 168.67, "address" : { "address1": "21 Jump Street", "city": "Los Angeles", "zip": "90210", "phone_number": "5557891234", "phone_type": "W" } }
4.2 Level 2 Properties
tax1_amount (JSON)
|
Tax value included in total amount, only applicable to merchants passing level 2 (Corporate Credit Card - Level II) data. For Canadian merchants this field is the PST amount. Payeezy Gateway only supports Level II processing for Visa, MasterCard and American Express. It does not support American Express Level III processing. |
customer_ref (JSON)
|
A merchant defined value that can be used to internally identify the transaction. This value is passed through to the Payeezy Gateway unmodified, and may be searched in First Data Payeezy Gateway Real-time Payment Manager (RPM). It is passed on to the financial institution. The following characters will be stripped from this field: ; ` " / % as well as -- (2 consecutive dashes). Required Character Format is ASCII.
|
The following fields are deprecated |
|
tax1_number (JSON)
|
Registered number associated with the tax value. Used for reference or government claims purposes and only applicable to merchants passing level 2 (Corporate Credit Card - Level II) data. For Canadian merchants this field is the PST number. Payeezy Gateway only supports Level II processing for Visa, MasterCard and American Express. It does not support American Express Level III processing. |
tax2_amount (JSON)
|
Tax value included in total amount, only applicable to merchants passing level 2 (Corporate Credit Card - Level II) data. For Canadian merchants this field is the GST amount. Payeezy Gateway only supports Level II processing for Visa, MasterCard and American Express. It does not support American Express Level III processing. |
tax2_number (JSON)
|
Registered number associated with the tax value. Used for reference or government claims purposes and only applicable to merchants passing level 2 (Corporate Credit Card - Level II) data. For Canadian merchants this field is the GST number. Payeezy Gateway only supports Level II processing for Visa, MasterCard and American Express. It does not support American Express Level III processing. |
4.3 Level 3 Properties
The following properties are used to populate additional information about the transaction, including shipping details and line item
information. These properties are available for the v9 or higher endpoint of the API only.
NOTE: Although some of the properties are optional, refer to the table below to determine which fields must be populated to qualify for best Level 3 interchange rate.
Payeezy Gateway only supports Level III processing for Visa and MasterCard. It does not support American Express Level III processing.
For the following table, Format abbreviations are:
- A - Alphanumeric
- N - Numeric (0-9) allowing decimal (.)
- B - Boolean (0,1)
All alpha characters should be in capital letters unless otherwise specified.
Property |
Length |
Format |
Required/ Optional |
Description |
Level3 level3 (JSON format) |
Required |
Parent of the properties listed below. |
||
TaxAmount
tax_amount (JSON format) |
12 |
N |
Optional |
Tax amount in dollars and cents. Child property of Level 3. 2 decimal/right justified/zero filled or space filled, (20.00) Value should be >= $0.00 |
TaxRate
tax_rate (JSON format) |
4 |
N |
Optional |
Tax rate applied to the item 2 decimal/right justified/zero filled or space filled, (1.00 = 1%) |
AltTaxAmount
alt_tax_amount (JSON format) |
9 |
N |
Optional |
Total amount of alternate tax associated with this transaction. Note: If AltTaxAmount is populated, "AltTaxID” is required
|
AltTaxId
alt_tax_id (JSON format) |
14 |
A |
Optional |
Tax ID number for the alternate tax associated with this transaction. |
DiscountAmount
discount_amount (JSON format) |
12 |
N |
Required |
Amount of discount applied to the total transaction. 2 decimal/right justified/zero filled or space filled, (20.00) |
DutyAmount
duty_amount (JSON format) |
12 |
N |
Required |
Total charges for any import and/or export duties included in this transaction. 2 decimal/right justified/zero filled or space filled, (20.00) |
FreightAmount
freight_amount (JSON format) |
12 |
N |
Required |
Total freight or shipping and handling charges. 2 decimal/right justified/zero filled or space filled, (20.00) |
ShipFromZip
ship_from_zip (JSON format) |
10 |
A |
Optional |
The zip/postal code of the location from which the goods were shipped. |
ShipToAddress ship_to_address (JSON format) |
Optional |
Parent of the properties listed below. |
||
Address1
address_1 (JSON format) |
28 |
A |
Optional |
The Street Address of the “ship to” location. Required Character Format is UPPER. |
City
city (JSON format) |
20 |
A |
Optional |
The City of the “ship to” location. Required Character Format is UPPER. |
State
state (JSON format) |
2 |
A |
Optional |
The State of the “ship to” location. Required Character Format is UPPER. |
Zip
zip (JSON format) |
2 |
A |
Optional |
The Zip/postal code of the “ship to” location. |
Country
country (JSON format) |
2 |
A |
Optional |
The ISO-assigned code of the country to which the goods were shipped. US – United States,CA – Canada,GB – Great Britain,UK – United Kingdom,“ “ – Blank for all other countries) |
CustomerNumber
customer_number (JSON format) |
20 |
A |
Optional |
Purchase order or other number used by merchant’s customer to track the order. |
email (JSON format) |
50 |
A |
Optional |
The Accountholder’s email address associated with the transaction. |
Name
name (JSON format) |
28 |
A |
Optional |
The Accountholder’s name associated with the transaction. asterisk should precede last name ex: *LAST |
Phone
phone (JSON format) |
14 |
A |
Optional |
The Accountholder’s phone number associated with the transaction. AAAEEENNNNXXXX where: AAA = Area Code, EEE = Exchange, NNNN = Number, XXXX = Extension |
LineItem line_items (JSON format) |
Required |
Parent of the properties listed below. There is a limit of 98 line items for a single transaction. |
||
CommodityCode
commodity_code (JSON format) |
12 |
N |
Required |
The commodity code used to classify the item purchased. For a complete list of Commodity Codes click here. |
Description
description (JSON format) |
26 |
N |
Required |
Item description. Required Character Format is ASCII. |
DiscountAmount
discount_amount (JSON format) |
12 |
N |
Required |
The discounted amount for the line item. 2 decimal/right justified/zero filled or space filled, (100.00) |
DiscountIndicator
discount_indicator (JSON format) |
B |
Required |
Indicator for whether a discount is present on the item or not. 1 – Discounted 0 – Not Discounted |
|
GrossNetIndicator
gross_net_indicator (JSON format) |
B |
Required |
Indicates whether tax is included in the total amount or not. 1 – Tax included 0 – Tax Excluded |
|
LineItemTotal
line_item_total (JSON format) |
12 |
N |
Required |
The amount of the item. Normally calculated as price multiplied by quantity. 2 decimal/right justified/zero filled, (200.00) |
ProductCode
product_code (JSON format) |
12 |
A |
Required |
The UPC product code for the line item. Required Character Format is ASCII. |
Quantity
quantity (JSON format) |
5 |
N |
Required |
Number of units of the item purchased
|
TaxAmount
tax_amount (JSON format) |
12 |
N |
Optional |
The amount of tax charged on the line item. 2 decimal/right justified/zero filled or space filled (50.00) |
TaxRate
tax_rate (JSON format) |
4 |
N |
Optional |
The rate of tax charged on the line item. 2 decimal/right justified/zero filled or space filled, (1.00 = 1%) |
TaxType
tax_type (JSON format) |
4 |
A |
Optional |
Type of tax being applied. |
UnitCost
unit_cost (JSON format) |
12 |
N |
Required |
The per unit cost of the line item. 4 decimal/right justified/zero filled or space filled, (100.0000) |
UnitOfMeasure
unit_of_measure (JSON format) |
12 |
A |
Required |
The unit of measure, or unit of measure code used for this item |
Note: In order to process Level II and/or Level III data, it must be enabled on your merchant account. Please contact your First Data Sales Representative for more details. Please note that Level III data is not supported for American Express card types.
The following is an example of a transaction that makes use of the Level 3 fields, using the REST format.
<?xml version="1.0" encoding="utf-8" ?> <Transaction> <ExactID>A1234-01</ExactID> <Password>12345pwd</Password> <Card_Number>5454545454545454</Card_Number> <CardHoldersName>ARTHUR DIGBY SELLERS</CardHoldersName> <Transaction_Type>00</Transaction_Type> <Expiry_Date>0915</Expiry_Date> <DollarAmount>168.67</DollarAmount> <Level3> <TaxAmount>8.84</TaxAmount> <TaxRate>7.25</TaxRate> <AltTaxAmount>0.0</AltTaxAmount> <AltTaxId></AltTaxId> <DiscountAmount>30.00</DiscountAmount> <DutyAmount>12.90</DutyAmount> <FreightAmount>24.99</FreightAmount> <ShipFromZip>90265</ShipFromZip> <ShipToAddress> <Address1>1234 QUINTANA RD</Address1> <City>VENICE</City> <Country>US</Country> <CustomerNumber>90125</CustomerNumber> <Email>JACKIE@JACKCUSTOMER.COM</Email> <Name>ARTHUR DIGBY *SELLERS</Name> <Phone>8185551212</Phone> <State>CA</State> <Zip>90291</Zip> </ShipToAddress> <LineItem> <CommodityCode>014048675309</CommodityCode> <Description>CARPET CLEANER</Description> <DiscountAmount>30.00</DiscountAmount> <DiscountIndicator>1</DiscountIndicator> <GrossNetIndicator>1</GrossNetIndicator> <LineItemTotal>107.20</LineItemTotal> <ProductCode>PN0339763321</ProductCode> <Quantity>PN0339763321</Quantity> <TaxAmount>7.25</TaxAmount> <TaxRate>7.25</TaxRate> <TaxType>4</TaxType> <UnitCost>2.33</UnitCost> <UnitOfMeasure>QTL</UnitOfMeasure> </LineItem> <LineItem> <CommodityCode>133042775322</CommodityCode> <Description>NON DAIRY CREAMER</Description> <DiscountAmount>00.00</DiscountAmount> <DiscountIndicator>0</DiscountIndicator> <GrossNetIndicator>1</GrossNetIndicator> <LineItemTotal>23.58</LineItemTotal> <ProductCode>PN0000090125</ProductCode> <Quantity>1</Quantity> <TaxAmount>1.59</TaxAmount> <TaxRate>7.25</TaxRate> <TaxType>4</TaxType> <UnitCost>00.22</UnitCost> <UnitOfMeasure>CS</UnitOfMeasure> </LineItem> </Level3> </Transaction>
JSON Level 3 Example:
curl -H 'Content-Type: application/json; charset=UTF-8' \ -H 'Accept: application/json' \ -d '{ "gateway_id": "A1234-01", "password": "12345pwd", "transaction_type": "00", "amount": 11, "cardholder_name": "ARTHUR DIGBY SELLERS", "cc_number": "5454545454545454", "cc_expiry": "0315", "level3": { "ship_from_zip": "90265", "duty_amount": 12.90, "discount_amount": 30.00, "freight_amount": 24.99, "line_items": [{ "description": "CARPET CLEANER", "product_code": "PN0339763321", "quantity": 5, "unit_of_measure": "QTL", "line_item_total": 107.20, "commodity_code": "014048675309", "unit_cost": 2.33}], "ship_to_address": { "name": "ARTHUR *SELLERS", "address_1": "1234 QUINTANA RD", "city": "VENICE"}} }' \ https://api.globalgatewaye4.firstdata.com/transaction/v11
4.4 PayPal Properties
This section was deprecated and merged to section 3.1.
Please refer to section 3.1 PayPal.
4.5 Soft Descriptor Properties
The following properties are used to set soft descriptor information for a transaction on a case-by-case basis. These properties are only compatible with v11 and higher of the API and can only be used with the following transaction types:
- Purchase
- Pre-Authorization
- Pre-Authorization-Completion
- Void/Refund
Important Note About Using Soft Descriptors:
Dynamic Soft Descriptors are submitted both at the authorization and the settlement of a transaction. For Soft Descriptors to be used in settlement, one the following Soft Descriptor fields must be populated: "dba_name" or "mcc".
If you would like to use Soft Descriptors, please contact your First Data Relationship Manager or Sales Rep and have them set your "Foreign Indicator" in your "North Merchant Manager File" to "5". To learn more about Dynamic Soft Descriptors, please click here (https://support.payeezy.com/hc/en-us/articles/203730599).
Property | Description |
SoftDescriptor | Parent of the properties listed below. Note: to use any of the properties listed below, this property must be used as their parent. |
DBAName
dba_name (JSON format)
|
Business name This field is required to be sent in order to use other soft descriptor fields
|
Street
street (JSON format)
|
Business address Required Character Format is ASCII. |
City
city (JSON format)
|
Business city
Required Character Format is ASCII.
|
Region
region (JSON format)
|
Business region
|
PostalCode
postal_code (JSON format)
|
Business postal/zip code |
CountryCode
country_code (JSON format)
|
Business country |
MID
mid (JSON format)
|
Merchant ID |
MCC
mcc (JSON format)
|
Enter your Merchant Category Code |
MerchantContactInfo
merchant_contact_info (JSON format)
|
Merchant contact information
|
Soft Descriptor JSON Example
{ "gateway_id": "A00001-01", "password": "zzzz", "transaction_type": "00", "amount": 11, "cardholder_name": "JEFFREY LEBOWSKI", "cc_number": "4111111111111111", "cc_expiry": "0314", "soft_descriptor": { "dba_name": "Autobahn"} }
4.6 Fees
A field indicating “Fee Over-ride” is an optional field in the Web Service API. The logic to determine Fee processing will follow the following path:
- If the optional Fee Over-ride field is populated by the merchant, the associated Fee will be accepted by the system. This Fee will ”Over-ride” whatever is established in the Gateway for the merchant.
- If the optional Fee field Over-ride is absent or not populated by the merchant, the Fee structure established at the Gateway will be applied to the transaction. This is considered the standard Fee model.
Depending upon the transaction mode selected, the Fee will be treated as:
-
Part of the Order Amount following the authorization/completion of the aggregated Order amount. This mode will support the Split Funding of fees to a separately designated DDA.
-
Separate from the Order Amount and following a separate and distinct authorization/completion path from the original Order amount.
Property |
Description |
FeeAmount
(V18 forward)
|
This is added to DollarAmount to produce the total charged. Specifying FeeAmount overrides any amount calculated for fees based on the configuration of the terminal. Ignored if fees are not enabled for terminal. |
Note: Fees and DCC/DP are mutually exclusive (the Gateway will not allow selection of Fees if DCC and/or DP are activated).
4.7 DCC Properties
The v18 and higher endpoint of the API adds the powerful DCC (Dynamic Currency Conversion) service. A payment solution that allows international customers to pay in their credit card currency.
NOTE: Please contact your First Data sale representative for additional information.This section should be used in conjunction with the DCC/DP Merchant and Rate Card API article as a Merchant needs to get the RateResponseSignature from the Card Rate API. Click here to view this article now.
Merchants can include DCC fields in the transaction requests, indicating DCC-Opt-In and referencing a rate response obtained in a previous card rate request.
The terminal needs to be enabled for Dynamic Currency in the Gateway.
The DCC properties are placed inside a DynamicCurrency
element (JSON, dynamic_currency
). This element has the following properties:
Property |
Description |
OptedIn
(V18 forward)
|
"true" or "false". Whether customer has opted-in to DCC conversion |
RateResponseSignature
(V18 forward)
|
The value of the "rate_response_id " from the exchange rate API (card rate request) |
SOAP / XML Example:
<DynamicCurrency>
<OptedIn> true </OptedIn>
<RateResponseSignature> 123 -1604561b0528eb909bcc38bb146f166ec6540ab3b7b326d6e5b990ec73c030f8</RateResponseSignature> </DynamicCurrency> |
JSON Example:
"dynamic_currency" : {
"opted_in" : "true" ,
"rate_response_signature" : "123-1604561b0528eb909bcc38bb146f166ec6540ab3b7b326d6e5b990ec73c030f8" } |
In the response, an element ForeignCurrencyDetails
(JSON: foreign_currency_details
) contains the foreign currency transaction details. Please see the section entitled Foreign Currency Details Properties for additional information.
4.8 DP Properties
The v18 or higher endpoint of the API adds another service known as DP (Dynamic Pricing). DP provides merchants with the ability to offer their international cardholders the choice to view and pay for goods and services in their own currency.
NOTE: Please contact your First Data sale representative for additional information. This section should used alongside with the DCC/DP Merchant and Rate Card API article. Click here to view this article now.
Merchants can include DP fields in the transaction requests, indicating currency conversion opt-in by the customer, and referencing a rate response obtained in a previous merchant rate request.
The terminal needs to be enabled for Dynamic Pricing at the Gateway.
Important: If the currency of the transaction request is different from the terminal's, any Dynamic Pricing data will be ignored.
The DP properties are placed inside a DynamicPricing
element (JSON, dynamic_pricing
). This element has the following properties:
Property |
Description |
OptedIn
(V18 forward)
|
"true" or "false". Whether customer has opted-in to currency conversion |
RateResponseSignature
(V18 forward)
|
The value of the "rate_response_id " from the exchange rate API (merchant rate request) |
SOAP / XML Example:
<DynamicCurrency>
<OptedIn> true </OptedIn>
<RateResponseSignature> 123 -1604561b0528eb909bcc38bb146f166ec6540ab3b7b326d6e5b990ec73c030f8</RateResponseSignature> </DynamicCurrency> |
JSON Example:
"dynamic_currency" : {
"opted_in" : "true" ,
"rate_response_signature" : "123-1604561b0528eb909bcc38bb146f166ec6540ab3b7b326d6e5b990ec73c030f8" } |
Note: In the response, an element ForeignCurrencyDetails
(JSON: foreign_currency_details
) contains the foreign currency transaction details. Please see Foreign Currency Details Properties section for more information.
4.9 Foreign Currency Details Properties
The v18 or higher endpoint of the API supports the Foreign Currency Details. The following properties apply:
Property |
Description |
DCCIndicator
(V18 forward)
|
1 or 3. 1 if OptedIn in the request was true, 3 if OptedIn in the request was false. |
ForeignAmount
(V18 forward)
|
The foreign amount from the rate response referenced in the request, if supplied. |
ForeignCurrencyCode
(V18 forward)
|
The foreign currency code from the rate response referenced in the request, if supplied. |
ExchangeRate
(V18 forward)
|
The exchange rate from the rate response referenced in the request, if supplied. |
MarginRate
(V18 forward)
|
The margin rate from the rate response referenced in the request, if supplied. |
RateSource
(V18 forward)
|
The rate source from the rate response referenced in the request, if supplied. |
When refunding or voiding tagged transactions, or completing a Pre-authorization with DCC indicator = 1, the DynamicCurrency / dynamic_currency
need not be supplied, the exchange rate for the transaction will be automatically looked up and applied. This will be reflected in following element in the response: ForeignCurrencDetails / foreign_currency_details.
Transactions that require the DynamicCurrency element to be processed as a DCC transaction:
Transaction Type
|
Code
|
---|---|
Purchase | 00 |
Pre Authorization | 01 |
Exchange rates will be automatically looked up if the original / referenced transaction had a DCC indicator of 1:
-
Transaction Type
Code
Tagged Completion
32
Tagged Void
33
Tagged Refund
34
-
For Partial Authorizations (where PartialRedemption is set to "Y") the foreign amount will be re-calculated as the partial amount multiplied by the exchange rate.
4.10 Fraud Detect
Three new fields are introduced to pass the Fraud Detect info back to merchants via API response:
Field Name |
Meaning |
Available Values |
Score |
The score attributed to the transaction by the Fraud Detect system. |
Integer ranging from 0 (less likely to be fraud) to 1000 (more likely to be fraud). Example: 621 |
Recommendation |
The recommended action to be taken with relation with the transaction. |
“Approve”, “Review”, “Decline” |
Explanation |
Explains the reason for which a certain recommendation and score were given. |
Up to 5 specific explanations. |
Please note: If Fraud Detect is enabled on the terminal, transactions from all API versions will pass through fraud detection. However, the three new Fraud Detect fields will be returned in the API response only if the API v25 or above is used.
Example of an API Request (Json)
Please Note: there are no changes for the API requests with respect to this feature.
{
"gateway_id":"XXXXXXX",
"password":"XXXXXXX”,
"transaction_type":"01",
"amount":"0.72",
"cardholder_name":"Michael Dean",
"cc_number":"6250941006528599",
"cc_expiry":"1225"
}
Example of an API Response (Json)
{"transaction_error":0,"transaction_approved":1,"exact_resp_code":"00","exact_message":"Transaction Normal","bank_resp_code":"100","bank_message":"Approved","sequence_no":"0191354","retrieval_ref_no":"170925","merchant_name":"FDT Terminal ACTIVE Shop","merchant_address":"514 S. Magnolia St. ","merchant_city":"Orlando","merchant_province":"Florida","merchant_country":"United States","merchant_postal":"32806","ctr":"========== TRANSACTION RECORD ==========\nFDT Terminal ACTIVE Shop\n514 S. Magnolia St. \nOrlando, FL 32806\nUnited States\n\n\nTYPE: Pre-Authorization\n\nACCT: Discover $ 0.72 USD\n\nCARDHOLDER NAME : Michael Dean\nCARD NUMBER : ############8599\nDATE/TIME : 25 Sep 17 12:25:36\nREFERENCE # : 001 0191354 T\nAUTHOR. # : 917520\nTRANS. REF. : \n\n Approved - Thank You 100\n\n\nPlease retain this copy for your records.\n\nCardholder will pay above amount to\ncard issuer pursuant to cardholder\nagreement.\n========================================","gateway_id":"XXXXXXX","transaction_type":"01","amount":0.72,"transaction_tag":2200074877,"authorization_num":"917520","cc_expiry":"1225","cardholder_name":"Michael Dean","cvd_presence_ind":0,"customer_ref":"Thr: 590, Scr: 275","reference_3":"FDS-275-1","currency_code":"USD","partial_redemption":0,"transarmor_token":"XXXXXXXXXX","credit_card_type":"Discover","fraud_detect":{"score":775,"recommendation":"decline","explanation":[{"type":"rule","description":"PTR_8 The payment method 'XXXXXXXXX' was used in 4 successful authorizations today (max 2)"}]}
}
For information on how to use Search and Reporting API for Fraud Detect, please refer to the following API spec: Search and Reporting API
-
5 Response Properties
-
The following properties are returned in the response. In addition, all the Request Properties are also returned. The Request Properties returned in the Response are populated with the values actually used to process the transaction. Any changes made to a Request Property while processing will be reflected by the altered return value. In addition, the Request Properties Transaction_Tag and Authorization_Num are overridden by new return values. The new values reference the new transaction that has been processed. Note that the minOccurs and maxOccurs values here apply to v9 or higher of the API only; for v8 they are all considered required fields to ensure backwards-compatibility.
Property Description LogonMessage - String [255]
- {Read} {minOccurs=”0” maxOccurs=”1”}
(V8 only)Returned by Payeezy Gateway upon successful Authentication. Indicates the location and version of the server that provided authentication. Transaction_Error - Boolean
- {Read} {minOccurs=”1” maxOccurs=”1”}
This property indicates that there was an error during the processing of the transaction. Please refer to eCommerce Response Codes (ETG Codes) for further information. Transaction_Approved - Boolean
- {Read} {minOccurs=”1” maxOccurs=”1”}
This property indicates that the bank approved a transaction and there are no pending errors. If further information is required, please check the Optional Response properties. Exact_Resp_code - String [2]
- {Read} {minOccurs=”0” maxOccurs=”1”}
This property indicates the processing status of the transaction. Please refer to the section on Exception Handling for further information. The Transaction_Error property will return True if this property is not “00”. Exact_Message - String [50]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Message that accompanies the Exact_Resp_code. Bank_Resp_code - String [3]
- {Read} {minOccurs=”0” maxOccurs=”1”}
This is a 2 or 3 digit code, provided by the financial institution, indicating the approval status of a transaction. The meaning of these codes is defined by the various financial institutions and is not under the control of the Payeezy Gateway. Please refer to the Transaction_Approved property for the approval status of a transaction. Bank_Message - String [80]
- {Read} {minOccurs=”0” maxOccurs=”1”}
A message provided by the financial institution describing the Response code above. Bank_Resp_code_2 - String [2]
- {Read} {minOccurs=”0” maxOccurs=”1”}
A secondary response provided returned by the financial institution. Transaction_Tag - String
- {Read/Write} {minOccurs=”0” maxOccurs=”1”}
A unique identifier to associate with a tagged transaction. This value overrides any value sent for the Request Property of the same name. Authorization_Num - String [8]
- {Read/Write} {minOccurs=”0” maxOccurs=”1”}
This is the authorization number returned by the cardholder’s financial institution when a transaction has been approved. This value overrides any value sent for the Request Property of the same name. SequenceNo - String [50]
- {Read} {minOccurs=”0” maxOccurs=”1”}
A digit sequentially incremented number generated by Payeezy Gateway and passed through to the financial institution. It is also passed back to the client in the transaction response. This number can be used for tracking and audit purposes. AVS - String [1]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Supported AVS Results: - X = exact match, 9 digit zip
- Y = exact match, 5 digit zip
- A = address match only
- W = 9 digit zip match only
- Z = 5 digit zip match only
- N = no address or zip match
- U = address unavailable
- G = non-North American issuer, does not participate
- R = issuer system unavailable
- E = not a Mail\Phone order
- S = service not supported
- Q = Bill to address did not pass edit checks
- D = International street address and postal code match
- B = International street address match, postal code not verified due to incompatable formats
- C = International street address and postal code not verified due to incompatable formats
- P = International postal code match, street address not verified due to incompatable format
- 1 = Cardholder name matches
- 2 = Cardholder name, billing address, and postal code match
- 3 = Cardholder name and billing postal code match
- 4 = Cardholder name and billing address match
- 5 = Cardholder name incorrect, billing address and postal code match
- 6 = Cardholder name incorrect, billing postal code matches
- 7 = Cardholder name incorrect, billing address matches
- 8 = Cardholder name, billing address, and postal code are all incorrect
CVV2 - String [1]
- {Read} {minOccurs=”0” maxOccurs=”1”}
The CVV2 authentication code returned from the bank. Note: the value is null if CVV2 is not supported.
Supported CVV Results:- M = CVV2 / CVC2/CVD Match.
- N = CVV2 / CVC2/CVD No Match.
- P = Not Processed.
- S = Merchant has indicated that CVV2 / CVC2/CVD is not present on the card.
- U = Issuer is not certified and / or has not provided Visa encryption keys.
retrieval_ref_no (JSON)
Retrieval_Ref_No (XML)
- String [6]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Response date for when the transaction was authorized. format "YYMMDD" MerchantName - String [50]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Returned by Payeezy Gateway upon successful Authentication. MerchantAddress - String [50]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Returned by Payeezy Gateway upon successful Authentication. MerchantCity - String [25]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Returned by Payeezy Gateway upon successful Authentication. MerchantProvince - String [2]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Returned by Payeezy Gateway upon successful Authentication. MerchantCountry - String [50]
- {Read
Returned by Payeezy Gateway upon successful Authentication. MerchantPostal - String [12]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Returned by Payeezy Gateway upon successful Authentication. MerchantURL - String [25]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Returned by Payeezy Gateway upon successful Authentication. CTR - String [var]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Displays the bank required Customer Transaction Record. This information must be displayed to the customer upon completion of all transactions, Approved or Declined. CurrentBalance - String [var]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Current balance of a ValueLink card. This is only used for ValueLink transactions and is only available in the v9 or higher endpoint. PreviousBalance - String [var]
- {Read} {minOccurs=”0” maxOccurs=”1”}
Previous balance of a ValueLink card. This is only used for ValueLink transactions and is only available in the v9 or higher endpoint. AmexFraud
- String
- {Read}{minOccurs="0" maxOccurs="1"}
Support (AF) Amex Fraud Mitigation Reply Format Indicators
Indicator Response Fields: 5digit code one digit each in the order of; Zip Code, Street, Name, Telephone, Email
Indicator Codes:
Y = Match
N = No Match
S = Service Unavailable
U = Unchecked
R = Retry
<space> = Data Not SentWhen a merchant is sending in an Amex message, these fields will be returned if they were supplied in the message fields and Address Verification/Validation was requested.
This record will be returned (when supplied by Amex) if a merchant certified/recertified for First Data Compass platform after September 2010 to receive Amex Enhanced Fraud Responses
This property is only applicable to the v16 or higher endpoint.
ForeignCurrencyDetails This is only used for DCC/DP service transaction and only available in the v18 or higher endpoint.
6 SOAP Message Format
The SOAP style Payeezy Gateway Web Service API uses an RPC/Encoded message as defined in the SOAP 1.1 protocol
The RPC/Encoded standard does allow for some variation to occur within the formatting of a SOAP message. This can occur with both the Request and Response, and the Payeezy Gateway Web Service API handles these variations in a predictable way. The following sections on Request Message Format and Response Message Format describes some of the variations that can occur with the SOAP message.
The World Wide Web Consortium defines the standard for the RPC/Encoded protocol. Documentation on it can be found athttp://www.w3.org/TR/2000/NOTE-SOAP-20000508.
6.1 Request Message Format
The Payeezy Gateway Web Service API is able to handle certain variations in the SOAP message format for the Request. The greatest variation supported is in how the Transactions struct is defined in the Request message.
Referencing or embedding may be used to define the Transaction struct element. The Transaction struct can be defined by referencing it within the Process element. Example 5.1 provides an example of a Request message that uses a referenced Transaction struct. This example is also online at:
http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e...
The Transaction struct can also be defined by embedding it within the Process element. Example 5.2 provides an example of a Request message that uses an embedded Transaction struct.
If correctly formatted, referencing or embedding the Transaction struct element will result in the same Response being returned. The response returned is described in the section Response Message Format.
NOTE: The placeholders "string" and "boolean" in the examples would need to be replaced with actual values.
Example 5.1 SOAP Request Message with a Referenced Transaction Struct
POST /vplug-in/transaction/rpc-enc/service.asmx HTTP/1.1
Host: api.globalgatewaye4.firstdata.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e...
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-enc/"
xmlns:types="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e..."
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<q1:SendAndCommit xmlns:q1="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e...">
<SendAndCommitSource href="#id1" />
</q1:SendAndCommit>
<types:Transaction id="id1" xsi:type="types:Transaction">
<ExactID xsi:type="xsd:string">string</ExactID>
<Password xsi:type="xsd:string">string</Password>
<Transaction_Type xsi:type="xsd:string">string</Transaction_Type>
<DollarAmount xsi:type="xsd:string">string</DollarAmount>
<SurchargeAmount xsi:type="xsd:string">string</SurchargeAmount>
<Card_Number xsi:type="xsd:string">string</Card_Number>
<Transaction_Tag xsi:type="xsd:string">string</Transaction_Tag>
<Track1 xsi:type="xsd:string">string</Track1>
<Track2 xsi:type="xsd:string">string</Track2>
<PAN xsi:type="xsd:string">string</PAN>
<Authorization_Num xsi:type="xsd:string">string</Authorization_Num>
<Expiry_Date xsi:type="xsd:string">string</Expiry_Date>
<CardHoldersName xsi:type="xsd:string">string</CardHoldersName>
<Address xsi:type="xsd:string">string</Address>
<CVDCode xsi:type="xsd:string">string</CVDCode>
<CVD_Presence_Ind xsi:type="xsd:string">string</CVD_Presence_Ind>
<ZipCode xsi:type="xsd:string">string</ZipCode>
<Tax1Amount xsi:type="xsd:string">string</Tax1Amount>
<Tax1Number xsi:type="xsd:string">string</Tax1Number>
<Tax2Amount xsi:type="xsd:string">string</Tax2Amount>
<Tax2Number xsi:type="xsd:string">string</Tax2Number>
<Ecommerce_Flag xsi:type="xsd:string">string</Ecommerce_Flag>
<XID xsi:type="xsd:string">string</XID>
<CAVV xsi:type="xsd:string">string</CAVV>
<CAVV_Algorithm xsi:type="xsd:string">string</CAVV_Algorithm>
<Reference_No xsi:type="xsd:string">string</Reference_No>
<Customer_Ref xsi:type="xsd:string">string</Customer_Ref>
<Reference_3 xsi:type="xsd:string">string</Reference_3>
<Language xsi:type="xsd:string">string</Language>
<Client_IP xsi:type="xsd:string">string</Client_IP>
<Client_Email xsi:type="xsd:string">string</Client_Email>
</types:Transaction>
</soap:Body>
</soap:Envelope>Example 5.2 SOAP Request Message with an Embedded Transaction Struct
POST /vplug-in/transaction/rpc-enc/service.asmx HTTP/1.1
Host: api.globalgatewaye4.firstdata.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e...
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-enc/"
xmlns:types="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e..."
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<q1:SendAndCommit xmlns:q1="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e..."
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<types:Transaction id="id1" xsi:type="types:Transaction">
<ExactID xsi:type="xsd:string">string</ExactID>
<Password xsi:type="xsd:string">string</Password>
<Transaction_Type xsi:type="xsd:string">string</Transaction_Type>
<DollarAmount xsi:type="xsd:string">string</DollarAmount>
<SurchargeAmount xsi:type="xsd:string">string</SurchargeAmount>
<Card_Number xsi:type="xsd:string">string</Card_Number>
<Transaction_Tag xsi:type="xsd:string">string</Transaction_Tag>
<Track1 xsi:type="xsd:string">string</Track1>
<Track2 xsi:type="xsd:string">string</Track2>
<PAN xsi:type="xsd:string">string</PAN>
<Authorization_Num xsi:type="xsd:string">string</Authorization_Num>
<Expiry_Date xsi:type="xsd:string">string</Expiry_Date>
<CardHoldersName xsi:type="xsd:string">string</CardHoldersName>
<Address xsi:type="xsd:string">string</Address>
<CVDCode xsi:type="xsd:string">string</CVDCode>
<CVD_Presence_Ind xsi:type="xsd:string">string</CVD_Presence_Ind>
<ZipCode xsi:type="xsd:string">string</ZipCode>
<Tax1Amount xsi:type="xsd:string">string</Tax1Amount>
<Tax1Number xsi:type="xsd:string">string</Tax1Number>
<Tax2Amount xsi:type="xsd:string">string</Tax2Amount>
<Tax2Number xsi:type="xsd:string">string</Tax2Number>
<Ecommerce_Flag xsi:type="xsd:string">string</Ecommerce_Flag>
<XID xsi:type="xsd:string">string</XID>
<CAVV xsi:type="xsd:string">string</CAVV>
<CAVV_Algorithm xsi:type="xsd:string">string</CAVV_Algorithm>
<Reference_No xsi:type="xsd:string">string</Reference_No>
<Customer_Ref xsi:type="xsd:string">string</Customer_Ref>
<Reference_3 xsi:type="xsd:string">string</Reference_3>
<Language xsi:type="xsd:string">string</Language>
<Client_IP xsi:type="xsd:string">string</Client_IP>
<Client_Email xsi:type="xsd:string">string</Client_Email>
</types:Transaction>
</q1:SendAndCommit>
</soap:Body>
</soap:Envelope>6.2 Response Message Format
The Request message format allowed the Transaction struct to either be referenced or embedded. The TransactionResult struct returned in the Response message is always defined by reference. Example 5.3 provides an example of a Response message that would be returned for both Example’s 5.1 and 5.2.
NOTE: The placeholders "string" and "boolean" in the examples would need to be replaced with actual values.
Example 5.3 SOAP Response Message with a Referenced TransactionResult Struct
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-enc/"
xmlns:types="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e..."
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<q3:SendAndCommitResponse xmlns:q3="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e...">
<SendAndCommitResult href="#id1" />
</q3:SendAndCommitResponse>
<types:TransactionResult id="id1" xsi:type="types:TransactionResult">
<ExactID xsi:type="xsd:string">string</ExactID>
<Password xsi:type="xsd:string">string</Password>
<Transaction_Type xsi:type="xsd:string">string</Transaction_Type>
<DollarAmount xsi:type="xsd:string">string</DollarAmount>
<SurchargeAmount xsi:type="xsd:string">string</SurchargeAmount>
<Card_Number xsi:type="xsd:string">string</Card_Number>
<Transaction_Tag xsi:type="xsd:string">string</Transaction_Tag>
<Track1 xsi:type="xsd:string">string</Track1>
<Track2 xsi:type="xsd:string">string</Track2>
<PAN xsi:type="xsd:string">string</PAN>
<Authorization_Num xsi:type="xsd:string">string</Authorization_Num>
<Expiry_Date xsi:type="xsd:string">string</Expiry_Date>
<CardHoldersName xsi:type="xsd:string">string</CardHoldersName>
<Address xsi:type="xsd:string">string</Address>
<CVDCode xsi:type="xsd:string">string</CVDCode>
<CVD_Presence_Ind xsi:type="xsd:string">string</CVD_Presence_Ind>
<ZipCode xsi:type="xsd:string">string</ZipCode>
<Tax1Amount xsi:type="xsd:string">string</Tax1Amount>
<Tax1Number xsi:type="xsd:string">string</Tax1Number>
<Tax2Amount xsi:type="xsd:string">string</Tax2Amount>
<Tax2Number xsi:type="xsd:string">string</Tax2Number>
<Ecommerce_Flag xsi:type="xsd:string">string</Ecommerce_Flag>
<XID xsi:type="xsd:string">string</XID>
<CAVV xsi:type="xsd:string">string</CAVV>
<CAVV_Algorithm xsi:type="xsd:string">string</CAVV_Algorithm>
<Reference_No xsi:type="xsd:string">string</Reference_No>
<Customer_Ref xsi:type="xsd:string">string</Customer_Ref>
<Reference_3 xsi:type="xsd:string">string</Reference_3>
<Language xsi:type="xsd:string">string</Language>
<Client_IP xsi:type="xsd:string">string</Client_IP>
<Client_Email xsi:type="xsd:string">string</Client_Email>
<LogonMessage xsi:type="xsd:string">string</LogonMessage>
<Error_Number xsi:type="xsd:string">string</Error_Number>
<Error_Description xsi:type="xsd:string">string</Error_Description>
<Transaction_Error xsi:type="xsd:boolean">boolean</Transaction_Error>
<Transaction_Approved xsi:type="xsd:boolean">boolean</Transaction_Approved>
<EXact_Resp_Code xsi:type="xsd:string">string</EXact_Resp_Code>
<EXact_Message xsi:type="xsd:string">string</EXact_Message>
<Bank_Resp_Code xsi:type="xsd:string">string</Bank_Resp_Code>
<Bank_Message xsi:type="xsd:string">string</Bank_Message>
<Bank_Resp_Code_2 xsi:type="xsd:string">string</Bank_Resp_Code_2>
<SequenceNo xsi:type="xsd:string">string</SequenceNo>
<AVS xsi:type="xsd:string">string</AVS>
<CVV2 xsi:type="xsd:string">string</CVV2>
<Retrieval_Ref_No xsi:type="xsd:string">string</Retrieval_Ref_No>
<CAVV_Response xsi:type="xsd:string">string</CAVV_Response>
<MerchantName xsi:type="xsd:string">string</MerchantName>
<MerchantAddress xsi:type="xsd:string">string</MerchantAddress>
<MerchantCity xsi:type="xsd:string">string</MerchantCity>
<MerchantProvince xsi:type="xsd:string">string</MerchantProvince>
<MerchantCountry xsi:type="xsd:string">string</MerchantCountry>
<MerchantPostal xsi:type="xsd:string">string</MerchantPostal>
<MerchantURL xsi:type="xsd:string">string</MerchantURL>
<CTR xsi:type="xsd:string">string</CTR>
</types:TransactionResult>
</soap:Body>
</soap:Envelope>Certain variations can occur in the SOAP message format for the Response. Variations in the message may occur in three general ways. The variations may occur if a SOAP exception is thrown, in the way the child elements are ordered in the TransactionResult struct and in the addition of new elements to the TransactionResult struct.
The first way in which the Response message may vary is if a SOAP exception is returned. This type of response is returned to indicate an error. The SOAP exception message format is completely different from a normal Response. The conditions under which a SOAP exception may occur and the format of the message sent are described in the Exception Handling section.
The second way in which the Response message may vary is in the order of the child elements contained within the TransactionResult struct. The TransactionResult struct is a complex data type. There are no requirements in the RPC/Encoded standard for the contents of such a data type to follow a fixed sequence. Overtime and with modifications to the Payment Web Service, the order of the child elements contained within the TransactionResult struct may change.
The third way in which the Response message may vary is with the addition of new child elements contained within the TransactionResult struct. With upgrades to the Payment Web Service to allow enhanced processing capabilities, the complex data type may be expanded to support additional properties. When this occurs, new elements would be automatically added to the TransactionResult struc. The existing properties / elements would always continue to be supported.
7 A Few Examples Using cURL
The following examples submit transactions using the minimal required properties for each processing scenario.
NOTE: Exact ID and Password in the request and response have been substituted with the placeholders "ExactID" and "Password".
7.1 Example 1. Pre-Authorization
This request illustrates the following:
- using the SOAP style Payeezy Gateway Web Service API
- passing authentication credentials as HTTP Basic Authentication username:password values
- pre-authorizing the given credit card, which allows for capturing funds at a later time via the Completion transaction
curl -u 'ExactID:Password' \
-H 'SOAPAction: http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-enc/SendAndCommit' \
-H 'Content-Type: text/xml' \
-d '<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-enc/" xmlns:types="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-enc/encodedTypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<q1:SendAndCommit xmlns:q1="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-enc/Request">
<SendAndCommitSource href="#id1" />
</q1:SendAndCommit>
<types:Transaction id="id1" xsi:type="types:Transaction">
<Transaction_Type xsi:type="xsd:string">01</Transaction_Type>
<DollarAmount xsi:type="xsd:string">15.75</DollarAmount>
<Card_Number xsi:type="xsd:string">4111111111111111</Card_Number>
<Expiry_Date xsi:type="xsd:string">1015</Expiry_Date>
<CardHoldersName xsi:type="xsd:string">Walter Sobchak</CardHoldersName>
</types:Transaction>
</soap:Body>
</soap:Envelope>' \
https://api.globalgatewaye4.firstdata.com/transactionThe resulting request headers and response:
POST /transaction HTTP/1.1
Authorization: Basic Foo4BarBazAyOjAhcGl0ZXN0
User-Agent: curl/7.21.0 (i386-apple-darwin9.8.0) libcurl/7.21.0 OpenSSL/1.0.0a zlib/1.2.5 libidn/1.19
Host: http://api.globalgatewaye4.firstdata.com
Accept: */*
SOAPAction: http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e...
Content-Type: text/xml
Content-Length: 1057
Expect: 100-continue
HTTP/1.1 100 Continue
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Date: Wed, 18 Aug 2010 17:48:07 GMT
Server: Apache
ETag: "d358d5fd6360a736466600964195fcc6"
Cache-Control: private, max-age=0, must-revalidate
Content-Length: 4591
Status: 200
Content-Type: text/xml; charset=utf-8
Vary: Accept-Encoding
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-enc/" xmlns:types="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e..." xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<q1:SendAndCommitResponse xmlns:q1="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-e...">
<SendAndCommitResult href="#id1">
</SendAndCommitResult>
</q1:SendAndCommitResponse>
<types:TransactionResult id="id1" xsi:type="types:TransactionResult">
<ExactID xsi:type="xsd:string">ExactID</ExactID>
<Password xsi:nil="true"></Password>
<Transaction_Type xsi:type="xsd:string">01</Transaction_Type>
<DollarAmount xsi:type="xsd:string">15.75</DollarAmount>
<SurchargeAmount xsi:nil="true"></SurchargeAmount>
<Card_Number xsi:type="xsd:string">############1111</Card_Number>
<Transaction_Tag xsi:type="xsd:string">901975484</Transaction_Tag>
<Track1 xsi:nil="true"></Track1>
<Track2 xsi:nil="true"></Track2>
<PAN xsi:nil="true"></PAN>
<Authorization_Num xsi:type="xsd:string">ET4653</Authorization_Num>
<Expiry_Date xsi:type="xsd:string">1015</Expiry_Date>
<CardHoldersName xsi:type="xsd:string">Donald Kerabatsos</CardHoldersName>
<Address xsi:nil="true"></Address>
<CVDCode xsi:nil="true"></CVDCode>
<CVD_Presence_Ind xsi:type="xsd:string">0</CVD_Presence_Ind>
<ZipCode xsi:nil="true"></ZipCode>
<Tax1Amount xsi:nil="true"></Tax1Amount>
<Tax1Number xsi:nil="true"></Tax1Number>
<Tax2Amount xsi:nil="true"></Tax2Amount>
<Tax2Number xsi:nil="true"></Tax2Number>
<Ecommerce_Flag xsi:type="xsd:string">0</Ecommerce_Flag>
<XID xsi:nil="true"></XID>
<CAVV xsi:nil="true"></CAVV>
<CAVV_Algorithm xsi:nil="true"></CAVV_Algorithm>
<Reference_No xsi:nil="true"></Reference_No>
<Customer_Ref xsi:nil="true"></Customer_Ref>
<Reference_3 xsi:nil="true"></Reference_3>
<Language xsi:nil="true"></Language>
<Client_IP xsi:type="xsd:string">10.1.1.20</Client_IP>
<Client_Email xsi:nil="true"></Client_Email>
<LogonMessage xsi:nil="true"></LogonMessage>
<Error_Number xsi:type="xsd:string">0</Error_Number>
<Error_Description xsi:nil="true"> </Error_Description>
<Transaction_Error xsi:type="xsd:boolean">false</Transaction_Error>
<Transaction_Approved xsi:type="xsd:boolean">true</Transaction_Approved>
<EXact_Resp_Code xsi:type="xsd:string">00</EXact_Resp_Code>
<EXact_Message xsi:type="xsd:string">Transaction Normal</EXact_Message>
<Bank_Resp_Code xsi:type="xsd:string">000</Bank_Resp_Code>
<Bank_Message xsi:type="xsd:string">APPROVED</Bank_Message>
<Bank_Resp_Code_2 xsi:nil="true"></Bank_Resp_Code_2>
<SequenceNo xsi:type="xsd:string">025849</SequenceNo>
<AVS xsi:nil="true"></AVS>
<CVV2 xsi:nil="true"></CVV2>
<Retrieval_Ref_No xsi:type="xsd:string">08184653</Retrieval_Ref_No>
<CAVV_Response xsi:nil="true"></CAVV_Response>
<MerchantName xsi:type="xsd:string">Ralph's</MerchantName>
<MerchantAddress xsi:type="xsd:string">127 Quintana St</MerchantAddress>
<MerchantCity xsi:type="xsd:string">Venice</MerchantCity>
<MerchantState xsi:type="xsd:string">California</MerchantState>
<MerchantCountry xsi:type="xsd:string">US</MerchantCountry>
<MerchantPostal xsi:type="xsd:string">90291</MerchantPostal>
<MerchantURL xsi:type="xsd:string">www.firstdata.com</MerchantURL>
<CTR xsi:type="xsd:string">=========== TRANSACTION RECORD ==========
API Testing
127 Quintana St
Venice, CA 90291
US
www.firstdata.com
TYPE: Pre-Authorization
ACCT: Visa $ 15.75 USD
CARD NUMBER : ############1111
DATE/TIME : 18 Aug 10 09:46:52
REFERENCE # : 002 025849 M
AUTHOR. # : ET4653
TRANS. REF. :
Approved - Thank You 000
Please retain this copy for your records.
Cardholder will pay above amount to card
issuer pursuant to cardholder agreement.
=========================================</CTR>
</types:TransactionResult>
</soap:Body>
</soap:Envelope>7.2 Example 2. Tagged Pre-Authorization Completion
This request illustrates the following:
- using the REST Payeezy Gateway Web Service API with XML message format
- passing authentication credentials in the message as ExactID and Password properties
- completing the Pre-Authorization transaction from Example 1 using the response properties from that transaction
curl -H 'Content-Type: application/xml; charset=UTF-8' \
-H 'Accept: application/xml' \
-d '<?xml version="1.0" encoding="UTF-8"?>
<Transaction>
<ExactID>ExactID</ExactID>
<Password>Password</Password>
<Transaction_Type>32</Transaction_Type>
<Transaction_Tag>901975484</Transaction_Tag>
<Authorization_Num>ET4653</Authorization_Num>
<DollarAmount>15.75</DollarAmount>
</Transaction>' \
https://api.globalgatewaye4.firstdata.com/transactionThe resulting request headers and response:
POST /transaction HTTP/1.1
User-Agent: curl/7.21.0 (i386-apple-darwin9.8.0) libcurl/7.21.0 OpenSSL/1.0.0a zlib/1.2.5 libidn/1.19
Host:
Content-Type: application/xml; charset=UTF-8
Accept: application/xml
Content-Length: 304
HTTP/1.1 201 Created
Date: Wed, 18 Aug 2010 19:39:51 GMT
Server: Apache
Cache-Control: no-cache
Location: https://api.globalgatewaye4.firstdata.com/transaction/v8.xml/902006933
Content-Length: 2573
Status: 201
Content-Type: application/xml; charset=utf-8
Vary: Accept-Encoding
<?xml version="1.0" encoding="UTF-8"?>
<TransactionResult>
<ExactID>ExactID</ExactID>
<Password></Password>
<Transaction_Type>32</Transaction_Type>
<DollarAmount>15.75</DollarAmount>
<SurchargeAmount></SurchargeAmount>
<Card_Number>############1111</Card_Number>
<Transaction_Tag>902006933</Transaction_Tag>
<Track1></Track1>
<Track2></Track2>
<PAN></PAN>
<Authorization_Num>ET4653</Authorization_Num>
<Expiry_Date>1016</Expiry_Date>
<CardHoldersName>Uli Kunkel</CardHoldersName>
<Address></Address>
<CVDCode></CVDCode>
<CVD_Presence_Ind>0</CVD_Presence_Ind>
<ZipCode></ZipCode>
<Tax1Amount></Tax1Amount>
<Tax1Number></Tax1Number>
<Tax2Amount></Tax2Amount>
<Tax2Number></Tax2Number>
<Ecommerce_Flag>0</Ecommerce_Flag>
<XID></XID>
<CAVV></CAVV>
<CAVV_Algorithm></CAVV_Algorithm>
<Reference_No></Reference_No>
<Customer_Ref></Customer_Ref>
<Reference_3></Reference_3>
<Language></Language>
<Client_IP>10.1.1.20</Client_IP>
<Client_Email></Client_Email>
<LogonMessage></LogonMessage>
<Error_Number>0</Error_Number>
<Error_Description> </Error_Description>
<Transaction_Error>false</Transaction_Error>
<Transaction_Approved>true</Transaction_Approved>
<EXact_Resp_Code>00</EXact_Resp_Code>
<EXact_Message>Transaction Normal</EXact_Message>
<Bank_Resp_Code>000</Bank_Resp_Code>
<Bank_Message>APPROVED</Bank_Message>
<Bank_Resp_Code_2></Bank_Resp_Code_2>
<SequenceNo>025850</SequenceNo>
<AVS></AVS>
<CVV2></CVV2>
<Retrieval_Ref_No>08183837</Retrieval_Ref_No>
<CAVV_Response></CAVV_Response>
<MerchantName>API Testing</MerchantName>
<MerchantAddress>127 - 6768 Front St</MerchantAddress>
<MerchantCity>Vancouver</MerchantCity>
<MerchantProvince>British Columbia</MerchantProvince>
<MerchantCountry>Canada</MerchantCountry>
<MerchantPostal>V6B 2H7</MerchantPostal>
<MerchantURL>www.firstdata.com</MerchantURL>
<CTR>=========== TRANSACTION RECORD ==========
API Testing
127 - 6768 Front St
Vancouver, BC V6B 2H7
Canada
www.firstdata.com
TYPE: Pre-Auth Completion
ACCT: Visa $ 15.75 CAD
CARD NUMBER : ############1111
DATE/TIME : 18 Aug 10 11:38:36
REFERENCE # : 002 025850 M
AUTHOR. # : ET4653
TRANS. REF. :
Approved - Thank You 000
Please retain this copy for your records.
Cardholder will pay above amount to card
issuer pursuant to cardholder agreement.
=========================================</CTR>
</TransactionResult>7.3 Example 3. Tagged Refund
This request illustrates the following:
- using the REST Payeezy Gateway Web Service API with JSON message format
- passing authentication credentials as HTTP Basic Authentication username:password values
- refunding the Tagged Pre-Authorization Completion transaction from Example 2 using the response properties from that transaction
curl -u 'ExactID:Password' \
-H 'Content-Type: application/json; charset=UTF-8' \
-H 'Accept: application/json' \
-d '{
"transaction_type":"34",
"transaction_tag":"902006933",
"authorization_num":"ET4653",
"amount":"15.75"
}' \
https://api.globalgatewaye4.firstdata.com/transactionThe resulting request headers and response:
POST /transaction HTTP/1.1
Authorization: Basic Foo4BarBazAyOjAhcGl0ZXN0
User-Agent: curl/7.21.0 (i386-apple-darwin9.8.0) libcurl/7.21.0 OpenSSL/1.0.0a zlib/1.2.5 libidn/1.19
Host: api.globalgatewaye4.firstdata.com
Content-Type: application/json; charset=UTF-8
Accept: application/json
Content-Length: 110
HTTP/1.1 201 Created
Date: Wed, 18 Aug 2010 19:52:18 GMT
Server: Apache
Cache-Control: no-cache
Location: https://api.globalgatewaye4.firstdata.com/transaction?amount=15.75&...
Content-Length: 1713
Status: 201
Content-Type: application/json; charset=utf-8
Vary: Accept-Encoding
{"merchant_url":"www.firstdata.com",
"cc_number":"############1111",
"secure_auth_required":null,
"cc_cvd_code":null,
"zip_code":null,
"user_name":null,
"reference_no":null,
"cc_expiry":"1012",
"avs":null,
"client_email":null,
"secure_auth_result":null,
"cavv_response":null,
"bank_resp_code":"000",
"password":null,
"merchant_address":"127 Jam St",
"transaction_tag":902010341,
"cardholder_name":"Jackie Treehorn",
"retrieval_ref_no":"08185104",
"gateway_id":"ExactID",
"merchant_country":"US",
"error_description":" ",
"bank_message":"APPROVED",
"cavv":null,
"track1":null,
"tax1_amount":null,
"reference_3":null,
"surcharge_amount":null,
"transaction_type":"34",
"ctr":"=========== TRANSACTION RECORD ==========\nAPI Testing\n127 - 6768 Front St\nVancouver, BC V6B 2H7\nCanada\nwww.firstdata.com\n\nTYPE: Refund\n\nACCT: Visa $ 15.75 CAD\n\nCARD NUMBER : ############1111\nDATE/TIME : 18 Aug 10 11:51:03\nREFERENCE # : 002 025851 M\nAUTHOR. # : RETURN\nTRANS. REF. : \n\n Approved - Thank You 000\n\n\nPlease retain this copy for your records.\n\n=========================================",
"ecommerce_flag":0,
"bank_resp_code_2":null,
"language":null,
"merchant_city":"Malibu",
"logon_message":null,
"tax2_amount":null,
"track2":null,
"transaction_approved":1,
"merchant_postal":"90263",
"transaction_error":0,
"cvd_presence_ind":0,
"xid":null,
"pan":null,
"tax1_number":null,
"exact_resp_code":"00",
"customer_ref":null,
"amount":15.75,
"cavv_algorithm":null,
"cvv2":null,
"cc_address":null,
"sequence_no":"025851",
"merchant_name":"API Testing",
"client_ip":"10.1.1.20",
"merchant_state":"California",
"error_number":0,
"tax2_number":null,
"authorization_num":"RETURN",
"exact_message":"Transaction Normal"}8 Exception Handling
The Payeezy Gateway Web Service API may return error messages in two different forms. An error message is either returned as a Soap Exception or as Response - Error Properties. Various levels of detail are returned with each. The content of each error type is detailed in the follow sections.
8.1 SOAP Exception
SOAP exceptions may be encountered for two broad reasons. One, if a SOAP message is malformed. Two, if the Web Service experiences some sort of general system failure. The SOAP Exception Scenarios section below provides examples for various error scenarios.
Any SOAP exception generated will conform to the SOAP 1.1 protocol. A SOAP exception will contain the following values (elements or attributes).
faultcode - String [var]
- {Read} {minOccurs="1" maxOccurs="1"}
The faultcode will contain one of the following values: - VersionMismatch : The processing part found an invalid namespace for the SOAP Envelope element.
- Client : The Client class or errors indicate that the message was incorrectly formed or did not contain the appropriate information in order to succeed. It is a general indication that the message should not be resent without change.
- Server : The Server class or errors indicate that the message could not be processed for reasons not directly attributable to the contents of the message itself but rather to the processing of the message. The message may succeed at a later point in time.
Client and Server are the most common values returned.
faultstring - String [var]
- {Read} {minOccurs="1" maxOccurs="1"}
A system generated text description of the error. faultactor - String [var]
- {Read} {minOccurs="0" maxOccurs="1"}
The URL of the Web Service. This value is only returned under certain circumstances. The value is generally not returned if an error occurs before or during the deserializing of the SOAP message. The value is generally returned if an error occurs after deserializing the SOAP message. detail - Element
- {Read} {minOccurs="1" maxOccurs="1"}
The detail element is always returned. The detail element may or may not contain details of the error. If details of the error are returned, they will be contained in a child “error” element.
The “error” element is generally not returned if an error occurs before or during the deserializing of the SOAP message. The error element is generally returned if an error occurs after deserializing the SOAP message.
And example of the detail element containing an error element is as follows:
If an “error” element is returned, it will contain the attributes “number”, “description” and “xmlns”. The possible values of the “number” and “description” attributes are described in First Data Payeezy Gateway Web Service API Error Numbers and Descriptions.
8.2 SOAP Exception Scenarios
In example 6.1, a SOAP Exception is shown for a malformed incoming SOAP request. This type or error message format generally occurs when an error is encountered before or during deserialization of an incoming SOAP message. This type of error requires the request to be modified before being sent again.
Example 6.1 SOAP Exception for a Malformed Incoming SOAP Message
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Server was unable to read request. --> There is an
error in XML document (1, 406). --> &lt;SendAndCommit
xmlns='http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-
enc/'&gt; was not expected.</faultstring>
<detail />
</soap:Fault>
</soap:Body>
</soap:Envelope>In example 6.2, a SOAP Exception is shown for an incoming SOAP request containing a null Transaction struct. This message format generally occurs when an error is encountered after deserialization of an incoming SOAP message. This type of error requires the request to be modified before being sent again.
Example 6.2 SOAP Exception for an Incoming SOAP Message Containing a Null Transaction
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>System.Web.Services.Protocols.SoapException: Setup Error at
rpc-enc.Service.SendAndCommit(Transaction Transaction) in C:\Documents
and Settings\defaultuser\VSWebCache\api.globalgatewaye4.firstdata.com\vplug-
in\transaction\rpc-enc\Service.asmx.vb:line 98</faultstring>
<faultactor>http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-
enc/Service.asmx</faultactor>
<detail>
<error number="400" description="Bad Request. Object reference not set
to an instance of a Transaction object." xmlns="http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-enc" />
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>In example 6.3, a SOAP Exception is shown for a general system failure. This message format generally occurs when an error is encountered after deserializing a SOAP message. This type of error usually results from an internal problem within the Payeezy Gateway Web Service API. The same request may work if sent at a later time.
Example 6.3 SOAP Exception for a General System Failure Within the Web Service
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>System.Web.Services.Protocols.SoapException: Setup Error at
rpc-enc.Service.SendAndCommit(Transaction Transaction) in C:\Documents
and Settings\defaultuser\VSWebCache\api.globalgatewaye4.firstdata.com\vplug-
in\transaction\rpc-enc\Service.asmx.vb:line 99</faultstring>
<faultactor>http://api.globalgatewaye4.firstdata.com/vplug-in/transaction/rpc-
enc/Service.asmx</faultactor>
<detail>
<error number="500" description="Internal Server Error. An unknown
error occurred." xmlns="http://api.globalgatewaye4.firstdata.com/vplug-
in/transaction/rpc-enc" />
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>8.3 Response - Error Properties
If an incoming message is successfully received but the transaction not successfully processed, various error indicator properties are returned in the response. The properties may define three broad types of failure.
One, the error properties may indicate that invalid values were sent in the request. Two, the error properties may indicate that some sort of failure occurred while processing the transaction. Three, the error properties may indicate that the transaction was processed normally but still declined. (This is in fact not an actual error. It is described here, as the Merchant’s system may want to treat normal declines as a type of failure.)
An occurrence of the first error type is reflected in the following property values being returned:
Error_Number error number Error_Description error description Transaction_Error "False" Transaction_Approved "False" The error number and error description values that may be returned are defined in First Data Payeezy Gateway Web Service API Error Numbers and Descriptions.
An occurrence of the second error type is reflected in the following property values being returned:
Error_Number "0" Error_Description null Transaction_Error "True" Transaction_Approved "False" Exact_Resp_code error code Exact_Message error message The error code and error message values that may be returned are defined in eCommerce Response Codes (ETG [Payeezy Gateway Transaction Gateway] Codes).
An occurrence of the third error type is reflected in the following property values being returned:
Error_Number "0" Error_Description null Transaction_Error "False" Transaction_Approved "False" Exact_Resp_code "00" Exact_Message "Transaction Normal" Bank_Resp_code bank response code Bank_Message bank response message Bank_Resp_code_2 bank response code 2 (usually null) The error code and error message values that may be returned are defined in Payeezy Gateway Bank Response Codes.
9 API HMAC Security (V12+)
Those merchants wishing to use API V12 or higher must implement the API HMAC hash security calculation. Further information on this subject can be found here (https://support.payeezy.com/hc/en-us/articles/203731149).
Appendix 1. More About Service URLs
NOTE:There is a known bug in the API in Version 9, where the VirtualCard element is specified as type Boolean in the WSDL, but returned as type String in the SOAP response. This will most likely cause an issue in .Net clients which use proxy classes automatically generated based on the WSDL. The workaround is to manually update the type definition for VirtualCard in the automatically generated class.,
Clients using the REST flavor of the API should not be affected by this bug.
-
-
-
Appendix 2. Endpoints and WSDL URLs
-
Below is a comprehensive list of the service URLs:
Version 31 Version 30 Version 29 Version 28 Version 27 -
- This version was skipped.
Version 26 Version 25 Version 24 Version 23 Version 22 Version 21 Version 20 - This version was skipped.
Version 19 Version 18 Version 17 Version 16 Version 15 Version 14 Version 13 Version 12 Version 11 Version 10 Version 9 Version 8 -
-
Appendix 3. API versions and features
Version
Changes V8 Base version (default version if API version is not indicated in the API request) V9 Added Properties: CardCost, TransarmorToken, CardType, EAN, VirtualCard, Level 3 Properties, Debit Bill Pay
Added Transaction Types: 83, 86, 88, 89
Other changes: minOccurs/maxOccurs update, TransArmor support, Valuelink support, Level 3 support
Removed Properties: LogonMessage, ErrorNumber and ErrorDescription
V10 Added Properties: PaypalTransactionDetails, PayerID, GrossAmountCurrencyID, Success, Authorization, Message, CorrelationID, Timestamp
Other changes: PayPal Order Support
V11 Added Properties: SoftDescriptor, DBAName, Street, City, Region, PostalCode, CountryCode, MID, MCC, MerchantContactInfo
V12 Added Properties: FraudSuspected
Other changes: HMAC authentication support
V13 Added TeleCheck support
V14 Replaced Property:
VerificationStr1 replaced with Address element
VerificationStr2 replaced with CVDCode
Added Property: SplitTenderID, TPPID
V15 Added Property: SplitShipmentNumber
V16 Added support for Amex Fraud Mitigation Reply Format Indicators
V17 Added support for DCC and DP
V18 Added support for Fees V19 Added support for Visa Checkout (VCO) V20 This version was skipped V21 Added support for Special Payments V22 Added support for wallet_provider_id V23 Added support for Payment Facilitator V24 Added support for Masterpass V25 Added support for Fraud Detect V26 Added support for SCV gift cards V27 This version was skipped V28 Stored Credentials (Credentials on File) V29 Visa Non Original Credit Account Funding Transaction (NON-OCT AFT) V30 3DS version 2 V31 New format for PayPal error responses. Refer to section 3.1 for more details V32 Foreign Access Code (FAC)