dapp
CashIn

Con la integración de Cash In, tu comercio adquirirá la capacidad de lectura y procesamiento de referencias Cash In para realizar los cobros en efectivo de las mismas y que estos se vean reflejados como depósitos de efectivo en las cuentas de los usuarios.

En esta documentación encontrarás toda la información necesaria para:

  • Validar referencias
  • Cobrar referencias
  • Reversar referencias Cash in

En caso de tener alguna duda, estaremos felices de ayudarte a través del botón de contacto que se encuentra en cada una de las secciones de esta documentación.

Paso a Paso
Ambientes

cuenta con un sandbox para poder realizar pruebas durante el desarrollo.
Las URL base para cada ambiente son las siguientes.


Sandbox:

https://sandbox.dapp.mx/v2/


Producción:

https://api.dapp.mx/v2/
Autenticación

dapp® utiliza "Basic Access Authentication" para el REST API, usando el API KEY como password y dejando el usuario vacío


También debe incluirse el header “User-Agent” de lo contrario se rechazará la petición con un código 403, se recomienda incluir un nombre distintivo y un número de versión de aplicación, sin embargo cualquier valor será aceptado, ejemplo:

“User-Agent”: “MiIntegracion1.0”

Ejemplo de respuesta:
curl --location --request GET 'https://sandbox.dapp.mx/v2' \
--header 'Authorization: Basic OnlvdXItYXBpLWtleQ=='
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic OnlvdXItYXBpLWtleQ==");
Request request = new Request.Builder()
    .addHeader("Authorization", "Basic OnlvdXItYXBpLWtleQ==")
url = "https://sandbox.dapp.mx/v2"

payload={}
headers = {
'Authorization': 'Basic OnlvdXItYXBpLWtleQ==',
}

response = requests.request("GET", url, headers=headers, data=payload)
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://sandbox.dapp.mx/v2",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Basic OnlvdXItYXBpLWtleQ=="
  ],
]);

$response = curl_exec($curl);

curl_close($curl);
Validación de referencia

El usuario que desee realizar un Cash In se presentará a la caja con una referencia numérica asociada a la operación. El sistema de la caja debe leer esta referencia y enviarla al siguiente endpoint para recibir los datos asociados a ella.

https://sandbox.dapp.mx/v2/cashin/references/{cashin_reference}

Url completa en sandbox:
https://sandbox.dapp.mx/v2/cashin/references/{cashin_reference}

Método HTTP
GET

Tipo de API key requerida
Privada


Ejemplos de código
curl --location --request GET 'https://sandbox.dapp.mx/v2/cashin/references/{CASHIN_REFERENCE}' \
--header 'User-Agent: MyApp 1.0' \
--header 'Authorization: Basic OnlvdXItYXBpLWtleQ=='
var client = new RestClient("https://sandbox.dapp.mx/v2/cashin/references/{CASHIN_REFERENCE}");
client.Timeout = 60;
var request = new RestRequest(Method.GET);
client.UserAgent = "MyApp 1.0";
request.AddHeader("Authorization", "Basic OnlvdXItYXBpLWtleQ==");
IRestResponse response = client.Execute(request);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://sandbox.dapp.mx/v2/cashin/references/{CASHIN_REFERENCE}")
  .method("GET", null)
  .addHeader("User-Agent", "MyApp 1.0")
  .addHeader("Authorization", "Basic OnlvdXItYXBpLWtleQ==")
  .build();
Response response = client.newCall(request).execute();
import requests

url = "https://sandbox.dapp.mx/v2/cashin/references/{CASHIN_REFERENCE}"

payload={}
headers = {
  'User-Agent': 'MyApp 1.0',
  'Authorization': 'Basic OnlvdXItYXBpLWtleQ=='
}

response = requests.request("GET", url, headers=headers, data=payload)
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://sandbox.dapp.mx/v2/cashin/references/{CASHIN_REFERENCE}",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    'User-Agent' => 'MyApp 1.0',
    "Authorization: Basic OnlvdXItYXBpLWtleQ=="
  ],
]);

$response = curl_exec($curl);

curl_close($curl);
Ejemplo de respuesta:
{ "rc": 0, "msg": "Ok", "data": { "reference": "523837", "creation_date": "2022-07-28T22:01:08.257008+00:00", "expiration_date": "2022-07-28T22:06:08.242188+00:00", "amount": 40.0, "currency": "MXN" } }
Parámetros devueltos:

Parámetro

Descripción

reference

Número de referencia.

creation_date

Fecha de creación.

expiration_date

Fecha de expiración.

amount

Monto asociado a la referencia.

currency

Moneda de la referencia.


Cobrar referencia

Una vez que la referencia fue validada, se puede proceder a cobrar la referencia consumiendo el siguiente endpoint.

