Crea un pago en un solo paso
Esta guía te muestra cómo crear un flujo de pago automatizado que reduce la interacción del usuario. Para lograrlo, configuras los parámetros de pago con antelación y omites las pantallas de selección manual. Con un pago en un solo paso, el terminal procesa la transacción rápido y con pocos toques del usuario.
Antes de comenzar
Antes de comenzar, asegúrate de cumplir estos requisitos:
- Haber leído cómo hacer una llamada de Polling (
getnet://payment/v1/polling) antes de iniciar la transacción. Así confirmas que no hay transacciones pendientes ni procesos bloqueados. - Getnet payment app instalada en el terminal Android.
- Un
callerIdúnico para correlacionar la solicitud con la respuesta.
los pagos en un solo paso funcionan mejor junto con el modo de operación calculado (operationMode = "1"), donde tu aplicación hace todos los cálculos de intereses antes de enviar la solicitud.
Paso 1: Configura y envía el Intent de pago
Para crear un flujo en un solo paso, configura el Intent con todos los parámetros obligatorios y los indicadores de automatización. Esta tabla describe todos los parámetros que puedes usar:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
amount | String | Sí | Monto de la transacción (con dos decimales implícitos; por ejemplo, “10000” = $100.00) |
originalAmount | String | Sí | Valor en moneda local para realizar la transacción. |
tip | String | No | Monto de propina que se suma al total de la transacción. La representación decimal es la misma que en el parámetro amount (por ejemplo, “500” = $5.00) |
waiterCode | String | Condicional | Código del camarero para atribuir la propina. Obligatorio si se envía una propina. |
receiptCode | String | Sí | Código de identificación que se imprime en el comprobante |
callerId | String | Sí | Identificador único para correlacionar la solicitud con la respuesta |
paymentMethod | String | No | "1" para tarjeta, "2" para QR Code. Omite la pantalla de selección del medio de pago. |
installments | String | No | Cantidad de cuotas deseadas (solo tarjeta de crédito) |
planId | String | No | ID del plan de cuotas. Consulta los planes disponibles en tu mercado. |
interest | String | No | Indica si el plan de cuotas incluye intereses ("true") o es sin intereses ("false") |
operationMode | String | No | "1" para modo calculado (tu app maneja los intereses), "0" para manual (el terminal aplica las reglas de negocio). Consulta la guía Estrategia de cálculo de intereses. |
skipConfirmation | String | No | Define "true" para omitir la pantalla de revisión de cuotas e intereses. Con "false" (predeterminado), la pantalla se muestra normalmente y el usuario debe interactuar para continuar. |
skipReceipt | String | No | Define "true" para omitir la pantalla del comprobante del cliente después de la aprobación. Con "false" (predeterminado), la pantalla se muestra normalmente. |
allowPrintCurrentTransaction | String | No | Define "true" para que Getnet se encargue de imprimir el comprobante (comportamiento predeterminado). Consulta la guía Responsabilidad de impresión. |
Este es un ejemplo básico con los parámetros obligatorios:
private val REQUEST_CODE = 1001
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/payment"))
intent.putExtra("amount", "10000") // $100.00
intent.putExtra("originalAmount", "10000")
intent.putExtra("receiptCode", "987654")
intent.putExtra("callerId", "req_001")
startActivityForResult(intent, REQUEST_CODE)Paso 2: Procesa la respuesta
El terminal devuelve la respuesta mediante onActivityResult. Revisa el campo result para confirmar el éxito:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
val result = data?.extras?.getString("result")
when (result) {
"0" -> {
// Transaction approved
val nsu = data?.extras?.getString("nsu")
val authCode = data?.extras?.getString("authorizationCode")
val amount = data?.extras?.getString("amount")
// Handle success
}
else -> {
// Transaction failed or cancelled
val resultDetails = data?.extras?.getString("resultDetails")
// Handle error
}
}
}
}Parámetros de respuesta
La respuesta del terminal incluye los siguientes campos clave:
| Parámetro | Tipo | Descripción |
|---|---|---|
| result | String | Resultado de la transacción: "0" indica éxito; otros valores indican falla o cancelación. Consulta la referencia de Códigos de resultado. |
| resultDetails | String | Mensaje detallado sobre el resultado de la transacción (por ejemplo, “APPROVED”, descripciones de error) |
| amount | String | Monto final cobrado con dos decimales implícitos |
| tip | String | Monto de propina agregado a la transacción (si se envió) |
| waiterCode | String | Código del camarero para atribuir la propina (si se envió) |
| receiptCode | String | Código de identificación impreso en el comprobante |
| callerId | String | El identificador único enviado en la solicitud para correlacionarla con la respuesta |
| nsu | String | Código de autorización de la transacción de Getnet: único por terminal (no se puede repetir en un mismo día) |
| authorizationCode | String | Código de autorización entregado por el emisor de la tarjeta |
| paymentType | String | Tipo de pago usado: crédito, débito, voucher, etc. |
| brand | String | Marca de tarjeta (por ejemplo, “VISA”, “MASTERCARD”) |
| cardBin | String | Primeros 8 dígitos de la tarjeta (BIN) |
| cardLastDigits | String | Últimos 4 dígitos de la tarjeta usada |
| inputType | String | Método de lectura de la tarjeta: "021" (banda magnética), "051" (chip), "071" (chip contactless), "801" (banda magnética - fallback) |
| gmtDateTime | String | Fecha y hora GMT de la transacción (formato: MMDDhhmmss, GMT UTC 0) |
| installments | String | Cantidad de cuotas procesadas (si aplica) |
| planId | String | ID del plan de cuotas usado en la transacción (si aplica) |
| interest | String | Indica si se aplicaron intereses: "true" (con intereses) o "false" (sin intereses) |
| automationSlip | String | Datos del comprobante en formato JSON (se devuelve cuando allowPrintCurrentTransaction = "false"). Consulta la guía Responsabilidad de impresión. |
Siguientes pasos
Después de crear un pago correctamente, puedes explorar:
- Crea un pago con cuotas - procesa pagos con tarjeta de crédito con planes de cuotas
- Estrategia de cálculo de intereses - entiende los modos de operación para calcular las cuotas
- Procesa devoluciones y cancelaciones - reversa o cancela transacciones anteriores
- Responsabilidad de impresión - gestiona la impresión personalizada de comprobantes en tu aplicación
- Referencia de códigos de resultado - lista completa de los códigos de estado de transacción