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
Lors de la prise de la commande, créez une transaction initiale avec le Web Service 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
Pour chaque déclenchement d'expédition, créez une transaction d'expédition avec le Web Service Charge/CreateShipmentTransaction associée à la transaction initiale.
- 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.
Vous vous servirez ensuite de la transaction initiale (le paiement effectué par l'acheteur) pour créer une nouvelle transaction à chaque déclenchement de l'expédition. Par exemple :
- 3 jours après la commande, vous déclenchez l'expédition du produit N°1. Vous créez à ce moment une transaction d'expédition de 35 EUR. Et l'acheteur sera débité de 35 EUR.
- 10 jours après la commande, vous déclenchez l'expédition du produit N°2. Vous créez une nouvelle transaction d'expédition de 25 EUR. Et l'acheteur sera encore débité de 25 EUR.
- 20 jours après la commande, vous déclenchez l'expédition du produit N°3. Vous créez à ce moment une transaction d'expédition de 14.12 EUR. Et l'acheteur sera débité des 14.12 EUR restant.
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:SHIPMENT_MULTIPLE_AUTHORISATIONpara solicitar autorizaciones múltiples.
. Campos recomendados:
- Référence de la commande : "myOrder-1234-initial".
- E-mail de l'acheteur : "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
Récupèrez le formToken
pour afficher le formulaire de paiement (Plus d'infos : Etape 4 : Afficher le formulaire de paiement)
L'acheteur s'authentifie sur le montant total de la commande mais la carte ne sera pas débité immédiatement. La plateforme de paiement crée une transaction de vérification, avec une durée de validité de 180 jours.
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.
Conservez l'
uuid
de la transaction initiale. Dans l'exemple,[transactions][0].[uuid]
a pour valeurf183418d08df49f3900bbd74ef837816
. Cette donnée est obligatoire pour créer les transactions d'expédition.
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:
- E-mail de l'acheteur : "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 valorPAIDdel campo.statussignifica que la transacción ha sido aceptada.
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:
- E-mail de l'acheteur : "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 valorPAIDdel campo.statussignifica que la transacción ha sido aceptada.
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:
- E-mail de l'acheteur : "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 valorPAIDdel campo.statussignifica que la transacción ha sido aceptada.
Más información :referencia de estado
Manejo de errores
Tabla de errores
Código | Descripción |
---|---|
INT_009 | El formato del campo amount no es válido o el campo no se ha transmitido. |
INT_010 | El formato del campo currency no es válido o el campo no se ha transmitido. |
INT_050 | El parámetro strongAuthentication es inválido. |
PSP_519 | Moneda desconocida. |
PSP_606 | Moneda no admitida por la afiliación. |
Analizar el resultado del pago
1. Pour la transaction initiale
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. Pour les transactions d'expédition
El Servicio Web devuelve un objeto de tipo Transacción de débito.