https://sandbox.dapp.mx/v2/cashin

Url completa en sandbox:
https://sandbox.dapp.mx/v2/cashin

Método HTTP
POST

Tipo de API key requerida
Privada

Parámetros Aceptados

Parámetro

Descripción

Requerido u opcional

reference

Referencia cashin.

Requerido

amount

Monto, tiene que ser un valor tipo float. Ejemplo: 10.0

Requerido

merchant_reference

Referencia interna del comercio. Máximo 200 caracteres.

Opcional

store

Tienda dónde se realizará el abono.

Requerido

pos

Caja dónde se hará el abono.

Requerido



Ejemplos de código
curl --location --request POST 'https://sandbox.dapp.mx/v2/cashin' \
--header 'User-Agent: MyApp 1.0' \
--header 'Authorization: Basic OnlvdXItYXBpLWtleQ==' \
--header 'Content-Type: application/json' \
--data-raw '{
    "reference": "1234562565547614",
    "amount": 10.0,
    "merchant_reference": "prueba cashin",
    "store": 1,
    "pos": 1
}'
var client = new RestClient("https://sandbox.dapp.mx/v2/cashin");
client.Timeout = 60;
var request = new RestRequest(Method.POST);
client.UserAgent = "MyApp 1.0";
request.AddHeader("Authorization", "Basic OnlvdXItYXBpLWtleQ==");
request.AddHeader("Content-Type", "application/json");
var body = @"{" + "\n" +
@"    ""reference"": ""1234562565547614""," + "\n" +
@"    ""amount"": 10.0," + "\n" +
@"    ""merchant_reference"": ""prueba cashin""," + "\n" +
@"    ""store"": 1," + "\n" +
@"    ""pos"": 1" + "\n" +
@"}";
request.AddParameter("application/json", body,  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"reference\": \"1234562565547614\",\n    \"amount\": 10.0,\n    \"merchant_reference\": \"prueba cashin\",\n    \"store\": 1,\n    \"pos\": 1\n}");
Request request = new Request.Builder()
  .url("https://sandbox.dapp.mx/v2/cashin")
  .method("POST", body)
  .addHeader("User-Agent", "MyApp 1.0")
  .addHeader("Authorization", "Basic OnlvdXItYXBpLWtleQ==")
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();
import requests
import json

url = "https://sandbox.dapp.mx/v2/cashin"

