API – Developers Docs API – Developers Docs
  • Addon Payments
  • Pagos integrados en TPV
  • InglésCambiar a Inglés
API – Developers Docs API – Developers Docs
API – Developers Docs
  • Addon Payments
  • Pagos integrados en TPV
  • InglésCambiar a Inglés
Otra documentación
  • Folder icon closed Folder open iconPagos integrados en TPV
    • Transacciones
      • Tokenización
    • Reportes
    • Dispositivo

Transacciones

Introducción – Transacciones

La colección API de transacciones permite invocar los servicios de pago como ventas, reembolsos, pre-autorizaciones y reportes.

La dirección IP de la petición {url} debe indicar la dirección que el terminal TPV Android tiene asignada en la red local.

  • Si la petición se origina localmente desde una app que se ejecuta en el propio terminal POS, debes utilizar la dirección IP local localhost/127.0.0.1.
  • Si se accede al terminal POS a través de la red, puedes utilizar la dirección IP del terminal o el dominio asignado por la red.

La comunicación entre la App del cliente y los servicios de pago TPV de Comercia está asegurada a través del canal https que proporciona autenticación y encriptación. El certificado CA necesario para la autenticación de los servicios de pago Comercia POS se proporciona como parte del paquete de integración SDK.

Los dominios disponibles según los entornos de destino son:

  • Desarrollo: https://*.dev.tpv-comercia.es:2001
  • Staging: https://*.staging.tpv-comercia.es:2002
  • Producción: https://*.tpv-comercia.es:2011
El asterisco * en las URL anteriores indica el nombre de host asignado al terminal.

Respuesta

La respuesta payload (de carga útil) para la recopilación de transacciones incluye:

  • resultMessage: Es una cadena. Descripción del resultado de la transacción.
  • ticket: Objeto. Este objeto se devolverá únicamente para las solicitudes financieras e incluye toda la información específica de la transacción y relacionada con el ticket.
  • resultCode: Es numérico. El código de resultado de la transacción.

Los siguientes códigos de aplicación se pueden informar en resultCode:

CódigoDescripción
0Éxito
1000Inicialización exitosa
1010Error EMV de iniciación
1001El servicio está ocupado (operación en curso)
1INCORRECT_MSGID
2MSG_FORMAT_ERROR
3MSG_PARSING_ERROR
4MSG_PARAMS_ERROR
5UNKNOWN_TRANS_TYPE
6ISO_APPLICATION_ERROR
7EMV_APPLICATION_ERROR
12OPERATION_FINISHED
13PINPAD_INIT_ERROR
14PINPAD_FAILURE
15INVALID_CARD
16OPERATION_CANCELLED
17OPERATION_TIMEOUT
18DECLINED_GAC2
19CARD_REMOVED
21DEVICE_FAILURE
23EMCRYPTION_FAILURE
24GENERIC_ERROR
25NETWORT_NOT_AVAILABLE
26OPERATION_VOIDED

Los siguientes códigos de host se pueden informar en resultCode:

CódigoDescripción
100Procesamiento sin conexión en terminal
101Rechazado: Tarjeta caducada
105Rechazado
106Rechazado: Límite de PIN excedido
117Rechazado: PIN incorrecto
126Rechazado: Bloque de PIN no válido
127Rechazado: Datos de tarjeta cifrada no válidos
129Rechazado: CVV2/CVC2 incorrecto
180Rechazado: Tarjeta no admitida
184Rechazado: Error de autenticación del titular de la tarjeta
190Emisor denegó la operación
191Error de fecha de caducidad
195PSD2: Inserción de chip obligatoria
196PSD2: Repetir con PIN
201No procesado
202Tarjeta bajo sospecha de riesgo de fraude
400Operación anulada
600Totales
602Detalles no disponibles
603Recibo no encontrado
700-Punto de entrada 749 no disponible
900Autorizado para reembolso y confirmaciones
904ID de comercio no encontrado
909Error del sistema
912Emisor no disponible
913ID de pedido duplicado
916MAC no válido
944Sesión no vñalida
948Fecha y hora local de terminal no válidas
950Operación de reembolso no permitida
9064Datos de tarjeta no válidos
9078Operación no permitida para esta tarjeta
9093Tarjeta inexistente
9094Rechazo de servidores extranjeros
9104Comercio sin información de clave segura
9218Operaciones seguras no permitidas para este ID de comercio
9253Error de dígito de verificación de Luhn
9256Preautorizaciones no permitidas para este ID de comercio
9257Preautorizaciones no permitidas para esta tarjeta
9261Control de restricciones de operación denegado
9915Usuario canceló la operación
9997Hay una transacción en curso en SIS con la misma tarjeta
9998Solicitud de datos de tarjeta en curso
9999Transacción redirigida al emisor para autenticación
9912Emisor no disponible

Transacción aprobada

Se considera que una transacción ha sido aprobada si cumple con estos requisitos:

  • El resultCode es 0.
  • El ticket está presente.
  • El estado del atributo del objeto del ticket es 0.

POST Initialization (Inicialización)

