Realizar un pago al envío
Contexto
El pago al envío es una nueva funcionalidad que se rige según la DSP2
(segunda Directiva sobre servicios de pago). El vendedor puede realizar varios envíos para un mismo pedido en un plazo máximo de 180 días.
Casos de uso
El pago al envío funciona por etapas:
1. Transacción inicial
Al tomar el pedido, cree una transacción inicial con el servicio web Charge/CreatePayment .
- campo
amount
con el monto total del pedido. - campo
currency
con la divisa del pago según la norma ISO 4217 alpha-3. - campo
useCase
con el valorSHIPMENT_MULTIPLE_AUTHORISATION
.
La plataforma de pago crea una transacción de verificación con una validez de 180 días. El comprador se autentifica por el monto total del pedido, sin embargo, su tarjeta no se debita de inmediato.
2. Transacción de envío
Para cada disparador de envío, cree una transacción de envío con el servicio web Charge/CreateShipmentTransaction asociado con la transacción inicial.
- campo
uuid
: referencia única de la transacción inicial. - campo
amount
: monto total de los artículos expedidos.
La plataforma crea una transacción de débito. por el monto de los artículos expedidos.
Esquema
Cinemática de pago
Ejemplo
- El comprador pide 3 productos (35 EUR, 25 EUR y 14,12 EUR), por un monto total de 72,12 EUR.
- Si los 3 productos no están disponibles, el vendedor puede realizar un pago al envío con autorizaciones múltiples.
El comprador se autentifica por el monto total de la compra (72,12 €) cuando se crea la transacción inicial, pero se le debita a cada envío.
Luego, utilizará la transacción inicial (el pago realizado por el comprador) para crear una nueva transacción cada vez que se active el envío. Por ejemplo:
- Tres días después de realizar el pedido, se activa el envío del producto n.º 1. A continuación, se crea una transacción de envío por 35 EUR. Se le cobrarán 35 EUR al comprador.
- Diez días después de realizar el pedido, se activa el envío del producto n.º 2. Se crea una nueva transacción de envío por 25 EUR. Se cobrarán otros 25 EUR al comprador.
- 20 días después de realizar el pedido, se activa el envío del producto n.º 3. A continuación, se crea una transacción de envío por 14,12 EUR. Se cargarán al comprador los 14,12 EUR restantes.
Si la transacción se realiza en la red CB, las tres transacciones se beneficiarán de una garantía de pago porque el envío se realizó dentro de los 30 días siguientes al pedido.
Solicitud
Ejemplo de una transacción inicial
Campos obligatorios:
- Monto: 72,12 €
- Casos de uso:AUTORIZACIÓN_MÚLTIPLE_DE_ENVÍO para solicitar múltiples autorizaciones.
. Campos recomendados:
- Referencia del pedido: "myOrder-1234-initial".
- Correo electrónico del comprador: " sample@example.com ".
{ "amount": 7212, "currency": "EUR", "customer": { "email": "sample@example.com" }, "orderId": "myOrder-1234-initial", "useCase": "SHIPMENT_MULTIPLE_AUTHORISATION" }
<!-- <pre data-language="json" data-market="es-PE">
{
 "amount": 200050,
 "currency": "PEN",
 "orderId": "myOrderId-999999", 
 "channelOptions": {
 "channelType": "MAIL",
 "mailOptions": {
 "recipient": "sample@example.com"
 }
 },
 "paymentReceiptEmail": "sample@example.com",
 "expirationDate": "2020-04-20T20:13:26+02:00",
 "locale": "es_PE",
 "dataCollectionForm": "false"
}
</pre>
{ "amount": 200050, "currency": "ARS", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient": "sample@example.com" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "locale": "es_AR", "dataCollectionForm": "false" }
{ "amount": 200050, "currency": "COP", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient": "sample@example.com" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "locale": "es_CO", "dataCollectionForm": "false" }
{ "amount": 200050, "currency": "BRL", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient": "sample@example.com" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "locale": "pt_BR", "dataCollectionForm": "false" }-->
/** * I initialize the PHP SDK */ require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/keys.php'; require_once __DIR__ . '/helpers.php'; /** * Initialize the SDK * see keys.php */ $client = new Lyra\Client(); /** * I create a formToken */ $store = array("amount" => 250, "currency" => "EUR", "orderId" => uniqid("MyOrderId"), "customer" => array( "email" => "sample@example.com" )); $response = $client->post("V4/Charge/CreatePayment", $store); /* I check if there are some errors */ if ($response['status'] != 'SUCCESS') { /* an error occurs, I throw an exception */ display_error($response); $error = $response['answer']; throw new Exception("error " . $error['errorCode'] . ": " . $error['errorMessage'] ); } /* everything is fine, I extract the formToken */ $formToken = $response["answer"]["formToken"]; ?>
/** * I initialize the PHP SDK */ require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/keys.php'; require_once __DIR__ . '/helpers.php'; /** * Initialize the SDK * see keys.php */ $client = new Lyra\Client(); /** * I create a formToken */ $store = array("amount" => 250, "currency" => "EUR", "orderId" => uniqid("MyOrderId"), "customer" => array( "email" => "sample@example.com" )); $response = $client->post("V4/Charge/CreatePayment", $store); /* I check if there are some errors */ if ($response['status'] != 'SUCCESS') { /* an error occurs, I throw an exception */ display_error($response); $error = $response['answer']; throw new Exception("error " . $error['errorCode'] . ": " . $error['errorMessage'] ); } /* everything is fine, I extract the formToken */ $formToken = $response["answer"]["formToken"]; ?>
Para ver todos los campos y su descripción, consulte el playground: Charge/CreatePayment (menú a la izquierda).
Respuesta
Recupere el formToken
para mostrar el formulario de pago (Más información: Paso 4: Mostrar el formulario de pago )
El comprador autentica el importe total del pedido, pero el cargo en la tarjeta no se realizará inmediatamente. La plataforma de pago crea una transacción de verificación con una validez de 180 días.
Ejemplo de respuesta
"kr-answer": { "shopId": "12345678", "orderCycle": "CLOSED", "orderStatus": "PAID", "orderDetails": { "orderTotalAmount": 7212, "orderEffectiveAmount": 7212, "orderCurrency": "EUR", "mode": "TEST", "orderId": "myOrder-1234-initial", "metadata": null, "_type": "V4/OrderDetails" }, "transactions": [ { "shopId": "12345678", "uuid": "f183418d08df49f3900bbd74ef837816", "amount": 12500, "currency": "EUR", "paymentMethodType": "CARD", "paymentMethodToken": null, "status": "PAID", "detailedStatus": "ACCEPTED", "operationType": "VERIFICATION", "orderId": "myOrderId-1234", "_type": "V4/Charge/CreateQRCodeResponse" }, (...) "_type": "V4/WebService/Response" } }
Analice el resultado del pago. Más información: Etapa 5: Analizar el resultado del pago.
Conserve el
uuid
de la transacción original. En el ejemplo,[transactions][0].[uuid]
tiene el valorf183418d08df49f3900bbd74ef837816
. Estos datos son necesarios para crear transacciones de envío.
Ejemplo de transacción de envío 1
Solicitud
Campos obligatorios:
- Monto: 35,00€
- UUID :referencia única de la transacción inicial:f183418d08df49f3900bbd74ef837816
. Campos recomendados:
- Correo electrónico del comprador: " sample@example.com "
{ "amount": 3500, "customer": { "email": "sample@example.com" }, "uuid": "f183418d08df49f3900bbd74ef837816" }
Para ver todos los campos y su descripción, consulte el playground: Charge/CreateShipmentTransaction (menú a la izquierda);.
Respuesta de la solicitud
{ "webService": "Charge/CreateShipmentTransaction", "version": "V4", "applicationVersion": "6.12.0", "status": "SUCCESS", "answer": { "shopId": "12345678", "uuid": "7b8179b7845e4576868d624039b754c5", "paymentMethodType": "CARD", "paymentMethodToken": null, "detailedStatus": "AUTHORISED", "status": "PAID", "amount": 3500, "currency": "EUR", (...) "_type": "V4/WebService/Response" } }
El valor
Más información :referencia de estado
Ejemplo de transacción de envío 2
Solicitud
Campos obligatorios:
- Monto: 25,00 €
- UUID :referencia única de la transacción inicial:f183418d08df49f3900bbd74ef837816
. Campos recomendados:
- Correo electrónico del comprador: " sample@example.com "
{ "amount": 2500, "customer": { "email": "sample@example.com" }, "uuid": "f183418d08df49f3900bbd74ef837816" }
Para ver todos los campos y su descripción, consulte el playground: Charge/CreateShipmentTransaction (menú a la izquierda);.
Respuesta de la solicitud
{ "webService": "Charge/CreateShipmentTransaction", "version": "V4", "applicationVersion": "6.12.0", "status": "SUCCESS", "answer": { "shopId": "12345678", "uuid": "7b8179b7845e4576868d624039b754c5", "paymentMethodType": "CARD", "paymentMethodToken": null, "detailedStatus": "AUTHORISED", "status": "PAID", "amount": 2500, "currency": "EUR", (...) "_type": "V4/WebService/Response" } }
El valor
Más información :referencia de estado
Ejemplo de transacción de envío 3
Solicitud
Campos obligatorios:
- Monto: 14,12 €
- UUID :referencia única de la transacción inicial:f183418d08df49f3900bbd74ef837816
. Campos recomendados:
- Correo electrónico del comprador: " sample@example.com "
{ "amount": 1412, "customer": { "email": "sample@example.com" }, "uuid": "f183418d08df49f3900bbd74ef837816" }
Para ver todos los campos y su descripción, consulte el playground: Charge/CreateShipmentTransaction (menú a la izquierda);.
Respuesta de la solicitud
{ "webService": "Charge/CreateShipmentTransaction", "version": "V4", "applicationVersion": "6.12.0", "status": "SUCCESS", "answer": { "shopId": "12345678", "uuid": "7b8179b7845e4576868d624039b754c5", "paymentMethodType": "CARD", "paymentMethodToken": null, "detailedStatus": "AUTHORISED", "status": "PAID", "amount": 1412, "currency": "EUR", (...) "_type": "V4/WebService/Response" } }
El valor
Más información :referencia de estado
Manejo de errores
Tabla de errores
Código | Descripción |
---|---|
El formato del campo amount no es válido o el campo no se ha transmitido. | |
El formato del campo currency no es válido o el campo no se ha transmitido. | |
El parámetro strongAuthentication es inválido. | |
Moneda desconocida. | |
Moneda no admitida por la afiliación. |
Analizar el resultado del pago
1. Para la transacción inicial
Implemente la URL de notificación de finalización de pago (también conocida como IPN) para analizar el resultado y conservar el uuid
de la transacción original.
- Ingrese solamente la URL de notificación en la sección API REST (TEST o PRODUCTION): Procedimiento.
- Analice la IPN: Procedimiento.
2. Para transacciones de envío
El Servicio Web devuelve un objeto de tipo Transacción de débito.