payload = json.dumps({
  "reference": "1234562565547614",
  "amount": 10,
  "merchant_reference": "prueba cashin",
  "store": 1,
  "pos": 1
})
headers = {
  'User-Agent': 'MyApp 1.0',
  'Authorization': 'Basic OnlvdXItYXBpLWtleQ==',
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://sandbox.dapp.mx/v2/cashin',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "reference": "1234562565547614",
    "amount": 10.0,
    "merchant_reference": "prueba cashin",
    "store": 1,
    "pos": 1
  }',
  CURLOPT_HTTPHEADER => array(
    'User-Agent' => 'MyApp 1.0',
    'Authorization: Basic OnlvdXItYXBpLWtleQ==',
    'Content-Type: application/json',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
Ejemplo de respuesta:
{ "rc": 0, "msg": "Ok", "data": { "id": "43e9d7e2-f88e-4857-b110-8d1e3c31bded", "reference": "1234562565547614", "merchant_reference": "prueba cashin", "auth_number": "579035", "amount": 100.0, "fee": 0.0, "total": 100.0, "currency": "MXN", "refunded": false, "date": "2022-05-10T21:33:16.760231+00:00", "wallet": { "id": "043", "name": "Vringpay" } } }
Parámetros devueltos:

Sección

Parámetro

Descripción

 

id

Id del Cash In.

 

reference

Número de referencia.

 

Merchant_ reference

Referencia interna del comercio.

 

auth_num

Número de autorización.

 

amount

Monto de la referencia.

 

fee

Comisión.

 

total

Monto de la referencia más valor de la comisión.

 

currency

Moneda del pago.

 

refunded

Indica si la transacción ha sido reversada.

 

date

Fecha de la operación.

Wallet

id

Id del wallet.

name

Nombre del wallet.


Reverso de una referencia Cash in

En caso de que la caja no haya recibido la autorización del Cash In a tiempo, puede solicitar un reverso de la operación. Las referencias Cash In solo podrán ser reversadas el mismo día en el que fueron pagadas.

Para realizar un reverso hay que consumir el siguiente endpoint:

/cashin/{cashinout_id}/refund

Url completa en sandbox:
https://sandbox.dapp.mx/v2/cashin/{cashinout_id}/refund

Método HTTP
POST

Tipo de API key requerida
Privada

Ejemplo de URL completa:

https://sandbox.dapp.mx/v2/cashin/ 63e6e1d5-8bbb-4e3b-a60f-134fa55afc6f/refund
Ejemplos de código
curl --location -g --request POST 'https://sandbox.dapp.mx/v2/cashin/{CASHIN_ID}/refund' \
--header 'User-Agent: MyApp 1.0' \
--header 'Authorization: Basic OnlvdXItYXBpLWtleQ==' \
var client = new RestClient("https://sandbox.dapp.mx/v2/cashin/{CASHIN_ID}/refund");
client.Timeout = 60;
var request = new RestRequest(Method.POST);
client.UserAgent = "MyApp 1.0";
request.AddHeader("Authorization", "Basic OnlvdXItYXBpLWtleQ==");
IRestResponse response = client.Execute(request);
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://sandbox.dapp.mx/v2/cashin/{CASHIN_ID}/refund")
  .method("POST", body)
  .addHeader("User-Agent", "MyApp 1.0")
  .addHeader("Authorization", "Basic OnlvdXItYXBpLWtleQ==")
  .build();
Response response = client.newCall(request).execute();
import requests

url = "https://sandbox.dapp.mx/v2/cashin/{CASHIN_ID}/refund"

payload={}
headers = {
  'User-Agent': 'MyApp 1.0',
  'Authorization': 'Basic OnlvdXItYXBpLWtleQ=='
}

response = requests.request("POST", url, headers=headers, data=payload)
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://sandbox.dapp.mx/v2/cashin/{CASHIN_ID}/refund',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'',
  CURLOPT_HTTPHEADER => array(
    'User-Agent' => 'MyApp 1.0',
    'Authorization: Basic OnlvdXItYXBpLWtleQ==',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
Ejemplo de respuesta:
{ "rc": 0, "msg": "Ok", "data": { "id": "43e9d7e2-f88e-4857-b110-8d1e3c31bded", "reference": "1234562565547614", "merchant_reference": "prueba cashin", "auth_number": "579035", "amount": 100.0, "fee": 0.0, "total": 100.0, "currency": "MXN", "refunded": true, "date": "2022-05-10T21:33:16.760231+00:00", "wallet": { "id": "043", "name": "Vringpay" } } }
Parámetros devueltos:

Sección

Parámetro

Descripción

 

id

Id del CashIn/out.

 

reference

Número de referencia.

 

Merchant_reference

Referencia interna del comercio.

 

auth_num

Número de autorización.

 

amount

Monto de la referencia.

 

fee

Comisión.

 

total

Monto de la referencia más valor de la comisión.

 

currency

Moneda del pago.

 

refunded

Indica se la transacción ha sido o no reversada.

 

date

Fecha de la operación.

Wallet

id

Id del wallet.

name

Nombre del wallet.


Glosario

Te dejamos aquí algunos términos relevantes definidos para facilitar la lectura y entendimiento de nuestras documentaciones.


Código de cobro:
Es el identificador único asignado a una transacción de cobro generada por un comercio y que está asociado a ciertos parámetros específicos como Nombre del Comercio, Monto, Moneda, Fecha, Lugar y Hora, entre otros. Un código de cobro puede ser representado como un Código QR para ser escaneado por el cliente, o ser transferido a un dispositivo móvil a través de un deep link o una notificación push.


Código QR:
Un código de respuesta rápida (o Código QR) es una representación gráfica bidimensional de una cadena de texto generado por que generalmente se asocia a un código de cobro.


Código QR dinámico:
Es aquél Código QR asociado a un solo código de cobro y a una sola transacción única y diferenciable. Sus parámetros pueden tomar valores distintos en cada transacción. Cada Código QR se verá distinto a los demás ya que representará una cadena de texto distinta.


Código QR estático:
Es aquél Código QR que luce permanentemente igual ya que siempre representa una misma cadena de texto. Este tipo de códigos son útiles cuando los parámetros asociados a los códigos de cobro son siempre iguales. Dado que la representación gráfica no cambia, estos códigos pueden ser impresos y usados múltiples veces para pagar un mismo código de cobro.


Referencia Cash in:
Es un código alfanumérico asociado a una transacción de pago en efectivo, ya sea para realizar un depósito de efectivo, para realizar un pago de servicios, para realizar el pago en efectivo de una orden de comercio electrónico, o cualquier otra operación equivalente. Las referencias Cash In están siempre asociadas a parámetros específicos como Monto, Fecha, Hora, entre otros, y son generadas a petición del usuario cuando este desea realizar una operación de este tipo.


Súmate a la revolución.
Intégrate ahora.

Súmate a la revolución.
Intégrate ahora.

Quiero Integrarme
Es la forma de contacto, ingresa un correo correcto
El número debe de ser de al menos 10 dígitos







Olvidé mi contraseña