Esta petición inicia los componentes del Servicio de Pagos de Comercia. Esta llamada es necesaria realizarse al menos una vez antes de llevar a cabo cualquier transacción financiera en el terminal; de lo contrario, durante la solicitud de la Transacción Financiera, si los servicios de pago no se están ejecutando obtendrán un error con respuesta vacía {}.

Se debe enviar a: https:// 172.20.10.1:2011/v1/transactions/init

Payload de la petición

  • user: Cadena (string). Reservado para futuros usos.
  • password: Cadena (string) Reservado para futuros usos.

Nota: También se puede enviar la petición sin estos parámetros.

ENCABEZADOS

X-SOURCE

COMERCIA

ID de la aplicación de petición que identifica de forma exclusiva la aplicación que origina la solicitud de API.

Body raw (json)

				
					{
	"user":"user",
	"password":"pass"
}
				
			

Estos son ejemplos de petición y respuesta de POST Inicialización. Aquí tienes los ejemplos en algunos lenguajes de programación.

				
					var myHeaders = new Headers();
myHeaders.append("X-SOURCE", "COMERCIA");

var raw = "{\n	\"user\":\"user\",\n	\"password\":\"pass\"\n}";

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https:// 172.20.10.1:2011/v1/transactions/init", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
				
			
				
					var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https:// 172.20.10.1:2011/v1/transactions/init");
request.Headers.Add("X-SOURCE", "COMERCIA");
var content = new StringContent("{\n\t\"user\":\"user\",\n\t\"password\":\"pass\"\n}", null, "text/plain");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
				
			
				
					curl --location 'https:// 172.20.10.1:2011/v1/transactions/init' \
--header 'X-SOURCE: COMERCIA' \
--data '{
	"user":"user",
	"password":"pass"
}'
				
			
				
					import requests

url = "https:// 172.20.10.1:2011/v1/transactions/init"

payload = "{\n\t\"user\":\"user\",\n\t\"password\":\"pass\"\n}"
headers = {
  'X-SOURCE': 'COMERCIA'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
				
			
				
					let parameters = "{\n\t\"user\":\"user\",\n\t\"password\":\"pass\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "https:// 172.20.10.1:2011/v1/transactions/init")!,timeoutInterval: Double.infinity)
request.addValue("COMERCIA", forHTTPHeaderField: "X-SOURCE")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
				
			

Puedes ver más ejemplos de lenguajes de programación en nuestra colección Postman.

Este es el cuerpo de la respuesta y sus encabezados:

				
					{
  "resultCode": 1000,
  "resultMessage": "Successful initialization"
}
				
			

Content-Type application/json

Date Tue, 19 May 2020 16:51:44 GMT

Access-Control-Allow-Credentials true

Access-Control-Allow-Origin *

Connection keep-alive

Content-Encoding gzip

Transfer-Encoding chunked

POST Payment (Pagos)

Esta petición inicia una transacción de pago. Se debe enviar a: https:// 172.20.10.1:2011/v1/transactions/payment

Payload de la petición

  • amount: Decimal positivo. Contiene el importe de la transacción. La parte decimal se separa con un punto (.). Por ejemplo: 3.50
  • orderId: Cadena (string). Un número de pedido/factura/referencia es un valor asignado por la aplicación del cliente que está asociado a la transacción, pero no se transmite en la solicitud de transacción al banco (por lo que no está asociado en los registros bancarios con la transacción). En general, se espera que este valor sea único. Este valor será devuelto en la respuesta si la operación es aprobada.
  • description: Cadena (string). Es un valor asignado por la App del cliente. Está asociado al concepto de la transacción, y se muestra junto al importe.

ENCABEZADOS

X-SOURCE

COMERCIA

ID de la aplicación de petición que identifica de forma exclusiva la aplicación que origina la solicitud de API.

Body raw (json)

				
					{
    "orderId": "tx-00000001",
    "amount": 3.01,
    "description":"Billete Sencillo"
}
				
			

Estos son ejemplos de petición y respuesta de POST Pagos. Aquí tienes los ejemplos en algunos lenguajes de programación.

				
					var myHeaders = new Headers();
myHeaders.append("X-SOURCE", "COMERCIA");
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");

var raw = "{\n    \"orderId\": \"tx-00000001\",\n    \"amount\": 3.01,\n    \"description\":\"billete sencillo\"\n}";

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https:// 172.20.10.1:2011/v1/transactions/payment", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
				
			
				
					var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https:// 172.20.10.1:2011/v1/transactions/payment");
request.Headers.Add("X-SOURCE", "COMERCIA");
var content = new StringContent("{\n    \"orderId\": \"tx-00000001\",\n    \"amount\": 3.01,\n    \"description\":\"billete sencillo\"\n}", null, "application/x-www-form-urlencoded");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
				
			
				
					curl --location 'https:// 172.20.10.1:2011/v1/transactions/payment' \
--header 'X-SOURCE: COMERCIA' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data '{
    "orderId": "tx-00000001",
    "amount": 3.01,
    "description":"billete sencillo"
}'
				
			
				
					import requests

