Recibe pagos one click con autorización y captura

Separa la autorización y captura en tarjetas suscritas para crear un cobro ahora y capturar los fondos después

Web
Android
iOS

Recibir pagos one click con el esquema de autorización y captura, permite guardar los datos de tarjeta de tu cliente de manera segura, garantizando la disponibilidad de un monto en la tarjeta del cliente máximo por 30 días. Si el pago no es capturado en ese tiempo, será anulado de manera de automática y los fondos serán liberados.

El flujo que integrarás será el siguiente:

Auth y captura bajo demanda

1. Crea la inscripción de la tarjeta

Lo primero que debes hacer para generar cobros one click con el esquema de autorización y captura, es inscribir la tarjeta de tu cliente. Para realizar la inscripción, sigue las instrucciones dadas en el artículo de Genera pagos one click.

Si la suscripción se realiza correctamente, recibirás el subscriptionId. Lo siguiente será realizar desde tu back-end una petición de autorización para luego hacer una de captura o anulación, dependiendo del caso.

2. Autoriza el cargo

Con el subscriptionId de tu tarjeta recibido en el paso anterior, deberás realizar una llamada a nuestro endpoint de autorización para iniciar la reserva de un monto determinado.

  • Javascript
  • Python
  • PHP
var request = require("request");
var options = {
method: 'POST',
url: 'https://api-uat.kushkipagos.com/subscriptions/v1/card/1574693127852000/authorize',
headers: {'content-type': 'application/json'},
body: {
amount: {ice: 0, iva: 0, subtotalIva: 0, subtotalIva0: 6000, currency: 'MXN'},
name: 'John',
lastName: 'Doe',
email: 'johnD@kushkipagos.com',
orderDetails: {siteDomain: 'tuebook.com',
shippingDetails: {name: 'John Doe', phone: +593988734644, address: 'Calle 13 Avenida 39 40', city: 'Guadalajara', region: 'Jalisco', country: 'México', zipCode: 170402},
billingDetails: {name: 'John Doe', phone: +593988734644, address: 'Calle 13 Avenida 39 40', city: 'Guadalajara', region: 'Jalisco', country: 'México', zipCode: 170402}
},
fullResponse: true
},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
import http.client
conn = http.client.HTTPSConnection("api-uat.kushkipagos.com")
payload = "{\"amount\":{\"ice\":0,\"iva\":0,\"subtotalIva\":0,\"subtotalIva0\":6000,\"currency\":\"MXN\"},\"name\":\"John\",\"lastName\":\"Doe\",\"email\":\"johnD@kushkipagos.com\",\"orderDetails\":{\"siteDomain\":\"tuebook.com\",\"shippingDetails\":{\"name\": \"John Doe\",\"phone\":\"+593988734644\",\"address\":\"Calle 13 Avenida 39 40\",\"city\":\"Guadalajara\",\"region\":\"Jalisco \",\"country\":\"México\",\"zipCode\":\"170402\"},\"billingDetails\":{\"name\":\"John Doe\",\"phone\":\"+593988734644\",\"address\":\"Calle 13 Avenida 39 40\",\"city\": "Guadalajara","region": "Jalisco","country": "México","zipCode": \"170402\"}},\"fullResponse\":true}
headers = { 'content-type': "application/json" }
conn.request("POST", "/subscriptions/v1/card/1574693127852000/authorize", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append('{"amount":{"ice":0,"iva":0,"subtotalIva":0,"subtotalIva0":6000,"currency":"MXN"},"name":"John","lastName":"Doe","email":"johnD@kushkipagos.com","orderDetails": {"siteDomain":"tuebook.com","shippingDetails":{"name":"John Doe","phone":"+593988734644","address":"Calle 13 Avenida 39 40","city": "Guadalajara","region":"Jalisco","country":"México","zipCode":"170402"},"billingDetails":{"name": "John Doe","phone":"+593988734644","address":"Calle 13 Avenida 39 40","city": "Guadalajara","region":"Jalisco","country":"México","zipCode": "170402"}},"fullResponse":true}');
$request->setRequestUrl('https://api-uat.kushkipagos.com/subscriptions/v1/card/1574693127852000/authorize');
$request->setRequestMethod('POST');
$request->setBody($body);
$request->setHeaders(array(
'content-type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();

3. Kushki verifica autorización

Kushki validará la disponibilidad de fondos con la entidad emisora de la tarjeta. Una vez obtenida la respuesta de Kushki, guarda el ticketNumber ya que será este el identificador para realizar luego la captura, así como también la anulación.

4. Ejecuta el cargo

4.1. Realiza la captura (Opcional)

Una vez que se requiera recolectar los fondos de la tarjeta, captura el monto que definas de acuerdo al autorizado llamando a nuestro endpoint de captura para suscripciones one click , utilizando el subscriptionId de la tarjeta y el ticketNumber obtenido en la autorización.

  • Javascript
  • Python
  • PHP
var request = require("request");
var options = {
method: 'POST',
url: 'https://api-uat.kushkipagos.com/subscriptions/v1/card/123442221212/capture',
headers: {'content-type': 'application/json'},
body: {
ticketNumber: '319228478889680318',
amount: {currency: 'MXN', subtotalIva: 0, iva: 0, subtotalIva0: 6000, ice: 0},
fullResponse: true
},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
import http.client
conn = http.client.HTTPSConnection("api-uat.kushkipagos.com")
payload = "{\"ticketNumber\":\"319228478889680318\",\"amount\":{\"currency\":\"MXN\",\"subtotalIva\":0,\"iva\":0,\"subtotalIva0\":6000,\"ice\":0},\"fullResponse\":true}"
headers = { 'content-type': "application/json" }
conn.request("POST", "/subscriptions/v1/card/123442221212/capture", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append('{"ticketNumber":"319228478889680318","amount":{"currency":"MXN","subtotalIva":0,"iva":0,"subtotalIva0":6000,"ice":0},"fullResponse":true}');
$request->setRequestUrl('https://api-uat.kushkipagos.com/subscriptions/v1/card/123442221212/capture');
$request->setRequestMethod('POST');
$request->setBody($body);
$request->setHeaders(array(
'content-type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();

4.2. Anula la autorización (opcional)

Si necesitas anular una autorización puedes hacerlo llamando a nuestro enpoint de anulación de cobros, utilizando el ticketNumber obtenido de la autorización.

  • Javascript
  • Python
  • PHP
var request = require("request");
var options = {
method: 'DELETE',
url: 'https://api-uat.kushkipagos.com/v1/charges/1528188291221',
headers: {'content-type': 'application/json'},
body: {
fullResponse: true,
amount: {subtotalIva: 1000, subtotalIva0: 0, ice: 0, iva: 0, currency: 'MXN'}
},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
import http.client
conn = http.client.HTTPSConnection("api-uat.kushkipagos.com")
payload = "{\"fullResponse\":true,\"amount\":{\"subtotalIva\":1000,\"subtotalIva0\":0,\"ice\":0,\"iva\":0,\"currency\":\"MXN\"}}"
headers = { 'content-type': "application/json" }
conn.request("DELETE", "/v1/charges/1528188291221", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append('{"fullResponse":true,"amount":{"subtotalIva":1000,"subtotalIva0":0,"ice":0,"iva":0,"currency":"MXN"}}');
$request->setRequestUrl('https://api-uat.kushkipagos.com/v1/charges/1528188291221');
$request->setRequestMethod('DELETE');
$request->setBody($body);
$request->setHeaders(array(
'content-type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();

5. Prueba tu integración

Existen tarjetas de prueba que puedes utilizar en el ambiente UAT para asegurarte que tu integración está lista. Úsalas con cualquier CVV, código postal y fecha de expiración futura.

  • Transacción aprobada: 5451951574925480
  • Transacción declinada en solicitud de token (front-end): 4574441215190335
  • Transacción declinada en autorización: 4349003000047015
  • Transacción declinada en captura: 4547004841271012