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. JavaScript - Fetch C# - HttpClient cURL - cURL Pyhton - Requests Swift - URLSession Otros lenguajes 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: Cuerpo 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. JavaScript - Fetch C# - HttpClient cURL - cURL Pyhton - Requests Swift - URLSession Otros lenguajes 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: Cuerpo 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. JavaScript - Fetch C# - HttpClient cURL - cURL Pyhton - Requests Swift - URLSession Otros lenguajes 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: Cuerpo 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. JavaScript - Fetch C# - HttpClient cURL - cURL Pyhton - Requests Swift - URLSession Otros lenguajes 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: Cuerpo 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. JavaScript - Fetch C# - HttpClient cURL - cURL Pyhton - Requests Swift - URLSession Otros lenguajes 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: Cuerpo 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. JavaScript - Fetch C# - HttpClient cURL - cURL Pyhton - Requests Swift - URLSession Otros lenguajes 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: Cuerpo 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. JavaScript - Fetch C# - HttpClient cURL - cURL Pyhton - Requests Swift - URLSession Otros lenguajes 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: Cuerpo 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. JavaScript - Fetch C# - HttpClient cURL - cURL Pyhton - Requests Swift - URLSession Otros lenguajes 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: Cuerpo 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. JavaScript - Fetch C# - HttpClient cURL - cURL Pyhton - Requests Swift - URLSession Otros lenguajes 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: Cuerpo 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ículosTokenización