url = "https:// 172.20.10.1:2011/v1/transactions/payment"

payload = "{\n    \"orderId\": \"tx-00000001\",\n    \"amount\": 3.01,\n    \"description\":\"billete sencillo\"\n}"
headers = {
  'X-SOURCE': 'COMERCIA',
  'Content-Type': 'application/x-www-form-urlencoded'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
				
			
				
					let parameters = "{\n    \"orderId\": \"tx-00000001\",\n    \"amount\": 3.01,\n    \"description\":\"billete sencillo\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "https:// 172.20.10.1:2011/v1/transactions/payment")!,timeoutInterval: Double.infinity)
request.addValue("COMERCIA", forHTTPHeaderField: "X-SOURCE")
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
				
			

Puedes ver más ejemplos de lenguajes de programación en nuestra colección Postman.

Este es el JSON de la respuesta y sus encabezados:

				
					{
  "orderId": "tx-00000001",
  "resultCode": 0,
  "resultMessage": "ACEPTADA",
  "ticket": {
    "AID": "A0000000041010",
    "ARC": "00",
    "ATC": "00297",
    "PSN": "00",
    "Amount": "100",
    "Authorization": "006360",
    "CardBank": "Comercia Global Payments",
    "CardHolder": "",
    "CardIssuer": "Credito",
    "CardNumber": "************3059",
    "CardTechnology": 1,
    "CardType": "",
    "Currency": "EUR",
    "Date": "20200522",
    "Id": "432864",
    "Language": "es",
    "Location": "BADALONA",
    "MerchantId": "329811087",
    "MerchantName": "Comercia Global Payments",
    "Modifiers": [],
    "OriginalTransactionDate": "",
    "OriginalTransactionId": "",
    "PinIndicator": 0,
    "SignatureImage": "89504e470d0a1a0a0000000d49484452000001f400000139080600000066a0d2e00000000473424954080808087c08648800000a6449444154789cedddcd8f24651d07f0ef1aa000000000000000000000000000c032fd0f9996a9212f464c2c0000000049454e44ae426082",
    "SignatureIndicator": 1,
    "Status": "0",
    "Templates": [],
    "TerminalId": "00000001",
    "Time": "0106",
    "Type": "Payment"
  }
}
				
			

Content-Type application/json

Date Thu, 21 May 2020 22:12:54 GMT

Access-Control-Allow-Credentials true

Access-Control-Allow-Origin *

Connection keep-alive

Content-Encoding gzip

Transfer-Encoding chunked

POST Refund (Devoluciones)

Esta petición inicia una transacción de devolución. Se debe enviar a: https:// 172.20.10.1:2011/v1/transactions/refund

Payload de la petición

  • amount: Decimal positivo. Contiene el importe de la transacción. La parte decimal se separa con un punto (.). Por ejemplo: 3.50
  • transactionId: Cadena de dígitos decimales. Identificador de la transacción sobre la que se quiere hacer la devolución. Se obtiene en el campo «Id» de una respuesta.
  • orderId (opcional): Cadena (string). Un número de pedido/factura/referencia es un valor asignado por la aplicación del cliente que está asociado a la transacción, pero no se transmite en la solicitud de transacción al banco (por lo que no está asociado en los registros bancarios con la transacción). En general, se espera que este valor sea único.
  • description (opcional): Cadena (string). Es un valor asignado por la App del cliente. Está asociado al concepto de la transacción, y se muestra junto al importe.

ENCABEZADOS

X-SOURCE

COMERCIA

ID de la aplicación de petición que identifica de forma exclusiva la aplicación que origina la solicitud de API.

Body raw (json)

				
					{
	"transactionId": "73787",
	"amount":0.01,
    "orderId": "tx-00000001",
    "description":"billete sencillo"
}
				
			

Estos son ejemplos de petición y respuesta de POST Devoluciones. Aquí tienes los ejemplos en algunos lenguajes de programación.

				
					var myHeaders = new Headers();
myHeaders.append("X-SOURCE", "COMERCIA");

var raw = "{\n	\"transactionId\": \"73787\",\n	\"amount\":0.01,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}";

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https:// 172.20.10.1:2011/v1/transactions/refund", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
				
			
				
					var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https:// 172.20.10.1:2011/v1/transactions/refund");
request.Headers.Add("X-SOURCE", "COMERCIA");
var content = new StringContent("{\n\t\"transactionId\": \"73787\",\n\t\"amount\":0.01,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}", null, "text/plain");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
				
			
				
					curl --location 'https:// 172.20.10.1:2011/v1/transactions/refund' \
--header 'X-SOURCE: COMERCIA' \
--data '{
	"transactionId": "73787",
	"amount":0.01,
    "orderId": "tx-00000001",
    "description":"billete sencillo"
}'
				
			
				
					import requests

url = "https:// 172.20.10.1:2011/v1/transactions/refund"

