API
53 min
api utilizada por la aplicaciรณn de pc para operar con el dispositivo pos a travรฉs de sdconn base url http //localhost 8484 todas las respuestas son json con content type application/json operaciones post /api/v1/read operaciรณn completa de lectura de tarjeta este es el endpoint principal que la aplicaciรณn de pc usa para procesar un pago flujo estรกndar (sin intenttoken) obtiene informaciรณn del dispositivo (serial number, modelo, etc ) obtiene la ubicaciรณn gps del dispositivo crea una operaciรณn en la api de mobbex (/p/pos/operation) envรญa el token de lectura al dispositivo para que lea la tarjeta devuelve los datos de la tarjeta leรญda junto con el intenttoken generado flujo con token externo (con intenttoken) si se envรญa un intenttoken en el cuerpo, se omite la llamada a la api de mobbex y se usa ese token directamente para la lectura en este caso la respuesta incluye ademรกs la geolocation del dispositivo cuerpo { "total" 15 00, "otheramount" 0, "intent" "token de intento", "currency" "ars", "hideamount" false, "test" false, "intenttoken" "", "source" "", "description" "", "reference" "", "async" false } campo tipo requerido descripciรณn total number sรญ monto total como float (ej 15 00) otheramount number no monto adicional (propina, etc ) intent string no tipo de intento (por defecto "payment v2") currency string no cรณdigo de moneda (por defecto "ars") hideamount boolean no ocultar monto en la pantalla del dispositivo test boolean no enviar operaciรณn en modo test a mobbex intenttoken string no token externo si se envรญa, omite la llamada a la api de mobbex source string no fuente de pago (ej "arg qr") si se envรญa, activa el flujo qr en lugar de lectura de tarjeta description string no descripciรณn de la operaciรณn (se envรญa a la api de mobbex) reference string no referencia externa de la operaciรณn async boolean no si es true, la lectura se ejecuta en segundo plano y se devuelve inmediatamente el intenttoken el resultado se consulta con get /api/v1/read/\ token respuesta exitosa โ flujo tarjeta (estรกndar) { "result" true, "intenttoken" "token generado por mobbex", "sourcedata" { "pin" " ", "emvdata" " ", "cryptogram" " ", "ksn" " ", "track2" " " } } respuesta exitosa โ flujo tarjeta (con token externo) { "result" true, "intenttoken" "token externo enviado", "geolocation" \[ 31 4201, 64 1888], "sourcedata" { "pin" " ", "emvdata" " ", "cryptogram" " ", "ksn" " ", "track2" " " } } respuesta exitosa โ flujo qr (con source) { "result" true, "intenttoken" "token generado por mobbex", "operationid" "ks6d18und", "source" "arg qr", "status" { "code" "100", "text" "pendiente" }, "geolocation" \[ 31 4201, 64 1888] } cuando se envรญa source, sdconn crea el intent token (o usa el intenttoken externo) llama al endpoint de operaciรณn (/p/operations/{token}) con la fuente descarga la imagen qr del resultado y la codifica en base64 envรญa la imagen al dispositivo pos para que la muestre en pantalla retorna los datos de la operaciรณn (el pago queda pendiente hasta que el usuario escanee el qr) nota en el flujo qr, la respuesta no contiene sourcedata ya que no se lee una tarjeta el campo operationid identifica la operaciรณn para consultar su estado el campo status indica el estado actual de la operaciรณn (generalmente pendiente hasta que se escanee el qr) respuesta โ modo asรญncrono (async true) cuando se envรญa async true, sdconn ejecuta los pasos 1 3 (obtener info del dispositivo, ubicaciรณn y token) de forma sรญncrona y luego lanza la lectura de tarjeta o flujo qr en segundo plano responde inmediatamente con el intenttoken para que el cliente pueda consultar el resultado cuando estรฉ listo { "result" true, "intenttoken" "token generado o externo", "async" true, "status" "pending" } el resultado se consulta con get /api/v1/read/\ token (ver secciรณn siguiente) error { "result" false, "intenttoken" "token si fue generado", "error" "descripciรณn del error" } posibles errores error descripciรณn total is required and must be > 0 falta el monto o es invรกlido credentials not configured no se configuraron credenciales (solo si no se envรญa intenttoken) cuando se usa un token externo, las credenciales no son necesarias credentials required for source operations se enviรณ source pero no hay credenciales (el flujo qr siempre requiere credenciales para llamar al endpoint de operaciรณn) no device connected no hay dispositivo conectado device info not available no se pudo obtener info del dispositivo card read failed el dispositivo no pudo leer la tarjeta timeout se agotรณ el tiempo de lectura (120s) cancelled la lectura fue cancelada not in pinpad mode el dispositivo no estรก en modo pinpad operate response did not contain a qr barcode la respuesta del endpoint de operaciรณn no contiene el cรณdigo qr esperado get /api/v1/read/\ token consulta el resultado de una operaciรณn de lectura asรญncrona iniciada con async true parรกmetro de ruta parรกmetro tipo descripciรณn token string el intenttoken devuelto por post /api/v1/read respuesta โ pendiente (la lectura aรบn estรก en progreso) { "result" false, "intenttoken" "token", "status" "pending" } respuesta โ completada (la lectura finalizรณ exitosamente) { "result" true, "intenttoken" "token", "status" "completed", "sourcedata" { "pin" " ", "emvdata" " ", "cryptogram" " ", "ksn" " ", "track2" " " } } la respuesta contiene todos los campos que devolverรญa una lectura sรญncrona (sourcedata, geolocation, etc ) el resultado se elimina del almacenamiento interno una vez consumido respuesta โ error (la lectura fallรณ) { "result" false, "intenttoken" "token", "status" "error", "error" "timeout" } el resultado de error tambiรฉn se elimina una vez consumido token no encontrado { "result" false, "error" "no async operation found for this token" } delete /api/v1/read cancela una lectura de tarjeta en progreso (tanto sรญncrona como asรญncrona) envรญa la seรฑal de cancelaciรณn al dispositivo para que deje de esperar la tarjeta respuesta { "result" true } pantalla del dispositivo mostrar resultado โ post /api/v1/display muestra una pantalla de resultado con animaciรณn en el dispositivo pos es fire and forget sdconn responde inmediatamente tras enviar el comando cuerpo { "status" "success", "title" "pago aprobado", "subtitle" "visa 1234", "total" 15 00, "currency" "ars", "text" "id 123456", "timeout" 10 } campo tipo requerido descripciรณn status string o number no estado del resultado (ver tablas abajo) title string no tรญtulo que se muestra en pantalla subtitle string no subtรญtulo debajo del tรญtulo total number no monto como float (ej 15 00) currency string no cรณdigo de moneda (ej "ars") text string no texto adicional debajo del monto timeout number no segundos antes de volver a pantalla de espera (defecto 10) usar 0 para desactivar valores de status por nombre valor animaciรณn "success" cรญrculo verde con check "error" cรญrculo rojo con x "neutral" cรญrculo naranja con reloj "none" sin animaciรณn, fondo blanco valores de status por cรณdigo numรฉrico se pueden enviar cรณdigos numรฉricos directamente (por ejemplo, el status code del procesador) y el dispositivo resuelve la animaciรณn automรกticamente cรณdigos se resuelve a 3, 4, 200, 300 302, 605, 800 success 400 417, 500, 603, 604 error 1, 2, 100, 210, 600 602, 610 neutral otros none respuesta { "result" true } mostrar carga โ post /api/v1/display muestra una pantalla de carga con spinner en el dispositivo pos es fire and forget se usa para indicar que se estรก procesando una operaciรณn cuerpo { "view" "loading", "title" "procesando pago ", "subtitle" "no retire la tarjeta", "timeout" 30 } campo tipo requerido descripciรณn view string sรญ debe ser "loading" title string no tรญtulo que se muestra en pantalla subtitle string no subtรญtulo debajo del tรญtulo timeout number no segundos antes de volver a pantalla de espera (defecto 10) usar 0 para desactivar respuesta { "result" true } para quitar la pantalla de carga, enviar un delete /api/v1/display o mostrar otra vista mostrar selecciรณn โ post /api/v1/display muestra una pantalla con opciones seleccionables en el dispositivo pos es bloqueante la peticiรณn http queda en espera hasta que el usuario selecciona una opciรณn o se agota el timeout cuerpo { "view" "choose", "title" "seleccione cuotas", "subtitle" "visa 1234", "values" \[ { "label" "1 pago $15 00", "value" "1" }, { "label" "3 cuotas $5 75 c/u", "value" "3" }, { "label" "6 cuotas $3 08 c/u", "value" "6" } ], "timeout" 60 } campo tipo requerido descripciรณn view string sรญ debe ser "choose" title string no tรญtulo de la pantalla subtitle string no subtรญtulo values array sรญ lista de opciones cada opciรณn tiene label (texto visible) y value (valor de retorno) timeout number no segundos de espera antes de timeout (defecto 60) respuesta exitosa (usuario seleccionรณ una opciรณn) { "result" true, "selected" { "label" "3 cuotas $5 75 c/u", "value" "3" } } respuesta โ timeout { "result" false, "error" "timeout" } ocultar pantalla โ delete /api/v1/display oculta la pantalla del dispositivo antes de que expire el timeout el dispositivo vuelve a la pantalla de espera de pinpad respuesta { "result" true } informaciรณn de tarjeta post /api/v1/card/info analiza los datos de track de una tarjeta y extrae el cรณdigo de servicio para determinar si la tarjeta tiene chip emv o capacidad contactless (nfc) no requiere conexiรณn con un dispositivo โ es un utilitario de parsing local cuerpo { "track1" "%b4111111111111111^doe/john^2512101000000000?", "track2" ";4111111111111111=2512101000000000?" } campo tipo requerido descripciรณn track1 string no datos de track 1 (actualmente no se parsea, reservado para uso futuro) track2 string sรญ datos de track 2 (formato iso 7813) formato de track 2 ;pan=yymmsssddddddddd? โ โ โ โโ datos discrecionales โ โ โโโโ cรณdigo de servicio (3 dรญgitos) โ โโโโโโโ vencimiento (aamm) โโโโโโโโโโโโ nรบmero de tarjeta (pan) el separador puede ser = (texto) o d (hex) respuesta exitosa { "result" true, "pan" "41111111 1111", "expiry" "2512", "servicecode" { "code" "101", "haschip" true, "chiprequired" true, "contactless" false, "international" true, "pinrequired" false, "cashallowed" true } } campo tipo descripciรณn pan string pan enmascarado (primeros 8 dรญgitos del bin + รบltimos 4 dรญgitos) expiry string vencimiento en formato aamm servicecode code string cรณdigo de servicio de 3 dรญgitos servicecode haschip boolean la tarjeta tiene chip emv (ic) servicecode chiprequired boolean el chip es obligatorio (no se permite fallback a banda magnรฉtica) servicecode contactless boolean la tarjeta soporta contactless (nfc/tap) servicecode international boolean la tarjeta es de intercambio internacional servicecode pinrequired boolean se requiere pin para la transacciรณn servicecode cashallowed boolean se permite retiro de efectivo referencia del primer dรญgito del cรณdigo de servicio dรญgito significado haschip chiprequired contactless 1 internacional, chip obligatorio โ โ 2 internacional, chip + contactless โ โ 5 nacional, chip obligatorio โ โ 6 nacional, chip + contactless โ โ 7 privado, chip obligatorio โ โ 0 solo banda magnรฉtica error { "result" false, "error" "invalid track2 no separator found (expected '=' or 'd')" } proxy de procesamiento post /api/v1/p/operations/\ token proxy directo a la api de mobbex (post {mobbexapibase}/p/operations/{token}) reenvรญa el cuerpo tal cual, sin parsing ni validaciรณn รบtil cuando el intent token se genera externamente y se quiere procesar la operaciรณn sin pasar por el flujo de lectura las credenciales de mobbex (si estรกn configuradas) se agregan automรกticamente como headers x api key y x access token parรกmetro de ruta parรกmetro tipo descripciรณn token string intent token a operar cuerpo se envรญa directamente a la api de mobbex sin modificaciones respuesta se reenvรญa directamente la respuesta de la api de mobbex sin modificaciones conexiรณn al dispositivo por api post /api/v1/connect inicia una conexiรณn al dispositivo de forma programรกtica (alternativa al panel de administraciรณn) conexiรณn serial { "mode" "serial", "port" "com3" } campo tipo requerido descripciรณn mode string sรญ debe ser "serial" port string sรญ nombre del puerto serial (ej "com3", "/dev/cu usbmodem1421") respuesta exitosa (serial) { "result" true, "mode" "serial", "port" "com3", "connected" true } la conexiรณn serial se establece inmediatamente (handshake + modo pinpad) no requiere verificaciรณn adicional conexiรณn http { "mode" "http", "ip" "192 168 1 50", "port" "5000" } campo tipo requerido descripciรณn mode string sรญ debe ser "http" ip string sรญ ip del dispositivo port string no puerto del dispositivo (defecto 5000) respuesta exitosa (http) { "result" true, "mode" "http", "ip" "192 168 1 50", "port" 5000, "verificationneeded" true, "message" "enter the pin displayed on the device using post /api/v1/connect/verify" } el dispositivo mostrarรก un pin en pantalla se debe verificar con post /api/v1/connect/verify post /api/v1/connect/verify verifica el pin mostrado en el dispositivo para completar la conexiรณn http cuerpo { "ip" "192 168 1 50", "port" 5000, "pin" "123456" } campo tipo requerido descripciรณn ip string sรญ ip del dispositivo port number no puerto del dispositivo (defecto 5000) pin string sรญ pin mostrado en el dispositivo respuesta exitosa { "result" true, "mode" "http", "device" { "ip" "192 168 1 50", "port" 5000, "name" "pos n62" }, "connected" true } error (pin invรกlido) { "result" false, "error" "invalid pin" } reconexiรณn post /api/v1/reconnect intenta reconectarse al รบltimo dispositivo guardado usando el token de confianza no requiere pin respuesta exitosa { "result" true, "device" { "ip" "192 168 1 50", "port" 5000, "name" "pos n62" } } error { "result" false, "error" "no saved device or device not reachable" } dispositivo get /api/v1/device/info obtiene informaciรณn del hardware y software del dispositivo conectado respuesta { "type" "pos", "serialnumber" "sn12345", "deviceextras" { "os" "android", "osversion" "11", "manufacturer" "nexgo", "model" "n62", "serialnumber" "sn12345", "bundleid" "com sugaway pos", "buildnumber" 42, "appversion" "1 2 3", "romversion" "n62 20230101", "kernelversion" "4 14 116" } } la informaciรณn se cachea en memoria por 24 horas y se limpia al cambiar de modo de conexiรณn o dispositivo get /api/v1/device/location obtiene la ubicaciรณn gps del dispositivo se cachea por 5 minutos la consulta al dispositivo tiene un timeout de 1 segundo โ si no responde a tiempo, se omite la ubicaciรณn (no se envรญa en la operaciรณn) si no hay ubicaciรณn disponible (ni en cachรฉ ni del dispositivo), la operaciรณn continรบa sin geolocalizaciรณn respuesta โ ubicaciรณn disponible { "latitude" 31 4201, "longitude" 64 1888, "accuracy" 12 5, "provider" "gps", "timestamp" 1741564800000 } respuesta โ ubicaciรณn no disponible { "error" "location not available" } get /api/v1/devices lista los dispositivos conectados actualmente respuesta { "result" true, "devices" \[ { "ip" "192 168 1 50", "port" 5000, "name" "pos n62" } ] } si no hay dispositivo conectado, devices es un array vacรญo delete /api/v1/devices/\ id elimina un dispositivo de la lista de dispositivos activos respuesta { "result" true } patch /api/v1/devices/\ id/mode cambia el modo de operaciรณn del dispositivo cuerpo { "mode" "pinpad" } modo descripciรณn normal modo pos estรกndar con pantalla de ingreso de monto slave modo cola recibe trabajos de pago desde una cola transit lectura continua de tarjetas para peajes/transporte pinpad modo pinpad espera comandos de lectura del controlador post /api/v1/pinpad config personaliza la pantalla de espera del modo pinpad permite configurar tรญtulo, subtรญtulo e imagen de fondo todos los campos son opcionales โ solo se envรญan al dispositivo los campos proporcionados los campos omitidos no se modifican si background image es una url (http // o https //), sdconn descarga la imagen, la redimensiona y optimiza automรกticamente antes de enviarla al dispositivo imรกgenes estรกticas (png, jpeg) se redimensionan a mรกximo 480px de ancho (manteniendo proporciรณn) y se re codifican como jpeg calidad 80 gif animados se redimensionan a mรกximo 480px de ancho, se limitan a 90 frames (eliminando frames de forma uniforme y acumulando los delays para mantener la velocidad de animaciรณn), y se re codifican como gif con dithering floyd steinberg y paleta de 256 colores nota background image solo estรก disponible en modo http si se envรญa en modo serial, se retorna un error cuerpo { "title" "mi negocio", "subtitle" "acerque o inserte su tarjeta", "background image" "https //example com/background png" } campo tipo requerido descripciรณn title string no tรญtulo mostrado en la pantalla de espera subtitle string no subtรญtulo mostrado debajo del tรญtulo background image string no url de la imagen de fondo (png, jpeg o gif) o string base64 si es url, se descarga, optimiza y convierte a base64 automรกticamente solo disponible en modo http comportamiento segรบn modo de conexiรณn serial solo title y subtitle se envรญa como campo waiting dentro del mensaje set mode ({ mode "pinpad", waiting { title, subtitle } }) si se envรญa background image, se retorna error http se envรญa via post /device/pinpad config al dispositivo soporta los 3 campos respuesta exitosa { "result" true } errores { "result" false, "error" "no device connected" } { "result" false, "error" "background image is only available in http mode" } flujo tรญpico de uso sin token externo (flujo estรกndar) app pc sdconn dispositivo pos โ โ โ โ post /api/v1/read โ โ โ { total 15 00 } โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ โ (obtiene info del dispositivo)โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ โ (crea operaciรณn en mobbex) โ โ โ โโโโโโโโโโ> mobbex api โ โ โ<โโโโโโโโโโ { token } โ โ โ โ โ โ (lectura de tarjeta) โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ (usuario pasa tarjeta)โ โ โ<โโโโโโโโโโ { sourcedata } โ โ โ โ โ { result true, โ โ โ intenttoken " ", โ โ โ sourcedata { } } โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ โ post /api/v1/display โ โ โ { status "success" } โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ (pantalla de resultado)โ con token externo app pc sdconn dispositivo pos โ โ โ โ post /api/v1/read โ โ โ { total 15 00, โ โ โ intenttoken "ext token" } โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ โ (obtiene info del dispositivo)โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ โ (omite llamada a mobbex api) โ โ โ โ โ โ (lectura de tarjeta) โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ (usuario pasa tarjeta)โ โ โ<โโโโโโโโโโ { sourcedata } โ โ โ โ โ { result true, โ โ โ intenttoken "ext token", โ โ โ geolocation \[lat, lng], โ โ โ sourcedata { } } โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ flujo qr (con source) app pc sdconn dispositivo pos โ โ โ โ post /api/v1/read โ โ โ { total 15 00, โ โ โ source "arg qr" } โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ โ (obtiene info del dispositivo)โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ โ (crea operaciรณn en mobbex) โ โ โ โโโโโโโโโโ> mobbex api โ โ โ<โโโโโโโโโโ { token } โ โ โ โ โ โ (obtiene qr de mobbex) โ โ โ โโโโโโโโโโ> mobbex api โ โ โ<โโโโโโโโโโ { barcode } โ โ โ โ โ โ (muestra qr en dispositivo) โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ (qr visible en pantalla)โ โ โ โ โ { result true, โ โ โ intenttoken " ", โ โ โ operationid " ", โ โ โ source "arg qr", โ โ โ status { code, text }, โ โ โ geolocation \[lat, lng] } โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ โ (espera a que el usuario โ โ โ escanee el qr โ consultar โ โ โ estado externamente) โ โ โ โ โ โ delete /api/v1/read โ โ โ (cuando quiera cancelar) โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ (quita qr) โ flujo asรญncrono app pc sdconn dispositivo pos โ โ โ โ post /api/v1/read โ โ โ { total 15 00, โ โ โ async true } โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ โ (obtiene info del dispositivo)โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ โ (crea operaciรณn en mobbex) โ โ โ โโโโโโโโโโ> mobbex api โ โ โ<โโโโโโโโโโ { token } โ โ โ โ โ { result true, โ (lanza lectura en background) โ โ intenttoken " ", โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ async true, โ โ โ status "pending" } โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ โ (polling) โ โ โ get /api/v1/read/\ token โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ { status "pending" } โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ (usuario pasa tarjeta)โ โ โ<โโโโโโโโโโ { sourcedata } โ โ โ โ โ get /api/v1/read/\ token โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ { result true, โ โ โ status "completed", โ โ โ intenttoken " ", โ โ โ sourcedata { } } โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ flujo con vista choose (cuotas) app pc sdconn dispositivo pos โ โ โ โ post /api/v1/display โ โ โ { view "choose", โ โ โ title "cuotas", โ โ โ values \[ ] } โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ>โ โ โ (usuario toca una opciรณn)โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ โ { result true, โ โ โ selected { โ โ โ label "3 cuotas", โ โ โ value "3" } } โ โ โ<โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