Google Pay™ API V1
Introduction
There are several implementation options for Google Pay™ that support both CRYPTOGRAM_3DS and PAN_ONLY authentication methods.
| Payment option | Description |
|---|---|
| From your mobile application | Payment is made from your mobile application. The application requests encrypted data from Google Pay™ and sends it to the payment gateway. Requires Google Pay™ API integration. |
| From a Web payment page on your side | The merchant requests encrypted payment data from Google Pay™ and sends it to the payment gateway. Requires Google Pay™ API integration. |
| From a Web payment page on the gateway side | The merchant redirects the customer to the payment page on the gateway side, and must meet Google Pay™ requirements: Acceptable Use Policy, Terms of Service. |
How to integrate with Google Pay™ API
Integrate your Android app or website with the Google Pay™ API via Google Pay™ & Wallet Console: Google Pay™ API & Google Pay™ & Wallet Console. For full developer documentation, see the Google Pay™ Web developer documentation. Before publishing your integration, review the Google Pay™ web brand guidelines.
On step 4, when completing the tutorial, specify tokenization type PAYMENT_GATEWAY:
const tokenizationSpecification = {
type: 'PAYMENT_GATEWAY',
parameters: {
'gateway': 'kkbpay',
'gatewayMerchantId': 'YOUR_GATEWAY_MERCHANT_ID'
}
};
gateway= kkbpaygatewayMerchantId= YOUR_GATEWAY_MERCHANT_ID (merchant login in the payment gateway)
After integration you will be assigned a Google Merchant ID displayed in the top-right corner of the Google Pay & Wallet Console.
Integration schemes
Payment from a mobile app
- A customer selects to pay via Google Pay™.
- The application requests masked card data from Google Pay™.
- Google Pay™ returns masked card data to the application.
- The application displays the masked card data to the customer.
- The customer confirms payment.
- The application requests encrypted card data from Google Pay™.
- Google Pay™ encrypts the data using the merchant's public key.
- Google Pay™ returns the encrypted payment data to the application.
- The application sends a Google Pay™ payment request to the payment gateway containing the token from Google Pay™.
- The payment gateway decrypts the received token and processes the payment.
- The payment gateway returns the payment result to the application.
- The application displays the payment result to the customer.
Payment page on the online store side
- The customer creates an order and chooses to pay via Google Pay™.
- The online store generates a request for Google Pay™.
- Google Pay™ generates the encrypted payment data.
- The online store receives the encrypted payment data.
- The online store sends a Google Pay™ payment request with the encrypted data.
- The payment gateway decrypts the data and makes the payment.
- The payment gateway returns the payment result to the online store.
- The payment result is displayed to the customer.
Payment page on the payment gateway side
- A customer creates an order on the merchant's website.
- The merchant registers the order in the payment gateway: One-phase payment or Two-phase payment.
- The payment gateway returns a unique order number and redirect URL.
- The store redirects the customer.
- The customer's browser opens the URL.
- The customer receives the payment form.
- The customer selects Google Pay™ and confirms.
- Payment data is exchanged between the payment gateway and Google Pay™.
- The payment gateway processes the payment.
- The customer is redirected to the final page.
- The final page is opened.
- The payment status is displayed.
Payment via Google Pay™ using 3DS2
This section describes how to make a 3DS2 payment from a merchant's own payment page (not via the hosted payment page).
3DS2 flow description
- Register the order in EPG via
register.do. - Collect card info at the merchant's payment page.
- Call
processform.doorpaymentorder.do. Either request will send the entered PAN to EPG. If the card is eligible for 3DS2, the call will not finish until the 3DS Server collects cardholder browser information. If the 3DS Server is unable to collect browser information, the call will finish unsuccessfully. - Here starts the magic — this is what the hosted payment page actually does.
- In a separate thread (in parallel) — call EPG check API
epg/api/v1/3ds2/inner/check. This API checks if the PAN is eligible for 3DS2 (EPG calls the 3DS Server):- If
completed = false, repeat the call after some time (e.g. 0.5 seconds). - If
is3Ds2Eligible = false, end the parallel process —processform.doorpaymentorder.dowill proceed. - This step may be omitted but is highly recommended. If
threeDSMethodURLis present and not blank, open an iframe on the payment page. In that iframe add a form with a single parameterthreeDSMethodDataand fill it with the value fromthreeDSMethodDataPacked. Submit the form tothreeDSMethodURL. The form will call the appropriate API of the issuer's ACS — leave the iframe as-is, you do not need to monitor when it finishes.
If this step is omitted, the 3DS Server will wait ~10 seconds for ThreeDS Method completion notification from the ACS and will sendthreeDSCompInd = Nin AReq. - Collect cardholder browser info and pass it to the 3DS Server. Two options exist:
- Preferred: Create a second iframe, add an empty form and submit it to
threeDSMethodURLServer(calls the Browser data collection API of the 3DS Server). The 3DS Server will respond with HTML containing JavaScript that collects the required information and submits it automatically. You do not need to monitor when it finishes. - Alternative: Collect cardholder browser information on your own and call the Browser data transfer request directly.
- Preferred: Create a second iframe, add an empty form and submit it to
- Now the 3DS Server should have received the required cardholder browser information and can proceed with sending AReq to the Directory Server.
- If
- The call to
processform.doorpaymentorder.doshould finish and the response should be processed according to the EPG API specification.
Description of the 'check' API
URL: epg/api/v1/3ds2/inner/check
Request parameter: mdOrder (from register.do)
Response (JSON) — some extra fields may be present; the parsing software must ignore them without errors:
| Field | Type | Description |
|---|---|---|
completed | Boolean | Completion indicator. If false, repeat the call after some time. |
is3Ds2Eligible | Boolean | Whether the card is eligible for 3DS2. If false, end the parallel process — processform.do or paymentorder.do will proceed. |
threeDSServerTransID | UUID | Transaction identifier in terms of 3DS Server. Must be present if is3Ds2Eligible = true. |
threeDSMethodURL | String | If the issuer's ACS supports ThreeDS Method, contains the URL of that method. Otherwise blank or missing. |
threeDSMethodDataPacked | String | If the issuer's ACS supports ThreeDS Method, contains the ThreeDS Method Data (Base64-encoded). Otherwise blank or missing. |
threeDSMethodURLServer | String | URL of the 3DS Server API for collecting cardholder browser information. |
Why so difficult
When processform.do or paymentorder.do is called, EPG calls the 3DS Server to check whether the card is eligible for 3DS2 (at this point the 3DS Server generates threeDSServerTransID). If the card is eligible, EPG calls the 3DS Server to perform authentication (make AReq), but to do so the 3DS Server needs cardholder browser information. It waits until it receives this information for the threeDSServerTransID. If it receives it within the configured period, it makes the AReq request and sends it to the Directory Server. If it does not receive the information, it is unable to make the request and responds with an unsuccessful response to EPG.
3DS2 flow diagrams
The workflows described above are shown in the schemes below.
Browser-based frictionless flow
Browser-based challenge flow
Requirements for the payment page on merchant's side
The payment page on the merchant's side must meet the following requirements.
- Must be able to redirect to 3-D Secure server if the decrypted token contains payment method
CARD. - Must contain the Google Pay™ button.
- Must contain a script that checks whether the Google Pay™ button can be displayed:
paymentsClient.isReadyToPay({allowedPaymentMethods: allowedPaymentMethods})
.then(function(response) {
if (response.result) {
addGooglePayButton();
}
})
.catch(function(err) {
console.error(err);
});
function addGooglePayButton() {
var button = document.createElement('button');
button.className = 'google-pay';
button.appendChild(document.createTextNode('Google Pay'));
button.addEventListener('click', onGooglePaymentButtonClicked);
document.getElementById('container').appendChild(button);
}
- Google JavaScript must be enabled:
- For testing, the environment must be
TEST:
var paymentsClient =
new google.payments.api.PaymentsClient({environment: 'TEST'});
- Must contain a
paymentDataRequestobject. Use the following test values:gateway— kkbpaygatewayMerchantId— as provided during sandbox on-boarding
function getGooglePaymentDataConfiguration() {
return {
merchantId: '00000000000000000000', // for environment 'TEST' — not required
transactionInfo: {
totalPriceStatus: 'FINAL',
totalPrice: '123.45', // amount in major units
currencyCode: 'EUR' // ISO 4217
},
paymentMethodTokenizationParameters: {
tokenizationType: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'kkbpay',
gatewayMerchantId: 'YOUR_GATEWAY_MERCHANT_ID'
}
},
allowedPaymentMethods: ['CARD', 'TOKENIZED_CARD'],
cardRequirements: {
allowedCardNetworks: ['MASTERCARD', 'VISA']
}
};
}
- After clicking the Google Pay™ button, pass
paymentDataRequestto Google Pay™:
var paymentDataRequest = getGooglePaymentDataConfiguration();
paymentsClient.loadPaymentData(paymentDataRequest).then(function(paymentData){
processPayment(paymentData);
}).catch(function(err){
console.error(err);
});
- The value for the main version of the page must be obtained from Google after performing checks: integration checklist.
Using individual keys
For direct integration with Google Pay™ without using Kyrgyzkommertsbank as payment provider, generate an individual key pair via the Merchant Portal and upload it to your Google account.
Create key pair
- Log in to your personal area and open the Certificates section.
- Go to the Google Pay™ tab.
- Click Create key pair.
- Fill in the Google ID field with your Google Merchant ID (from Google API integration), then click Confirm.
- The created key pair will appear in the keys list.
Download public key
- Open the Certificates section → Google Pay™ tab.
- Click the actions menu next to your certificate and select Download key.
- Save the file to your desired location.
Edit Google ID
- Open the Certificates section → Google Pay™.
- Click the actions menu and select Edit.
- Update the Google ID field, then click Confirm.
Disable certificate
- Open the Certificates section.
- Select the required payment service (Apple Pay, Google Pay™, or Samsung Pay).
- Click the actions menu and select Disable key, then click Confirm.
| Setting | Description |
|---|---|
| Only allowed | Disabled certificates are not displayed in the keys list. |
| All positions | Disabled certificates are shown; Allowed column shows No. |
Payment Provider API
This section describes the REST API methods for processing Google Pay™ payments. Merchants can submit payments directly to the EPG from their own checkout page, or integrate via the EPG hosted payment page.
Order registration request
Depending on whether one-phase or two-phase payments are used, one of the following methods is used to register an order:
register.do— for one-phase paymentsregisterPreAuth.do— for two-phase payments
These requests are designed to register orders in the SmartVista E-Commerce Payment Gateway and have the same set of parameters.
Request parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
userName | AN 1..100 | Yes | Login of the API user on whose behalf requests are processed for a specific merchant. |
password | String | Yes | User's password. |
orderNumber | AN 1..32 | No | Number (identifier) of the order in the merchant's online store system. Unique for every store. If the Require system to generate order numbers permission is enabled, the order number is generated automatically. |
amount | N 1..12 | Yes | Order amount in the minor denomination (for example, cents). |
currency | N3 | No | Payment currency code in the ISO 4217 format. If not specified, the default currency code is used. |
returnUrl | ANS 1..2000 | No | URL to which the customer is redirected after a successful payment. |
description | ANS 1..600 | No | Free form description of the order. |
language | A2 | No | Language code in the ISO 639-1 format. If unspecified, the default language from the merchant settings is used. Error messages are also returned in this language. |
clientId | ANS 1..255 | No | Customer identifier in the merchant system. Mandatory for bindings. |
sendPaymentLink | A3..10 | No | Channel to send the payment link: SMS, EMAIL, or both (comma-separated). Requires corresponding merchant permissions. |
email | ANS..* | Conditional | Customer's email address. Required if sendPaymentLink = EMAIL. |
phone | AN..255 | Conditional | Customer's phone number. Required if sendPaymentLink = SMS. |
name | AN 1..30 | No | Customer's full name. |
jsonParams[] | AN..1024 | No | Fields used to store additional information: {"param":"value","param2":"value2"}. Parameter name ≤ 255 chars, value ≤ 1024 chars. |
sessionTimeoutSecs | N..9 | No | Lifespan of the order in seconds. Overrides merchant and system defaults. Ignored if expirationDate is set. Cannot exceed the session.timeout.milliseconds.max system setting. Default is 1200 seconds. |
expirationDate | ANS | No | Date and time when the order is terminated, format: yyyy-MM-ddTHH:mm:ss. If not specified, sessionTimeoutSecs is used. |
bindingId | AN..255 | No | Identifier of a previously created binding. If sent, the order can only be paid by that binding, and the payer is redirected to a page requiring CVC entry. |
features | String | No | 3-D Secure mode: FORCE_SSL — processed as SSL; FORCE_TDS — processed as 3DS2. Requires corresponding merchant permissions. |
paymentWay | AN..32 | No | Payment method:
CARD, CARD_BINDING, CARD_MOTO, UPOP_MOTO, UPOP, FILE_BINDING, P2P, APPLE_PAY, MASTERPASS, OTHER, GOOGLE_PAY, SAMSUNG_PAY, NSPK_E_CERT, FASTPAYMENT_QR, MPU, WAVE.
Custom methods can be defined via jsonParams[]. |
recurrenceType | String | Yes (recurring) | Recurring payment handling: AUTO — scheduled by EPG; MANUAL — scheduled by merchant. Not used in registerPreAuth.do. |
recurrenceFrequency | String | Conditional | Mandatory for AUTO installments and recurring payments; ignored for MANUAL. Not used in registerPreAuth.do. |
recurrenceStartDate | N8 | Yes (recurring) | Start date in YYYYMMDD format. Minimum value is tomorrow for AUTO payments. Not used in registerPreAuth.do. |
recurrenceEndDate | N8 | Yes (installment) | End date in YYYYMMDD format. Used for installment and AUTO recurring payments; ignored for MANUAL. Not used in registerPreAuth.do. |
externalFee | Conditional | Fee amount in minor denomination. Used only if the EXTERNAL_FEE_ALLOWED option is enabled. If provided, the fee is not calculated in SVFE. | |
amountECert | N 1..19 | Conditional | Transaction amount paid using the NSPK electronic certificate. Present if NSPK E-Certificate is allowed for the acquirer and merchant. |
orderBundle | JSON array | Conditional | List of ordered items. Available if Include Cart Items is enabled in payment page settings. See example below. |
pageView | ANS..20 | No | Customer's payment interface format: DESKTOP (default) or MOBILE. Custom prefix can be specified (e.g. iphone). |
installmentTotalAmount | N 1..12 | Conditional | Total order amount. Mandatory if any other installment parameter is present. |
installmentSingleAmount | N 1..12 | Conditional | Amount of a single installment payment (excluding the first). Mandatory if any other installment parameter is present. |
installmentNumber | N 1..2 | Conditional | Number of installments planned (including the first). Mandatory if any other installment parameter is present. |
airlineData[] | No | Airline data object. Can be transferred if the Airline data allowed permission is enabled. | |
tipAmount | N 1..12 | No | Amount of the tip. Added to the main order amount and transferred to SVFE separately in the DE54 field. Supported only for register.do. |
tipRecipientCardNumber | N13..19 | Conditional | Card number of the tip recipient. Required if tipAmount is present. Supported only for register.do. |
bindingManagedByMerchant | No | true — bindings managed by merchant; false — managed by acquirer or EPG (default). | |
bindingUsage | Conditional | Card-on-File transaction type: saveCard or paymentBySavedCard. Only if bindingManagedByMerchant = true. | |
transactionInitiator | No | Transaction originator: CIT — cardholder-initiated; MIT — merchant-initiated. | |
recurringPaymentManagedByMerchant | No | true — recurring payments managed by merchant; false — managed by acquirer or EPG (default). | |
recurringPaymentForm | No | Type of recurring payment: recurring or installment. Mandatory if recurringPaymentManagedByMerchant = true. | |
recurringExpiry | N8 | No | Recurring payment expiration date in YYYYMMDD format. Default is 99991231 if empty. |
originalTransactionData | JWS | No | Transaction Data block. Present if recurringPaymentManagedByMerchant = true. |
originalDsTransId | JWS | No | Directory Server Transaction ID, UUID (3DS2 only). Present if recurringPaymentManagedByMerchant = true. |
originalAcsTransId | JWS | No | Original transaction identifier in ACS (3DS2 only). Present if recurringPaymentManagedByMerchant = true. |
originalInitTransactionDate | N8 | No | Initiating transaction date (3DS2 only). Present if recurringPaymentManagedByMerchant = true. |
originalInstallmentNumber | N1..99 | No | Initiating installment payment number. Present if recurringPaymentManagedByMerchant = true and recurringPaymentForm = installment. |
installmentTotalAmount, installmentSingleAmount, and installmentNumber. The recurrenceEndDate and recurrenceFrequency parameters are required for installments.Transaction Data block
A single signed data block used to transfer all original transaction data fields to and from a PCI DSS merchant, instead of multiple separate fields. An RSA key pair with CertificateType.TRANSACTION_DATA_SIGNATURE must be generated for the merchant.
| Field | Description |
|---|---|
| Header | |
alg | Algorithm (RS256). |
kid | ID of the corresponding record in the key_mgmt_certificate table. |
typ | Header type (JOSE). |
merchantLogin | Login of the merchant. |
| Payload | |
mdOrder | Reserved for future use. |
transDate | Reserved for future use. |
networkReferenceData | Network reference data returned from the authorization host. |
transactionDataElements | Data elements of the authorization request. |
isSsl | Specifies whether 3DS2 authentication was not performed for the transaction. |
dsTransId | Directory Server Transaction ID, UUID (3DS2 only). |
acsTransId | Transaction ID in ACS (3DS2 only). |
initTransactionDate | Initiating transaction date (3DS2 only). |
version | Constant value of 1. Reserved for future use. |
panSalt | Base64-encoded 16-byte random salt. |
panHash | Base64 SHA-256 hash of byte[] = PAN.getBytes + salt.bytes. |
recurringPaymentManagedByMerchant=true or bindingManagedByMerchant=true; a different merchantLogin is used; the key in the JWS header cannot be found; or signature validation fails.Response parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
orderId | ANS36 | No | Unique order number generated by EPG. Absent if registration failed. |
formUrl | AN..512 | No | URL of the payment page to which the customer should be redirected. Absent if registration failed. |
errorCode | N 1..3 | No | Response code: 0 — successful; any other number — error. |
errorMessage | AN 1..512 | No | Description of the error in the language sent in the language parameter. |
recurrenceId | N6 | Yes (recurring) | Identifier for the series of all subsequent payments until the recurrence period ends. |
Error codes
| Code | Message | Description |
|---|---|---|
| 0 | No system error. | No errors. |
| 1 | Order with given order number has already been processed or the childId is incorrect. | The order number is already associated with a completed order, or childId is invalid. Typically caused by duplicate order numbers or incorrect data. |
| 1 | Order with this number was registered, but was not paid. | A payment processing issue has occurred. |
| 1 | Submerchant is blocked or deleted. | The submerchant's account is blocked or has been deleted. |
| 3 | Unknown currency. | The specified currency is not registered in the system. |
| 4 | Order number / Merchant user name / Amount / Return URL / Password is not specified or cannot be empty. | A required parameter value was not specified in the request. |
| 5 | Incorrect value of a request parameter. | A parameter value was specified incorrectly. |
| 5 | Access is denied. | The user does not have the necessary permissions. |
| 5 | Merchant must change the password. | A merchant needs to update their password for security reasons. |
| 5 | Invalid jsonParams[]. | A parameter in jsonParams has an incorrect value or the JSON syntax is invalid. |
| 7 | System error. | Software or hardware issue or malfunction. |
| 14 | PaymentWay is invalid. | The specified payment method is not accepted by the system or the merchant. |
Request example
http://<host:port>/payment/rest/register.do?userName=apiuser&password=apiuserpassword&orderNumber=26122017090900&amount=888¤cy=978&returnUrl=http://www.return.url.com
Example of the orderBundle parameter
"orderBundle": {
"cartItems": {
"items": [
{
"name": "item1",
"positionId": 1,
"quantity": { "value": 2.0, "measure": "quantity" },
"itemAmount": 3025,
"itemCode": "code1"
},
{
"name": "item2",
"positionId": 2,
"quantity": { "value": 2.0, "measure": "quantity" },
"itemAmount": 3025,
"itemCode": "code2"
}
]
}
}
Response example
{"orderId":"5f9adf5a-4796-4668-9285-07adf3c9a1aa","formUrl":"http://10.7.32.60/payment/merchants/Merchant/payment_en.html?mdOrder=5f9adf5a-4796-4668-9285-07adf3c9a1aa"}
Merchant-side Google Pay™ implementation: payment APIs
Merchants can use Google Pay™ directly on their own checkout page and submit the payment to EPG. The following requests are supported:
- Payment request (
paymentorder.do) - Request for Google Pay™ payment with decrypted data
- Request for Google Pay™ payment with an encrypted token as JSON
- Request for Google Pay™ Payment with Base64-encoded encrypted token
Payment request
The paymentorder.do method is used for a payment request. The payment card data is validated in accordance with the table below. Only POST requests are supported.
| Name | Description | Validation |
|---|---|---|
PAN | Full card number | Luhn validation — number of digits ranges from 13 to 19. |
CVC | Card Verification Code | Three or four digits. |
YYYY, MM | Year, month of card expiration | Current or future date. If the card expires in the current month, payment is possible until end of the month. |
TEXT | Cardholder name | Acceptable characters: Latin letters, 0–9, $, ), (, -, ., space. Must start with a letter. Min 1 / max 26 characters. Null is valid. |
Request parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
userName | AN 1..100 | Yes | Login of the API user on whose behalf requests are processed for a specific merchant. |
password | String | Yes | User's password. |
MDORDER | ANS36 | Yes | Order number generated by EPG after the registration of the order. |
$PAN | N 13..19 | Yes | Card number. |
$CVC | N3..4 | Conditional | Card security code (CVV2/CVC2). Mandatory unless the merchant has the Can pay without CVV2/CVC2 option enabled. |
YYYY | N..4 | Conditional | Year when the card expires. |
MM | N..2 | Conditional | Month when the card expires. |
$EXPIRY | N..6 | Conditional | Card expiry date in YYYYMM format. Either $EXPIRY or both MM and YYYY must be specified. |
TEXT | A..512 | No | Cardholder name. |
language | A..2 | Conditional | Language of the information or error message returned in the response. |
ip | AN..19 | No | IP address of the customer. |
email | ANS..* | No | Customer's email address for notifications. |
bindingNotNeeded | Boolean | No | true — disables binding creation after successful payment. false — a successful payment may result in binding creation (default). |
jsonParams[] | AN..1024 | No | Additional information fields: {"param":"value"}. Parameter name ≤ 255 chars, value ≤ 1024 chars. |
threeDS2Params[] | Conditional | 3-D Secure 2 protocol authentication parameters (JSON structure). Optional for browser-based, mandatory for application-based authentication. | |
clientBrowserInfo | No | JSON structure containing client browser information for 3DS2. | |
threeDSCompInd | String | No | Whether the 3DS Method Completion notification was received: Y — received; N — not received. |
clientId | ANS 1..255 | No | Customer identifier in the merchant system. Mandatory for bindings. |
bindingId | AN..255 | No | Identifier of a previously created binding. If sent, order can only be paid by that binding. |
dccState | AN..32 | No | Dynamic Currency Conversion state: USED — initiated with updated currency amount; DECLINED — initiated with original amount. |
dccUuid | ANS36 | No | UUID of dynamic currency conversion data. |
threeDs2ReturnUrl | ANS 1..512 | No | Return URL for user redirect from issuer ACS after 3DS2 authentication. If not specified, user is redirected to EPG URL. |
aReqFieldsOverride | No | JSON structure containing AReq override data for the specific transaction. | |
originalDsTransId | JWS | No | Directory Server Transaction ID, UUID (3DS2 only). Present if recurringPaymentManagedByMerchant = true. |
originalAcsTransId | JWS | No | Original transaction identifier in ACS (3DS2 only). |
originalInitTransactionDate | N8 | No | Initiating transaction date (3DS2 only). |
originalInstallmentNumber | N1..99 | No | Initiating installment payment number. |
Response parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
errorCode | N 1..3 | Yes | Code of the error that occurred during the payment process. |
errorMessage | AN 1..512 | No | Description of the error in the language sent in the language parameter. |
info | AN..512 | Yes | Result of the payment attempt: Your order is proceeded, redirecting...; Operation declined...; Sorry, payment cannot be completed...; Payment declined. Please, contact the merchant / your bank...; Cannot connect to your bank...; Processing timeout... |
redirect | AN..512 | No | URL to which the customer is redirected after payment, depending on the result. |
termUrl | AN..512 | No | Return address from ACS for the customer to complete payment. Used in payments requiring additional ACS authentication. |
acsUrl | AN..512 | No | URL of the ACS server. Used in payments requiring additional ACS authentication. |
paReq | AN..512 | Conditional | Payer Authentication Request (3-D Secure 1). Message sent from MPI to ACS via cardholder device to authenticate the cardholder. |
cReq | AN..512 | Conditional | Challenge Request message (3-D Secure 2). Must be present if a cardholder challenge is required. |
cardholderInfo | ANS..128 | No | Optional information displayed to the cardholder on a Frictionless transaction. Received from ACS or the issuer (3DS2 only). |
additionalResponseCodes | AN..1024 | No | Result of cardholder billing address check (AVS). See additionalResponseCodes block below. |
orderStatusCode | N2 | No | Numeric code specifying order status in EPG. See orderStatusCode values table below. |
orderStatusName | AN 1..100 | No | Order processing status: started, payment_approved, payment_declined, payment_void, payment_deposited, refunded, card_added, card_modified, card_verified, recurring_template_added. |
transactionData | JWS | No | See Transaction Data block description below. |
Parameters of the additionalResponseCodes block
| Name | Type | Mandatory | Description |
|---|---|---|---|
type | AN..3 | No | Type of additional response code. Only available value: AVS. |
responseCode | A1 | No | AVS response code. |
responseMessage | AN..512 | No | AVS response message. |
Transaction Data block
A single signed data block used to transfer all original transaction data fields to and from a PCI DSS merchant. An RSA key pair with CertificateType.TRANSACTION_DATA_SIGNATURE must be generated for the merchant.
| Field | Description |
|---|---|
| Header | |
alg | Algorithm (RS256). |
kid | ID of the corresponding record in the key_mgmt_certificate table. |
typ | Header type (JOSE). |
merchantLogin | Login of the merchant. |
| Payload | |
mdOrder | Reserved for future use. |
transDate | Reserved for future use. |
networkReferenceData | Network reference data returned from the authorization host. |
transactionDataElements | Data elements of the authorization request. |
isSsl | Specifies whether 3DS2 authentication was not performed. |
dsTransId | Directory Server Transaction ID, UUID (3DS2 only). |
acsTransId | Transaction ID in ACS (3DS2 only). |
initTransactionDate | Initiating transaction date (3DS2 only). |
version | Constant value of 1. Reserved for future use. |
panSalt | Base64-encoded 16-byte random salt. |
panHash | Base64 SHA-256 hash of byte[] = PAN.getBytes + salt.bytes. |
recurringPaymentManagedByMerchant=true or bindingManagedByMerchant=true; a different merchantLogin is used; the key in the JWS header cannot be found; or signature validation fails.Error codes
| Code | Message | Description |
|---|---|---|
| 0 | No system error. | No errors. |
| 5 | There are no more payment attempts. | |
| 5 | System or internal error. |
orderStatusCode values
| Code | Description |
|---|---|
| 0 | Order registered, but not paid. Not the final status — the order can be paid again. Intermediary statuses observable via getOrderStatusExtended.do. |
| -1 | Replaces the decline status when none of the specified statuses is suitable. |
| 1 | Transaction approved (one-phase payment) / Preauthorization amount put on hold (two-phase payment). |
| 2 | Amount deposited successfully. |
| 3 | Transaction reversed. Final status. |
| 4 | Transaction refunded. |
| 6 | Transaction declined. Final status. |
| 7 | Card added. |
| 8 | Card updated. |
| 9 | Card verified. |
| 10 | Recurring template added. |
Request example
http://<host:port>/payment/rest/paymentorder.do?userName=apiuser&password=apiuserpassword&MDORDER=aca0f48d-9e99-4437-9335-a50a42c363da&$PAN=4000010000000050&$CVC=123&YYYY=2020&MM=06&TEXT=Card Holder&language=EN
Response example — no additional ACS authentication required
{"redirect":"https://example.com/epg/merchants/root/finish.html?orderId=ffd85ad3-1851-430f-99da-a78ecd228d4d&lang=en&status=payment_deposited","info":"Your order is proceeded, redirecting...","errorCode":0,"orderStatusCode":2,"orderStatusName":"payment_deposited"}
Response example — 3DS payment requiring ACS authentication
{"info":"Your order is proceeded, redirecting...","acsUrl":"http://10.7.32.60:6001/acs/pareq","paReq":"eJxVUdFy...","termUrl":"http://10.7.32.60/payment/rest/finish3ds.do","errorCode":0}
acsUrl) via a POST request.Return to the payment gateway from ACS: In the classic scheme, ACS authenticates the cardholder and redirects them to EPG sending PARes. If successful, EPG authorizes the order.
Return to the merchant from ACS using Finish 3DS: ACS authenticates the cardholder and redirects them to the merchant. The merchant transfers PARes to EPG via
finish3dsPayment.do.Request for Google Pay™ payment with decrypted data
The /api/v1/googlepay/payment/decrypted method is used to process Google Pay™ payments using decrypted payment data (cleartext PAN) so that EPG could pass this data to SVFE as is (without decryption).
This request is authenticated with the userName and password parameters that must be transferred.
Request parameters
The request includes common digital wallet request parameters and the parameters described below.
| Name | Type | Mandatory | Description |
|---|---|---|---|
userName | AN 1..100 | Yes | Login of the API user on whose behalf requests are processed for a specific merchant. |
password | String | Yes | User's password. |
paymentData[] | Not applicable | Yes | Decrypted payment data (see the paymentData block description). For the format of Payment Data Keys, see Non-tokenized card and Tokenized card in Google documentation. |
amount | N 1..12 | No | Order amount in the minor denomination (for example, cents). |
currencyCode | N3 | No | Payment currency code in the ISO 4217 format. |
clientBrowserInfo | Not applicable | No | JSON structure containing the client browser information for 3DS2. |
Parameters of the paymentData block
| Name | Type | Mandatory | Description |
|---|---|---|---|
gatewayMerchantId | String | Yes | Payment gateway merchant identifier. |
paymentMethod | String | Yes | Type of the payment credential. |
paymentMethodDetails[] | Object | Payment method data is specified in the paymentMethodDetails block. | |
messageId | String | Yes | Unique ID that identifies the message in case it must be revoked or located at a later time. |
messageExpiration | String | Yes | Date and time at which the message expires as UTC milliseconds since epoch. Integrators should reject any message that is expired. |
Response parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
error | AN 1..512 | No | Description of the error in the language sent in the language parameter. |
errorCode | N 1..3 | No | Response code: 0 — successful transaction; any other number — an error occurred. |
lookup | Boolean | No | Specifies whether LookUp checks are used: true — enabled; false — disabled. Displayed if the Lookup feature is configured in EPG. |
orderStatus[] | No | Status of the order after processing the request as it is passed in the getOrderStatusExtended method. | |
success | Boolean | Yes | Result of the request: true — successfully processed; false — processing failed. |
data[] | Not applicable | No | Block with the order details (see data block below). |
Format of the data block
| Name | Type | Mandatory | Description |
|---|---|---|---|
orderId | ANS36 | Yes | Unique order number generated by EPG after the registration of the order. |
Request example (PAN only)
http://<host:port>/epg/api/v1/googlepay/payment/decrypted?userName={user}&password={password}
{
"merchant": "5010000",
"mdOrder": "f903e52a-54ca-4c9f-aa57-732333710bdf",
"additionalParameters": {
"paramName": "paramValue"
},
"description": "desc",
"paymentData": {
"gatewayMerchantId": "510000",
"paymentMethod": "CARD",
"paymentMethodDetails": {
"authMethod": "PAN_ONLY",
"pan": "4000010000000001",
"expirationMonth": 7,
"expirationYear": 2029
},
"messageId": "some-message-id",
"messageExpiration": "1577862"
},
"language": "en",
"preAuth": true,
"currencyCode": "840",
"amount": 70,
"ip": "127.0.0.1",
"customerBillingAddress": {
"billAddrCity": "billAddrCity value"
}
}
Request example (Cryptogram 3DS)
http://<host:port>/epg/api/v1/googlepay/payment/decrypted?userName=api&password=1
{
"orderNumber": "2020122adaddw31666340992",
"merchant": "testapi",
"additionalParameters": { "DE22": "100" },
"description": "uuu",
"paymentData": {
"gatewayMerchantId": "192543",
"messageExpiration": "1671193200719",
"messageId": "some-message-id",
"paymentMethod": "CARD",
"paymentMethodDetails": {
"expirationYear": 2049,
"expirationMonth": 12,
"pan": "4000010000000001",
"authMethod": "CRYPTOGRAM_3DS",
"eciIndicator": "07",
"cryptogram": "/wABCDEFLc6CgzairNjvQVcABCD="
},
"language": "ru",
"preAuth": false,
"currencyCode": "840",
"amount": 6050,
"ip": "127.0.0.1",
"returnUrl": "https://example.com/"
}
}
Response example (success)
{
"orderStatus": {
"errorCode": "0",
"errorMessage": "Success",
"orderNumber": "2020122adaddw31666340992",
"amount": 6050,
"currency": "840",
"date": 1610359322132,
"ip": "127.0.0.1",
"merchantOrderParams": [{ "name": "DE22", "value": "100" }],
"attributes": [{ "name": "mdOrder", "value": "fee466e1-03d3-400f-9a0e-93f607495f73" }],
"cardAuthInfo": {
"expiration": "202107",
"secureAuthInfo": { "eci": 7 },
"pan": "400001**0050"
}
}
}
Response example (error)
{
"errorCode": 1,
"errorMessage": "Order number is duplicated, order with given order number is processed already",
"success": false,
"error": {
"code": "1",
"description": "Order number is duplicated, order with given order number is processed already",
"message": "Order number is duplicated, order with given order number is processed already"
}
}
Request for Google Pay™ payment with an encrypted token as JSON
A Google Pay™ transaction that uses encrypted payment data (DPAN) transfers a token (paymentToken) to EPG. The payment token is a JSON structure that contains Google Pay™ keys (intermediateSigningKey[], signedMessage) and an encrypted token (PAN/DPAN, and other). Once EPG receives the /api/v1/googlepay/payment/encrypted request, it decrypts the token using private keys.
The request is authenticated — userName and password parameters are required.
Request parameters
The request includes common digital wallet request parameters and the parameters described below.
| Name | Type | Mandatory | Description |
|---|---|---|---|
userName | AN 1..100 | Yes | Login of the API user on whose behalf requests are processed for a specific merchant. |
password | String | Yes | User's password. |
paymentToken[] | JSON | Yes | Payment data (see the paymentToken block description). For the format, see Payment method token structure in Google documentation. |
amount | N 1..12 | No | Order amount in the minor denomination (for example, cents). |
currencyCode | N3 | No | Payment currency code in the ISO 4217 format. |
clientBrowserInfo | Not applicable | No | JSON structure containing the client browser information for 3DS2. |
Response parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
redirect | AN..512 | No | URL to which the customer is redirected after executing the payment. |
info | AN..512 | Yes | Result of the payment attempt (e.g. Your order is proceeded, redirecting... or Operation declined...). |
errorCode | N 1..3 | No | Response code: 0 — successful; any other number — error. |
lookup | Boolean | No | Whether LookUp checks are used. Displayed if the Lookup feature is configured in EPG. |
orderStatus[] | No | Order status after processing, as returned by getOrderStatusExtended. | |
success | Boolean | Yes | true — successfully processed; false — failed. |
data[] | Not applicable | No | Block with the order details. orderId (ANS36, Yes) — unique order number generated by EPG. |
Request example
{
"merchant": "test_merchant",
"paymentToken": {
"signature": "MEUCIAbnHry...",
"intermediateSigningKey": {
"signedKey": "{"keyValue":"MFkwEwYH...","keyExpiration":"1622102613707"}",
"signatures": ["MEUCIFXynvg4S+Qc7Obb..."]
},
"protocolVersion": "ECv2",
"signedMessage": "{"encryptedMessage":"e0GX3ccb...","ephemeralPublicKey":"BBYkGq...","tag":"3cChnP..."}"
}
}
Response example (success)
{
"redirect": "http://localhost:7013/epg/merchants/testapi/finish.html?orderId=da2b2991-c2f3-43f1-966f-c674a9a75b73&lang=en&status=payment_deposited",
"info": "Your order is proceeded, redirecting...",
"errorCode": 0,
"lookup": false,
"orderStatus": {
"errorCode": "0",
"errorMessage": "Success",
"orderNumber": "adawdawdawd2adawd5428834",
"orderStatus": 2,
"actionCode": 0,
"actionCodeDescription": "No error",
"amount": 6050,
"currency": "840",
"date": 1609940764499,
"cardAuthInfo": {
"expiration": "202812",
"authorizationResponseId": "123456",
"secureAuthInfo": { "eci": 7 },
"pan": "521424**0000"
}
},
"success": true,
"data": { "orderId": "da2b2991-c2f3-43f1-966f-c674a9a75b73" }
}
Response example (error)
{
"errorCode": 10,
"errorMessage": "Signature verification offline failed: signing key is missing.",
"success": false,
"error": {
"code": "10",
"description": "Signature verification offline failed: signing key is missing.",
"message": "Signature verification offline failed: signing key is missing."
}
}
Request for Google Pay™ Payment with Base64-encoded encrypted token
The /api/v1/googlepay/encodedtoken/encrypted request is used to process payments using a Google-signed and encrypted payment method token in Base-64 encoding. EPG verifies and decrypts the token.
Request parameters
The request includes common digital wallet request parameters and the parameters described below.
| Name | Type | Mandatory | Description |
|---|---|---|---|
userName | AN 1..100 | Yes | Login of the API user on whose behalf requests are processed for a specific merchant. |
password | String | Yes | User's password. |
paymentToken | String | Yes | Payment data. For technical details on token structure and encryption, see Google documentation. |
amount | N 1..12 | No | Order amount in the minor denomination (for example, cents). |
currencyCode | N3 | No | Payment currency code in the ISO 4217 format. |
clientBrowserInfo | Not applicable | No | JSON structure containing the client browser information for 3DS2. |
Response parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
redirect | AN..512 | No | URL to which the customer is redirected after executing the payment. |
info | AN..512 | Yes | Result of the payment attempt. |
errorCode | N 1..3 | No | Response code: 0 — successful; any other number — error. |
lookup | Boolean | No | Whether LookUp checks are used. Displayed if the Lookup feature is configured in EPG. |
orderStatus[] | No | Order status after processing, as returned by getOrderStatusExtended. | |
success | Boolean | Yes | true — successfully processed; false — failed. |
data[] | Not applicable | No | orderId (ANS36, Yes) — unique order number generated by EPG. |
Request example
/api/v1/googlepay/payment/encodedtoken/encrypted?userName={user}&password={password}
{
"merchant": "m01",
"mdOrder": "6d68883a-df01-42ec-b4ef-245e21287547",
"description": "desc",
"paymentToken": "ew0KICAgICJzaWduYXR1cmUiOiAiTUVZQ0...",
"language": "EN",
"preAuth": true,
"currencyCode": "840",
"amount": 190,
"ip": "127.0.0.1"
}
Response example (success)
{
"redirect": "http://localhost:7013/epg/merchants/testapi/finish.html?orderId=da2b2991-c2f3-43f1-966f-c674a9a75b73&lang=en&status=payment_deposited",
"info": "Your order is proceeded, redirecting...",
"errorCode": 0,
"success": true,
"data": { "orderId": "da2b2991-c2f3-43f1-966f-c674a9a75b73" }
}
EPG-side Google Pay™ integration: payment APIs
Merchants can be integrated with Google Pay™ via EPG using the hosted payment page. The following requests are supported:
- Request for Google Pay™ payment with encrypted token as JSON via hosted payment page
- Request for Google Pay™ payment with Base64-encoded encrypted token via hosted payment page
Request for Google Pay™ payment with encrypted token as JSON via hosted payment page
The /api/v1/googlepay/payment/encrypted-anonymous request is used to process payments using a Google-signed and encrypted payment method token. The paymentToken is passed as a JSON containing Google Pay™ keys (intermediateSigningKey[], signedMessage) and an encrypted token (PAN/DPAN). EPG decrypts it using private keys.
Request parameters
The request includes common digital wallet request parameters and the parameters described below.
| Name | Type | Mandatory | Description |
|---|---|---|---|
paymentToken[] | JSON | Yes | Encrypted payment data. For the format, see Payment method token structure in Google documentation. |
amount | N 1..12 | No | Order amount in the minor denomination (for example, cents). |
currencyCode | N3 | No | Payment currency code in the ISO 4217 format. |
clientBrowserInfo | Not applicable | No | JSON structure containing the client browser information for 3DS2. |
Response parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
redirect | AN..512 | No | URL to which the customer is redirected after executing the payment. |
info | AN..512 | Yes | Result of the payment attempt. |
errorCode | N 1..3 | No | Response code: 0 — successful; any other number — error. |
lookup | Boolean | No | Whether LookUp checks are used. Displayed if configured in EPG. |
orderStatus[] | N3 | No | Order status, as returned by getOrderStatusExtended. |
success | Boolean | Yes | true — successfully processed; false — failed. |
data[] | Not applicable | No | orderId (ANS36, Yes) — unique order number generated by EPG. |
clientBrowserInfo | Not applicable | No | JSON structure containing the client browser information for 3DS2. |
Request example
/api/v1/googlepay/payment/encrypted-anonymous
{
"merchant": "m01",
"mdOrder": "6d68883a-df01-42ec-b4ef-245e21287547",
"paymentToken": {
"signature": "MEUCIAbnHry...",
"intermediateSigningKey": {
"signedKey": "{"keyValue":"MFkwEwYH...","keyExpiration":"1622102613707"}",
"signatures": ["MEUCIFXynvg4S+Qc7Obb..."]
},
"protocolVersion": "ECv2",
"signedMessage": "{"encryptedMessage":"e0GX3ccb...","ephemeralPublicKey":"BBYkGq...","tag":"3cChnP..."}"
}
}
Response example (success)
{
"redirect": "http://localhost:7013/epg/merchants/testapi/finish.html?orderId=da2b2991-c2f3-43f1-966f-c674a9a75b73&lang=en&status=payment_deposited",
"info": "Your order is proceeded, redirecting...",
"errorCode": 0,
"lookup": false,
"orderStatus": {
"errorCode": "0",
"errorMessage": "Success",
"orderNumber": "adawdawdawd2adawd5428834",
"orderStatus": 2,
"actionCode": 0,
"amount": 6050,
"currency": "840",
"cardAuthInfo": {
"expiration": "202812",
"secureAuthInfo": { "eci": 7 },
"pan": "521424**0000"
}
},
"success": true,
"data": { "orderId": "da2b2991-c2f3-43f1-966f-c674a9a75b73" }
}
Response example (error)
{
"errorCode": 10,
"errorMessage": "Signature verification offline failed: signing key is missing.",
"success": false,
"error": {
"code": "10",
"description": "Signature verification offline failed: signing key is missing.",
"message": "Signature verification offline failed: signing key is missing."
}
}
Request for Google Pay™ payment with Base64-encoded encrypted token via hosted payment page
The api/v1/googlepay/payment/encodedtoken/encrypted-anonymous request is used to process payments using a Google-signed and encrypted payment method token in Base-64 encoding via the EPG hosted payment page.
Request parameters
The request includes common digital wallet request parameters and the parameters described below.
| Name | Type | Mandatory | Description |
|---|---|---|---|
paymentToken | String | Yes | Payment data. |
amount | N 1..12 | No | Order amount in the minor denomination (for example, cents). |
currencyCode | N3 | No | Payment currency code in the ISO 4217 format. |
clientBrowserInfo | Not applicable | No | JSON structure containing the client browser information for 3DS2. |
Response parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
redirect | AN..512 | No | URL to which the customer is redirected after executing the payment. |
info | AN..512 | Yes | Result of the payment attempt. |
errorCode | N 1..3 | No | Response code: 0 — successful; any other number — error. |
lookup | Boolean | No | Whether LookUp checks are used. Displayed if configured in EPG. |
orderStatus[] | No | Order status, as returned by getOrderStatusExtended. | |
success | Boolean | Yes | true — successfully processed; false — failed. |
data[] | Not applicable | No | orderId (ANS36, Yes) — unique order number generated by EPG. |
Request example
http://<host:port>/epg/api/v1/googlepay/payment/encodedtoken/encrypted-anonymous
{
"merchant": "m01",
"mdOrder": "6d68883a-df01-42ec-b4ef-245e21287547",
"description": "desc",
"paymentToken": "ew0KICAgICJzaWduYXR1cmUiOiAiTUVZQ0...",
"language": "EN",
"preAuth": true,
"currencyCode": "840",
"amount": 190,
"ip": "127.0.0.1"
}
Response example (success)
{
"redirect": "http://localhost:7013/epg/merchants/testapi/finish.html?orderId=da2b2991-c2f3-43f1-966f-c674a9a75b73&lang=en&status=payment_deposited",
"info": "Your order is proceeded, redirecting...",
"errorCode": 0,
"success": true,
"data": { "orderId": "da2b2991-c2f3-43f1-966f-c674a9a75b73" }
}
Response example (error)
{
"errorCode": 10,
"errorMessage": "Signature verification offline failed: signing key is missing.",
"success": false
}
Merchant-side Google Pay™ implementation: non-payment APIs
The following APIs are provided to decrypt payment token data without initiating a payment request for authorization to SVFE:
- Request for Google Pay™ data decryption from encrypted token as JSON
- Request for Google Pay™ data decryption from Base64 encoded encrypted token
Request for Google Pay™ data decryption from encrypted token as JSON
This request contains the Google-signed and encrypted payment method token. This API endpoint is designed to decrypt the payment token to retrieve the underlying payment data. To initiate the request, the /api/v1/googlepay/token/decrypt method is used.
Request parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
merchant | AN 1..100 | Yes | Merchant login to access EPG. |
paymentToken[] | JSON | Yes | Encrypted payment data. For the format, see Payment method token structure in Google documentation. |
Response parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
errorCode | N 1..3 | Yes | 0 — decryption completed without errors. Other codes indicate an error. |
success | Boolean | No | true — successfully processed; false — failed. |
paymentData[] | Object | No | Parameters from the paymentData block (see below). |
Format of the paymentData block
| Name | Type | Mandatory | Description |
|---|---|---|---|
gatewayMerchantId | String | Yes | Payment gateway merchant identifier. |
paymentMethod | String | Yes | Type of the payment credential. |
paymentMethodDetails[] | Object | Yes | Payment method data specified in the paymentMethodDetails block. |
messageId | String | Yes | Unique ID that identifies the message. |
messageExpiration | String | Yes | Expiry time as UTC milliseconds since epoch. Integrators should reject expired messages. |
Request example
http://<host:port>/epg/api/v1/googlepay/token/decrypt
{
"merchant": "testapi",
"paymentToken": "ew0KICAgICJzaWduYXR1cmUiOiAiTUVZQ0..."
}
Response example (success)
{
"errorCode": 0,
"paymentData": {
"gatewayMerchantId": "500000",
"paymentMethod": "CARD",
"paymentMethodDetails": {
"authMethod": "PAN_ONLY",
"pan": "4000010000000050",
"expirationMonth": 7,
"expirationYear": 2021
},
"messageId": "some-message-id",
"messageExpiration": "1577862000000"
}
}
Response example (error)
{
"errorCode": 10,
"errorMessage": "Signature verification offline failed: signing key is missing.",
"success": false,
"error": {
"code": "10",
"description": "Signature verification offline failed: signing key is missing.",
"message": "Signature verification offline failed: signing key is missing."
}
}
Request for Google Pay™ data decryption from Base64 encoded encrypted token
The /api/v1/googlepay/encodedtoken/decrypt method is used to decrypt Google Pay™ payment data passed to EPG as a Base64 encoded string which contains the payment token object. EPG does not transfer the transaction for authorization to SVFE. The request contains a payment token object (a Base64-encoded serialized JSON object). EPG decodes the payment data and returns a response with the decrypted payment data (see Non-tokenized card in Google documentation).
The request is not authenticated. The merchant login (merchant) is used to perform all the checks.
Request parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
merchant | AN 1..100 | Yes | Merchant login to access EPG. |
paymentToken | String | Yes | Base64 encrypted payment data. |
Response parameters
| Name | Type | Mandatory | Description |
|---|---|---|---|
errorCode | N 1..3 | Yes | 0 — decryption completed without errors. Other codes indicate an error. |
errorMessage | AN 1..512 | No | Description of the error. |
success | Boolean | No | true — successfully processed; false — failed. |
paymentData[] | Object | No | Parameters from the paymentData block (same structure as above: gatewayMerchantId, paymentMethod, paymentMethodDetails[], messageId, messageExpiration). |
Request example
{"merchant": "m01",
"paymentToken": "ew0KICAgICJzaWduYXR1cmUiOiAiTUVZQ0..."
}
Response example (success)
{
"errorCode": 0,
"paymentData": {
"gatewayMerchantId": "500000",
"paymentMethod": "CARD",
"paymentMethodDetails": {
"authMethod": "PAN_ONLY",
"pan": "4000010000000050",
"expirationMonth": 7,
"expirationYear": 2021
},
"messageId": "some-message-id",
"messageExpiration": "1577862000000"
}
}
Response example (error)
{
"errorCode": 10,
"errorMessage": "Signature verification offline failed: signing key is missing.",
"success": false,
"error": {
"code": "10",
"description": "Signature verification offline failed: signing key is missing.",
"message": "Signature verification offline failed: signing key is missing."
}
}