payload = "{\n\t\"transactionId\": \"73787\",\n\t\"amount\":0.01,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}"
headers = {
  'X-SOURCE': 'COMERCIA'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
				
			
				
					let parameters = "{\n\t\"transactionId\": \"73787\",\n\t\"amount\":0.01,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "https:// 172.20.10.1:2011/v1/transactions/refund")!,timeoutInterval: Double.infinity)
request.addValue("COMERCIA", forHTTPHeaderField: "X-SOURCE")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
				
			

Puedes ver más ejemplos de lenguajes de programación en nuestra colección Postman.

Este es el JSON de la respuesta y sus encabezados:

				
					{
  "resultCode": 0,
  "resultMessage": "ACEPTADA",
  "ticket": {
    "AID": "A0000000041010",
    "ARC": "00",
    "ATC": "00245",
    "PSN": "00",
    "Amount": "130",
    "Authorization": "006067",
    "CardBank": "Comercia Global Payments",
    "CardHolder": "",
    "CardIssuer": "Credito",
    "CardNumber": "************3059",
    "CardTechnology": 1,
    "CardType": "",
    "Currency": "EUR",
    "Date": "20200519",
    "Id": "619120",
    "Language": "es",
    "Location": "BADALONA",
    "MerchantId": "329811087",
    "MerchantName": "Comercia Global Payments",
    "Modifiers": [],
    "OriginalTransactionDate": "20200519",
    "OriginalTransactionId": "619119",
    "PinIndicator": 0,
    "SignatureIndicator": 0,
    "Status": "0",
    "Templates": [],
    "TerminalId": "00000001",
    "Time": "1900",
    "Type": "Refund"
  }
}
				
			

Content-Type application/json

Date Thu, 19 May 2020 16:07:20 GMT

Access-Control-Allow-Credentials true

Access-Control-Allow-Origin *

Connection keep-alive

Content-Encoding gzip

Transfer-Encoding chunked

POST PreAuthorization New (Nueva pre-autorización)

Esta petición inicia una pre-autorización. Se debe enviar a: https:// 172.20.10.1:2011/v1/transactions/preauth/new

Payload de la petición

  • amount: Decimal positivo. Contiene el importe de la transacción. La parte decimal se separa con un punto (.). Por ejemplo: 3.50
  • orderId (opcional): Cadena (string). Un número de pedido/factura/referencia es un valor asignado por la aplicación del cliente que está asociado a la transacción, pero no se transmite en la solicitud de transacción al banco (por lo que no está asociado en los registros bancarios con la transacción). En general, se espera que este valor sea único.
  • description (opcional): Cadena (string). Es un valor asignado por la App del cliente. Está asociado al concepto de la transacción, y se muestra junto al importe.

ENCABEZADOS

X-SOURCE

Comercia

ID de la aplicación de petición que identifica de forma exclusiva la aplicación que origina la solicitud de API.

Body raw (json)

				
					{
	"orderId":"INV-002",
	"amount":3,
    "description":"billete sencillo"
}
				
			

Estos son ejemplos de petición y respuesta de POST Nueva pre-autorización. Aquí tienes los ejemplos en algunos lenguajes de programación.

				
					var myHeaders = new Headers();
myHeaders.append("X-SOURCE", "COMERCIA");

var raw = "{\n	\"orderId\":\"INV-002\",\n	\"amount\":3,\n    \"description\":\"billete sencillo\"\n}";

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https:// 172.20.10.1:2011/v1/transactions/preauth/new", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
				
			
				
					var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https:// 172.20.10.1:2011/v1/transactions/preauth/new");
request.Headers.Add("X-SOURCE", "COMERCIA");
var content = new StringContent("{\n\t\"orderId\":\"INV-002\",\n\t\"amount\":3,\n    \"description\":\"billete sencillo\"\n}", null, "text/plain");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
				
			
				
					curl --location 'https:// 172.20.10.1:2011/v1/transactions/preauth/new' \
--header 'X-SOURCE: COMERCIA' \
--data '{
	"orderId":"INV-002",
	"amount":3,
    "description":"billete sencillo"
}'
				
			
				
					import requests

url = "https:// 172.20.10.1:2011/v1/transactions/preauth/new"

