Document Information | |
---|---|
File: | ATIONET - Pagos OFF Line |
Doc Version: | 1.0 |
Release Date: | 12, November 2021 |
Author: | ATIONet LLC |
Change Log | ||
---|---|---|
Ver. | Date | Change Summary |
1.0 | 12/November/2021 | Initial version. |
- Visión general
- Secuencia de pagos con modo OFF Line
- Implementación de pagos con modo OFF Line
- Documentación de API
- Manejo de errores
- Mensajes de ejemplo
Ationet Fleet Mobile Payments - OFF Line Permite realizar una venta sin la necesidad de recibir los datos de la misma del POS/Sistema de facturación. Luego de realizado el despacho de combustible el cliente obtiene los datos del Sitio y la bomba seleccionando de forma manual o escaneando la imagen de Código QR y completa con los datos de la venta brindados por el playero a través del ticket.
- El playero realiza el despacho y entrega el ticket indicando al cliente que no hay conexion para poder gestionar el pago de manera online.
- El cliente con la APP Driver escanea QR o selecciona manualmente el Sitio y la Bomba, solicita a ATIONET la informacion que devuelve indicando los datos correspondientes.
- Se habilita la pantalla en la APP Driver para Cargar los campos Indicados en el ticket de despacho.
- Se confirma la venta, se envia la Transaccion a ATIONET que confirma o rechaza la Venta, o en un tercer caso de ser necesario solicita verificación de reglas.
- Si ATIONET solicita verificación de reglas, estas son solicitadas al cliente y una vez enviadas, se deberá consultar el estado de la transacción hasta que ATIONET confirme o rechaze la venta.
- Si el cliente ingreso un valor diferente al valor despachado, si el valor ingresado fue menor, el playero le solicitará que ingrese un nuevo pago, y si el valor ingresado fue mayor, el cliente deberá comunicarse con el Company Admin.
La sección describe los pasos necesarios para integrar los pagos con modo OFF Line de ATIONet con el punto de venta de facturación para aceptar pagos mediante la aplicación Ationet Driver.
- Clave de backend de POS: una clave secreta única que se utiliza para asegurar el cifrado de cada solicitud. Esto debe mantenerse en el lado del servidor y no debe compartirse con nadie.
Debe solicitar sus claves a ATIONET.
Nota: Nunca comparta la clave secreta de backend de su POS con nadie.
El playero entrega el ticket con los datos del despacho, luego el cliente selecciona si quiere escanear el QR de la bomba o quiere seleccionar el sitio y bomba de manera manual desde la aplicación, luego ingresa manualmente la información del ticket y la envía. Los datos enviados a Mobile Payment API son:
Nombre | Tipo | Origen | Descripción |
---|---|---|---|
IDDispatch |
(string) Guid |
Completado por la app |
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX |
PumpNumber |
string |
El cliente lo ingresa por QR o seleccionando en lista de opciones |
“00”-“99” |
TerminalIdentification |
string |
Completado por la app |
Debe solicitarse a ATIONet |
ProductCode |
string |
El cliente lo ingresa manualmente |
“0”-“9999” |
ProductUnitPrice |
decimal |
El cliente lo ingresa manualmente |
xxx.xx |
ProductAmount |
decimal |
El cliente lo ingresa manualmente |
xxxxxxx.xx |
ProductQuantity |
decimal |
Completado por la app |
xxxxxxx.xx |
ProductDescription |
string |
Completado por la app |
(OPCIONAL) La descripción del producto. |
localTransactionDate |
integer |
Completado por la app con formato yyyymmdd |
Es la fecha local de la Transacción |
localTransactionTime |
integer |
Completado por la app con formato hhmmss |
Es la hora local de la de la Transacción |
En la seccion Ejemplo método crear y procesar puede encontrar un ejemplo de como es la trama en formato Json
.
Una vez enviado el request del método Crear y procesar, responderá con el estado de la transacción
Nombre | Descripción |
---|---|
Post Paid Confirmed |
La transacción fue aprobada |
Post Paid Prompting needed |
Se le solicita al cliente la verificación de reglas |
Prompting Sent |
Las reglas son enviadas |
TransactionRefused |
La transacción fue rechazada |
Cancelled By MPPA |
La Transaccion se vence por time out |
Si el método Crear y procesar responde con el estado Prompting needed, el usuario deberá validar reglas adicionales al endPoint del Método Validar reglas, y luego la app driver deberá verificar el estado de la transacción utilizando el método Obtener el estado de una Transacción continuamente hasta que le responda un estado diferente al Prompting needed
Nota: Se recomienda consultar el estado de transacción 8 veces por minuto.
En ATIONet las reglas se refieren a límites que pueden ser configurados por la empresa y asociados a distintas entidades. Cuando la entidad tenga una regla de solicitud, ATIONET responderá solicitando información adicional para aprobarla.
Las reglas solicitadas pueden ser una o varias de las siguientes:
"PromptPrimaryPin": "string",
"PromptSecondaryTrack": "string",
"PromptOdometer": "string",
"PromptDriverId": "string",
"PromptVehicleId": "string",
"PromptTruckUnitNumber": "string",
"PromptTrailerNumber": "string",
"PromptEngineHours": "string",
"PromptMiscellaneous": "string"
Nota: El valor siempre será "true"
En algunos casos, como el de Odometer
o EngineHours
, la regla puede solicitar un mínimo y/o un rango de valores. Por ejemplo:
"PromptOdometer": "true",
"LastOdometer": "140",
"MinOdometer": "150",
"MaxOdometer": "1000",
Se responden consumiento el endPoint del Método Validar reglas, debe incluirse el ID de la transacción y las reglas solicitadas.
Para cada regla, debe responder con el nombre de la regla y su valor respectivo. Los nombres de respuesta son:
"PrimaryPin": "string",
"SecondaryTrack": "string",
"Odometer": "string",
"DriverId": "string",
"VehicleId": "string",
"TruckUnitNumber": "string",
"TrailerNumber": "string",
"EngineHours": "string",
"Miscellaneous": "string"
URL Productiva: ationetmobilepayment-appshost.azurewebsites.net
URL QA: ationetmobilepayment-appshost-test.azurewebsites.net
Recibe la información completa de la venta, y procesa la misma.
El IdDispatch enviado deberá ser único.
Éste método requiere autenticacion a través del encabezado. Deberá ser de tipo basica. ejemplo:
Basic usuario:clave
URL: /api/PostPaid/CreateAndProcess
Method: HTTPost
body {
"sale": {
"idDispatch": "string",
"pumpNumber": "string",
"terminalIdentification": "string",
"productCode": "string",
"productUnitPrice": decimal,
"productAmount": decimal,
"productQuantity": decimal,
"productDescription": "string",
"localTransactionDate": integer,
"localTransactionTime": integer
},
"primaryTrack": "string"
}
Puede consultar la descripcion de los valores en la sección PASO 2 Crear solicitud de pago en modo OFF Line
Header:
Content-Type: application/json; charset=utf-8
content-encoding: gzip
body
{
"AuthorizationCode": "string",
"ResponseCode": "string",
"ResponseMessage": "string",
"IdTransaction": "string",
"CustomerData": {
"PromptPrimaryPin": "string",
"PromptSecondaryTrack": "string",
"PromptOdometer": "string",
"LastOdometer": "string",
"MinOdometer": "string",
"MaxOdometer": "string"
"PromptDriverId": "string",
"PromptVehicleId": "string",
"PromptTruckUnitNumber": "string",
"PromptTrailerNumber": "string",
"PromptEngineHours": "string",
"PromptMiscellaneous": "string"
}
}
Atención: El Objeto CustomerData sólo contendra información en caso de que se soliciten reglas.
Obtiene el estado de una Transacción.
Éste método requiere autenticacion a través del encabezado. Deberá ser de tipo basica. ejemplo:
Basic usuario:clave
URL: /api/PostPaid/GetTransactionStatus
Method: HTTPost
Body { "idDispatch": "string" }
Nombre | Descripción |
---|---|
idDispatch |
Es el identificador de la transacción |
Header:
Content-Type: application/json; charset=utf-8
content-encoding: gzip
body
{
"AuthorizationCode": "string",
"ResponseCode": "string",
"ResponseMessage": "string",
"customerData": {},
"TransactionStatus":
{
"name":"string",
"id": int
}
}
Valida las reglas adicionales.
URL: /api/PostPaid/RulesValidations
Method: HTTPost
Body {
"idTransaction": "string",
"customerData": {
"PrimaryPin": "string",
"SecondaryTrack": "string",
"Odometer": "string",
"DriverId": "string",
"VehicleId": "string",
"TruckUnitNumber": "string",
"TrailerNumber": "string",
"EngineHours": "string",
"Miscellaneous": "string"
}
}
Header:
Content-Type: application/json; charset=utf-8
content-encoding: gzip
Éste metodo devuelve una respuesta satisfactoria si pudo validar las reglas (200 Ok). Devuelve Bad Request indicando en el campo message
el motivo por el cual no pudo validar las reglas.
Las salidas exitosas / fallidas en la API de la interfaz se manejarán a través de códigos de estado HTTP.
La solicitud exitosa obtendrá un HTTP 200 y la respuesta resultante.
Si no se procesa la solicitud, se indicará mediante un código de estado de rango HTTP 400. El cuerpo contendrá un solo elemento con formato JSON con los campos "ResponseCode", "ResponseMessage" y "ResponseError".
body:
{
"sale": {
"IdDispatch":"de1ae20c-858c-4989-a334-43992df5c45c",
"PumpNumber": "1",
"TerminalIdentification": "S2G321",
"ProductCode": "1",
"ProductUnitPrice": 1,
"ProductAmount": 10,
"ProductDescription": "SUPER",
"productQuantity": 299
"localTransactionDate": 20211117
"localTransactionTime": 141414
},
"primaryTrack": "2456722042482930556=3606=000000""
}
{
"idTransaction": "3f34bdf9-15e2-4ef4-9134-f5a53ac360a8",
"authorizationCode": "035657109",
"responseCode": "40500",
"responseMessage": "Solicitud requerida",
"customerData": {
"PromptEngineHours": "true",
"MinEngineHours": "66",
"ContractMode": "2"
}
}
{
"idDispatch": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
{
"authorizationCode": "050808166",
"responseCode": "40500",
"responseMessage": "Solicitud requerida",
"customerData": {
"PromptOdometer": "true",
"ContractMode": "2"
},
"transactionStatus": {
"name": "Post Paid Prompting Needed",
"id": 26
}
}
{
"idTransaction": "f6f80f9a-7fb6-4d7c-9dca-18662d2147d0",
"customerData": {
"Odometer":"88"
}
}
{}