payload = "{\n\t\"orderId\":\"INV-002\",\n\t\"amount\":3,\n    \"description\":\"billete sencillo\"\n}"
headers = {
  'X-SOURCE': 'COMERCIA'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
				
			
				
					let parameters = "{\n\t\"orderId\":\"INV-002\",\n\t\"amount\":3,\n    \"description\":\"billete sencillo\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "https:// 172.20.10.1:2011/v1/transactions/preauth/new")!,timeoutInterval: Double.infinity)
request.addValue("COMERCIA", forHTTPHeaderField: "X-SOURCE")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
				
			

Puedes ver más ejemplos de lenguajes de programación en nuestra colección Postman.

Este es el JSON de la respuesta y sus encabezados:

				
					{
  "orderId": "pre-0001",
  "resultCode": 0,
  "resultMessage": "ACEPTADA",
  "ticket": {
    "AID": "A0000000041010",
    "ARC": "00",
    "ATC": "00298",
    "PSN": "00",
    "Amount": "200",
    "Authorization": "006361",
    "CardBank": "Comercia Global Payments",
    "CardHolder": "",
    "CardIssuer": "Credito",
    "CardNumber": "************3059",
    "CardTechnology": 1,
    "CardType": "",
    "Currency": "EUR",
    "Date": "20200522",
    "Id": "432869",
    "Language": "es",
    "Location": "BADALONA",
    "MerchantId": "329811087",
    "MerchantName": "Comercia Global Payments",
    "Modifiers": [],
    "OriginalTransactionDate": "",
    "OriginalTransactionId": "",
    "PinIndicator": 0,
    "SignatureImage": "89504e470d0a1a0a0000000d49484452000001f400000139080600000066a0d2e00000000473424954080808087c086488000009b449444154789cedddcf8b24671d07e06fb2d183882e883761f30f8c17f1426082",
    "SignatureIndicator": 1,
    "Status": "0",
    "Templates": [],
    "TerminalId": "00000001",
    "Time": "0115",
    "Type": "Preauthorization"
  }
}
				
			

Content-Type application/json

Date Thu, 21 May 2020 22:21:50 GMT

Access-Control-Allow-Credentials true

Access-Control-Allow-Origin *

Connection keep-alive

Content-Encoding gzip

Transfer-Encoding chunked

POST PreAuthorization Update (Actualizar pre-autorización)

Esta petición inicia la actualización de una transacción de pre-autorización previa. Se debe enviar a: https:// 172.20.10.1:2011/v1/transactions/preauth/update

Payload de la petición

  • amount: Decimal positivo. Contiene el importe de la transacción. La parte decimal se separa con un punto (.). Por ejemplo: 3.50
  • transactionId: Cadena de dígitos decimales. Identificador de la transacción sobre la que se quiere hacer la devolución.
  • transactionDate: Cadena (string). La fecha de la pre-autorización original. En formato: «YYYYMMDDHHMM».
  • orderId (opcional): Cadena (string). Un número de pedido/factura/referencia es un valor asignado por la aplicación del cliente que está asociado a la transacción, pero no se transmite en la solicitud de transacción al banco (por lo que no está asociado en los registros bancarios con la transacción). En general, se espera que este valor sea único.
  • description (opcional): Cadena (string). Es un valor asignado por la App del cliente. Está asociado al concepto de la transacción, y se muestra junto al importe.

ENCABEZADOS

X-SOURCE

COMERCIA

ID de la aplicación de petición que identifica de forma exclusiva la aplicación que origina la solicitud de API.

Body raw (json)

				
					{
	"transactionId": "619141",
	"transactionDate":"202005191937",
	"amount":4,
    "orderId": "tx-00000001",
    "description":"billete sencillo"
}
				
			

Estos son ejemplos de petición y respuesta de POST actualizar pre-autorización. Aquí tienes los ejemplos en algunos lenguajes de programación.

				
					var myHeaders = new Headers();
myHeaders.append("X-SOURCE", "COMERCIA");

var raw = "{\n	\"transactionId\": \"619141\",\n	\"transactionDate\":\"202005191937\",\n	\"amount\":4,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}";

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https:// 172.20.10.1:2011/v1/transactions/preauth/update", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
				
			
				
					var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https:// 172.20.10.1:2011/v1/transactions/preauth/update");
request.Headers.Add("X-SOURCE", "COMERCIA");
var content = new StringContent("{\n\t\"transactionId\": \"619141\",\n\t\"transactionDate\":\"202005191937\",\n\t\"amount\":4,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}", null, "text/plain");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
				
			
				
					curl --location 'https:// 172.20.10.1:2011/v1/transactions/preauth/update' \
--header 'X-SOURCE: COMERCIA' \
--data '{
	"transactionId": "619141",
	"transactionDate":"202005191937",
	"amount":4,
    "orderId": "tx-00000001",
    "description":"billete sencillo"
}'
				
			
				
					import requests

url = "https:// 172.20.10.1:2011/v1/transactions/preauth/update"

payload = "{\n\t\"transactionId\": \"619141\",\n\t\"transactionDate\":\"202005191937\",\n\t\"amount\":4,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}"
headers = {
  'X-SOURCE': 'COMERCIA'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
				
			
				
					let parameters = "{\n\t\"transactionId\": \"619141\",\n\t\"transactionDate\":\"202005191937\",\n\t\"amount\":4,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "https:// 172.20.10.1:2011/v1/transactions/preauth/update")!,timeoutInterval: Double.infinity)
request.addValue("COMERCIA", forHTTPHeaderField: "X-SOURCE")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
				
			

Puedes ver más ejemplos de lenguajes de programación en nuestra colección Postman.

Este es el JSON de la respuesta y sus encabezados:

				
					{
  "resultCode": 0,
  "resultMessage": "ACEPTADA",
  "ticket": {
    "AID": "A0000000041010",
    "ARC": "00",
    "ATC": "00251",
    "PSN": "00",
    "Amount": "400",
    "Authorization": "006073",
    "CardBank": "Comercia Global Payments",
    "CardHolder": "",
    "CardIssuer": "Credito",
    "CardNumber": "************3059",
    "CardTechnology": 1,
    "CardType": "",
    "Currency": "EUR",
    "Date": "20200519",
    "Id": "619142",
    "Language": "es",
    "Location": "BADALONA",
    "MerchantId": "329811087",
    "MerchantName": "Comercia Global Payments",
    "Modifiers": [],
    "OriginalTransactionDate": "20200519",
    "OriginalTransactionId": "619141",
    "PinIndicator": 0,
    "SignatureImage": "89504e470d0a1a0a0000000d49484452000001f400000139080600000066a0d2e00000000473424954080808087c08648800000e9149444154789ceddd4f8f24e57d07f06fa41c7398773c426400431602f2c60d86016880dbbc0eeecce4c0e3593cc543fdd5ddd53d5d555fd00000000000000000000000000000000000000000000008051f95f496b2d0b1bdbb3f90000000049454e44ae426082",
    "SignatureIndicator": 1,
    "Status": "0",
    "Templates": [],
    "TerminalId": "00000001",
    "Time": "1938",
    "Type": "PreauthorizationUpdate"
  }
}
				
			

Content-Type application/json

Date Tue, 19 May 2020 16:45:21 GMT

Access-Control-Allow-Credentials true

Access-Control-Allow-Origin *

Connection keep-alive

Content-Encoding gzip

Transfer-Encoding chunked

POST PreAuthorization Complete (Completar pre-autorización)

Esta petición inicia la finalización de una transacción de pre-autorización previa. Se debe enviar a: https:// 172.20.10.1:2011/v1/transactions/preauth/complete

Payload de la petición

  • amount: Decimal positivo. Contiene el importe de la transacción. La parte decimal se separa con un punto (.). Por ejemplo: 3.50
  • transactionId: Cadena de dígitos decimales. Identificador de la transacción sobre la que se quiere hacer la devolución.
  • transactionDate: Cadena (string). La fecha de la pre-autorización original. En formato: «YYYYMMDDHHMM».
  • orderId (opcional): Cadena (string). Un número de pedido/factura/referencia es un valor asignado por la aplicación del cliente que está asociado a la transacción, pero no se transmite en la solicitud de transacción al banco (por lo que no está asociado en los registros bancarios con la transacción). En general, se espera que este valor sea único.
  • description (opcional): Cadena (string). Es un valor asignado por la App del cliente. Está asociado al concepto de la transacción, y se muestra junto al importe.

ENCABEZADOS

X-SOURCE

COMERCIA

ID de la aplicación de petición que identifica de forma exclusiva la aplicación que origina la solicitud de API.

Body raw (json)

				
					{
	"transactionId": "619142",
	"transactionDate":"202005191938",
	"amount": 4,
    "orderId": "tx-00000001",
    "description":"billete sencillo"
}
				
			

Estos son ejemplos de petición y respuesta de POST completar pre-autorización. Aquí tienes los ejemplos en algunos lenguajes de programación.

				
					var myHeaders = new Headers();
myHeaders.append("X-SOURCE", "COMERCIA");

var raw = "{\n	\"transactionId\": \"619142\",\n	\"transactionDate\":\"202005191938\",\n	\"amount\": 4,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}";

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https:// 172.20.10.1:2011/v1/transactions/preauth/complete", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
				
			
				
					var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https:// 172.20.10.1:2011/v1/transactions/preauth/complete");
request.Headers.Add("X-SOURCE", "COMERCIA");
var content = new StringContent("{\n\t\"transactionId\": \"619142\",\n\t\"transactionDate\":\"202005191938\",\n\t\"amount\": 4,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}", null, "text/plain");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
				
			
				
					curl --location 'https:// 172.20.10.1:2011/v1/transactions/preauth/complete' \
--header 'X-SOURCE: COMERCIA' \
--data '{
	"transactionId": "619142",
	"transactionDate":"202005191938",
	"amount": 4,
    "orderId": "tx-00000001",
    "description":"billete sencillo"
}'
				
			
				
					import requests

url = "https:// 172.20.10.1:2011/v1/transactions/preauth/complete"

payload = "{\n\t\"transactionId\": \"619142\",\n\t\"transactionDate\":\"202005191938\",\n\t\"amount\": 4,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}"
headers = {
  'X-SOURCE': 'COMERCIA'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
				
			
				
					let parameters = "{\n\t\"transactionId\": \"619142\",\n\t\"transactionDate\":\"202005191938\",\n\t\"amount\": 4,\n    \"orderId\": \"tx-00000001\",\n    \"description\":\"billete sencillo\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "https:// 172.20.10.1:2011/v1/transactions/preauth/complete")!,timeoutInterval: Double.infinity)
request.addValue("COMERCIA", forHTTPHeaderField: "X-SOURCE")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
				
			

Puedes ver más ejemplos de lenguajes de programación en nuestra colección Postman.

Este es el JSON de la respuesta y sus encabezados:

				
					{
  "resultCode": 0,
  "resultMessage": "ACEPTADA",
  "ticket": {
    "AID": "A0000000041010",
    "ARC": "00",
    "ATC": "00252",
    "PSN": "00",
    "Amount": "400",
    "Authorization": "006073",
    "CardBank": "Comercia Global Payments",
    "CardHolder": "",
    "CardIssuer": "Credito",
    "CardNumber": "************3059",
    "CardTechnology": 1,
    "CardType": "",
    "Currency": "EUR",
    "Date": "20200519",
    "Id": "619144",
    "Language": "es",
    "Location": "BADALONA",
    "MerchantId": "329811087",
    "MerchantName": "Comercia Global Payments",
    "Modifiers": [],
    "OriginalTransactionDate": "20200519",
    "OriginalTransactionId": "619142",
    "PinIndicator": 0,
    "SignatureImage": "89504e470d0a1a0a0000000d49484452000001f400000139080600000066a0d2e00000000473424954080808087c08648800000bf349444154789ceddd4f8c24551d07f02f8870302663bcbb73a750ed0606228150000000049454e44ae426082",
    "SignatureIndicator": 1,
    "Status": "0",
    "Templates": [],
    "TerminalId": "00000001",
    "Time": "1941",
    "Type": "PreauthorizationConfirmation"
  }
}
				
			

Content-Type application/json

Date Tue, 19 May 2020 16:47:43 GMT

Access-Control-Allow-Credentials true

Access-Control-Allow-Origin *

Connection keep-alive

Content-Encoding gzip

Transfer-Encoding chunked

GET Last Transaction (Última transacción)

Esta petición devuelve una copia de los datos de respuesta de la última transacción realizada en el sistema. Se debe enviar a: https:// 172.20.10.1:2011/v1/transactions/last

ENCABEZADOS

X-SOURCE

Comercia

ID de la aplicación de petición que identifica de forma exclusiva la aplicación que origina la solicitud de API.

Estos son ejemplos de petición y respuesta de GET última transacción. Aquí tienes los ejemplos en algunos lenguajes de programación.

				
					var myHeaders = new Headers();
myHeaders.append("X-SOURCE", "COMERCIA");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("https:// 172.20.10.1:2011/v1/transactions/last", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
				
			
				
					var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https:// 172.20.10.1:2011/v1/transactions/last");
request.Headers.Add("X-SOURCE", "COMERCIA");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
				
			
				
					curl --location 'https:// 172.20.10.1:2011/v1/transactions/last' \
--header 'X-SOURCE: COMERCIA'
				
			
				
					import requests

url = "https:// 172.20.10.1:2011/v1/transactions/last"

payload={}
headers = {
  'X-SOURCE': 'COMERCIA'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
				
			
				
					var request = URLRequest(url: URL(string: "https:// 172.20.10.1:2011/v1/transactions/last")!,timeoutInterval: Double.infinity)
request.addValue("COMERCIA", forHTTPHeaderField: "X-SOURCE")

request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
				
			

Puedes ver más ejemplos de lenguajes de programación en nuestra colección Postman.

Este es el JSON de la respuesta y sus encabezados:

				
					{
  "orderId": "tx-00000001",
  "resultCode": 0,
  "resultMessage": "ACEPTADA",
  "ticket": {
    "AID": "A0000000041010",
    "ARC": "00",
    "ATC": "00297",
    "PSN": "00",
    "Amount": "100",
    "Authorization": "006360",
    "CardBank": "Comercia Global Payments",
    "CardHolder": "",
    "CardIssuer": "Credito",
    "CardNumber": "************3059",
    "CardTechnology": 1,
    "CardType": "",
    "Currency": "EUR",
    "Date": "20200522",
    "Id": "432864",
    "Language": "es",
    "Location": "BADALONA",
    "MerchantId": "329811087",
    "MerchantName": "Comercia Global Payments",
    "Modifiers": [],
    "OriginalTransactionDate": "",
    "OriginalTransactionId": "",
    "PinIndicator": 0,
    "SignatureImage": "89504e470d0a1a0a0000000d49484452000001f400000139080600000066a0d2e00000000479996a9212f464c2c0000000049454e44ae426082",
    "SignatureIndicator": 1,
    "Status": "0",
    "Templates": [],
    "TerminalId": "00000001",
    "Time": "0106",
    "Type": "Payment"
  }
}
				
			

Content-Type application/json

Date Thu, 21 May 2020 22:15:49 GMT

Access-Control-Allow-Credentials true

Access-Control-Allow-Origin *

Connection keep-alive

Content-Encoding gzip

Transfer-Encoding chunked

GET Cancel Transaction (Cancelar transacción)

Esta petición cancela la transacción en curso. Se debe enviar a: https:// 172.20.10.1:2011/v1/transactions/cancel

ENCABEZADOS

X-SOURCE

COMERCIA

ID de la aplicación de petición que identifica de forma exclusiva la aplicación que origina la solicitud de API.

Estos son ejemplos de petición y respuesta de GET cancelar transacción. Aquí tienes los ejemplos en algunos lenguajes de programación.

				
					var myHeaders = new Headers();
myHeaders.append("X-SOURCE", "COMERCIA");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("https:// 172.20.10.1:2011/v1/transactions/cancel", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
				
			
				
					var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https:// 172.20.10.1:2011/v1/transactions/cancel");
request.Headers.Add("X-SOURCE", "COMERCIA");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
				
			
				
					curl --location 'https:// 172.20.10.1:2011/v1/transactions/cancel' \
--header 'X-SOURCE: COMERCIA'
				
			
				
					import requests

url = "https:// 172.20.10.1:2011/v1/transactions/cancel"

payload={}
headers = {
  'X-SOURCE': 'COMERCIA'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
				
			
				
					var request = URLRequest(url: URL(string: "https:// 172.20.10.1:2011/v1/transactions/cancel")!,timeoutInterval: Double.infinity)
request.addValue("COMERCIA", forHTTPHeaderField: "X-SOURCE")

request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
				
			

Puedes ver más ejemplos de lenguajes de programación en nuestra colección Postman.

Este es el JSON de la respuesta y sus encabezados:

				
					{
  "resultCode": 16,
  "resultMessage": "ERROR  - OPERACIÓN CANCELADA"
}
				
			

Content-Type application/json; charset=UTF-8

Date Tue, 24 Aug 2021 12:52:24 GMT

Access-Control-Allow-Credentials true

Access-Control-Allow-Origin *

Connection keep-alive

Content-Encoding gzip

Transfer-Encoding chunked

GET Print Last Transaction (Imprimir última transacción)

Esta petición solicita una copia de la última transacción completada que se llevo a cabo en el sistema. Se debe enviar a: https:// 172.20.10.1:2011/v1/transactions/last/print

ENCABEZADOS

X-SOURCE

APPNAME

ID de la aplicación de petición que identifica de forma exclusiva la aplicación que origina la solicitud de API.

Estos son ejemplos de petición y respuesta de GET imprimir última transacción. Aquí tienes los ejemplos en algunos lenguajes de programación.

				
					var myHeaders = new Headers();
myHeaders.append("X-SOURCE", "APPNAME");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("https:// 172.20.10.1:2011/v1/transactions/last/print", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
				
			
				
					var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https:// 172.20.10.1:2011/v1/transactions/last/print");
request.Headers.Add("X-SOURCE", "APPNAME");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
				
			
				
					curl --location 'https:// 172.20.10.1:2011/v1/transactions/last/print' \
--header 'X-SOURCE: APPNAME'
				
			
				
					import requests

url = "https:// 172.20.10.1:2011/v1/transactions/last/print"

payload={}
headers = {
  'X-SOURCE': 'APPNAME'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
				
			
				
					var request = URLRequest(url: URL(string: "https:// 172.20.10.1:2011/v1/transactions/last/print")!,timeoutInterval: Double.infinity)
request.addValue("APPNAME", forHTTPHeaderField: "X-SOURCE")

request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
				
			

Puedes ver más ejemplos de lenguajes de programación en nuestra colección Postman.

Este es el JSON de la respuesta y sus encabezados:

				
					{
  "resultCode": 0
}
				
			

Content-Type application/json

Date Mon, 31 May 2021 15:36:57 GMT

Access-Control-Allow-Credentials true

Access-Control-Allow-Origin *

Connection keep-alive

Content-Encoding gzip

Transfer-Encoding chunked

Artículos

  • Tokenización

visto recientemente

  • Tokenización
  • Leer Más
Comparte este documento

Transacciones

Copiar el enlace

Clipboard Icon
Tabla de Contenidos

Productos

  • Addon Payments
  • Pagos integrados en TPV
  • Universal Pay
  • Addon 1 - XML API Integration

Ventas

Cuéntanos cómo es tu negocio para ofrecerte la mejor solución.

Contacta con un experto

Soporte técnico

¿Ya eres cliente y necesitas ayuda? Contacta con nosotros, estamos a tu disposición.

Ayuda

Socios

Trabajamos con los mejores partners de soluciones in-store y eCommerce. ¿Quieres unirte?

Únete a nosotros

© Comercia Global Payments

Política de privacidad
Ejercicio de Derechos
Información a Clientes
Canal de denuncia
Aviso Legal
Política de cookies
API - Developers Docs
Gestionar el consentimiento de las cookies
Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos. El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.
Administrar opciones Gestionar los servicios Gestionar {vendor_count} proveedores Leer más sobre estos propósitos
Ver preferencias
{title} {title} {title}

Consulta la documentación de las distintas secciones de integraciones:

Comienza a integrar

undraw_add_to_cart_re_wrdo 1 (1) (1)

Plugins para CMS

Complementa la integración

SDKs

Métodos de pago

Herramientas

Addon Payments

Consulta la documentación de Addon Payments. Aquí tienes las distintas secciones:

Integraciones

Consultas frecuentes

Portal Backoffice

Cyberpac

Consulta la documentación de Cyberpac. Aquí tienes las distintas secciones:

Canales

Módulos de integración

Integraciones a medida

Pagos integrados en TPV

Crea una solución que te ayudará a automatizar procesos. Incluso, podrás agregar procesos de pago en terminales físicos.

Pago integrado con TPV Android

Pago integrado con Smartphone TPV

Fichas Técnicas TPVs