Crear una solicitud de pago por e-mail
Testee el Web Service Charge/CreatePaymentOrder desde nuestro playground: Charge/CreatePaymentOrder.
Solicitud de pago en inmediato
CARACTERÍSTICAS | OBLIGATORIO | Descripción |
---|---|---|
channelOptions.channelType | Sí | Parámetro que permite definir el canal de emisión de la solicitud de pago. Su valor debe ser MAIL. |
channelOptions.mailOptions | Sí | Objeto json que permite definir los parámetros específicos para la creación de una solicitud de pago por e-mail. |
channelOptions.mailOptions.recipient | Sí | Dirección de e-mail del destinatario. |
channelOptions.mailOptions.bcc | NO | Lista de destinatarios adicionales. Estos destinatarios no son visibles para el destinatario principal (recipient). Use el punto y coma ";" como separador entre cada dirección. |
channelOptions.mailOptions.subject | NO | Permite personalizar la apariencia de los e-mails. Permite personalizar el asunto del e-mail. Este parámetro es obligatorio a menos que indique un nombre de plantilla válido en el parámetro channelOptions.mailOptions.template. |
channelOptions.mailOptions.body | NO | Permite personalizar el cuerpo del mensaje enviado Si el parámetro se deja vacío, se aplicará el mensaje predeterminado. |
channelOptions.mailOptions.template | NO | Nombre de la plantilla a utilizar para generar el e-mail. Para que funcione, es necesario que la plantilla exista en el Back Office. Cada plantilla de e-mail está asociada a un idioma (o configuración regional). Para utilizar una plantilla, asegúrese de indicar el idioma correcto en el parámetro locale. Si no se encuentra la plantilla se devolverá un error. Si definió un valor en los parámetros subject y body , se ignorará la plantilla. |
expirationDate | NO | Fecha de vencimiento de la solicitud en formato ISO-8601. No puede ser anterior a la fecha actual ni superar los 90 días. Si este parámetro no está definido, se aplicará el valor de la tienda. Ejemplo: 2021-10-05T21:59:59+00:00 |
locale | NO | Código que representa el nombre del idioma, compuesto por el código del idioma (ISO 639-1) seguido del código del país (ISO 3166 alpha-2), separados por el carácter "_". Permite definir el idioma de las páginas de pago y el e-mail de confirmación. Si este parámetro no está definido, se utiliza el idioma de la tienda. Por ejemplo: "fr_FR", "es_ES", "en_GB", "pt_BR" |
merchantComment | NO | Comentario opcional para el usuario delIdentifiant utilisateur source o bien consultando la columnaInformations utilisateur . |
amount | Sí | Monto para pagar, expresado en su fracción monetaria más pequeña (el céntimo para el euro). |
currency | Sí | Moneda del pago. Código ISO 4217 alpha-3. Ejemplo: "EUR" para el euro. |
orderId | NO | Referencia del pedido. |
taxAmount | NO | Monto de los impuestos para todo el pedido, expresado en su fracción monetaria más pequeña (el céntimo para el euro). |
taxRate | NO | Tipo de impuesto aplicado a todo el pedido. El valor debe ser el porcentaje a aplicar (21 para 21 %). |
transactionOptions.cardOptions.manualValidation | NO | Permite definir si la validación de la transacción es manual. Valores posibles: YES | NO. |
transactionOptions.cardOptions.captureDelay | NO | Indica el plazo, en días, antes de su captura. |
strongAuthentication | NO | Permite habilitar o deshabilitar la autentificación fuerte durante el pago. Valores posibles: Valores posibles: "ENABLED", "DISABLED", CHALLENGE_REQUESTED, CHALLENGE_MANDATE, NO_PREFERENCE o "AUTO". |
paymentReceiptEmail | NO | Dirección de e-mail para el envío del ticket de pago al comprador. Requiere la activación de la regla de notificación "E-mail de confirmación de pago destinado al comprador". |
dataCollectionForm | NO | Uso del formulario de recaudación de datos. Valores posibles: "true" o "false". |
customer | NO | Objeto que contiene los datos del comprador. |
formAction | NO | permite definir el tipo de comportamiento que desea al crear la transacción. |
paymentMethodToken | NO | Token del medio de pago que se utilizará para el pago. |
paymentMethods | NO | Lista de formas de pago para ofrecer al comprador. |
metadata | NO | Valores personalizados adjuntos a la transacción, en formato json. |
Existen campos opcionales.
Vea todos los campos de nuestro Playground:Charge/CreatePaymentOrder(menú de la izquierda).
Ejemplo de solicitud
Pago al contado
Hay 3 casos de uso disponibles:
- enviar un e-mail utilizando la plantilla “predeterminada” definida por la plataforma de pago,
- Enviar un e-mail utilizando una plantilla personalizada, definida en el Back Office del vendedor,
- enviar un e-mail personalizando su contenido directamente en la solicitud.
Ejemplo de solicitud que utiliza la plantilla predeterminada
El vendedor desea enviar una solicitud de pago utilizando el asunto y el mensaje definidos como predeterminados por la plataforma de pago.
Para ello, no transmita los campos subject , body ni template.
{ "amount": 10000, "currency": "EUR", "orderId": "myOrderId-1234", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient": "customer@example.com" } } }
<!-- <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"]; ?>
Ejemplo de solicitud utilizando una plantilla de e-mail personalizada
El vendedor ha creado una plantilla personalizada en una configuración regional específica desde el
Para hacerlo, utilice el campo template para transmitir el nombre de la plantilla a utilizar.
No transmita los campos body ni subject , no se tomarán en cuenta.
No es necesario transmitir el campo locale , su valor se deducirá a partir de la plantilla que se utilizará.
{ "amount": 200050, "currency": "EUR", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "template":"template_fr" } }, "paymentReceiptEmail" : "sample@example.com", "expirationDate" : "2020-04-20T20:13:26+02:00", "dataCollectionForm" : "false" }
{ "amount": 200050, "currency": "EUR", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "template":"template_en" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "dataCollectionForm": "false" }
{ "amount": 200050, "currency": "PEN", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "template":"template_es" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "dataCollectionForm": "false" }
{ "amount": 200050, "currency": "ARS", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "template":"template_es" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "dataCollectionForm": "false" }
{ "amount": 200050, "currency": "COP", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "template":"template_es" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "dataCollectionForm": "false" }
{ "amount": 200050, "currency": "BRL", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "template":"template_pt" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "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"]; ?>
Ejemplo de solicitud para enviar un mensaje personalizado
El vendedor desea personalizar el asunto y el mensaje del e-mail en su solicitud.
Para ello, no transmita el campo template.
Utilice los campos subject et body.
Para personalizarlos, las siguientes variables están a su disposición:
VALOR | Descripción |
---|---|
%url% | URL de la solicitud de pago Si falta esta variable, el enlace de pago se agregará automáticamente al final del mensaje. |
%amount% | Monto y moneda del pago |
%start_date% | Fecha de creación de la solicitud de pago. Permite indicar el inicio del periodo de validez de la solicitud de pago. |
%end_date% | Permite indicar el fin del periodo de validez de la solicitud de pago. |
%shop_name% | Nombre de su tienda como se define en el Back Office |
%reference% | Referencia del pedido. |
%shop_url% | URL de su tienda |
%shop_contact% | Dirección de e-mail del “administrador de la tienda” como se define en el Back Office |
En la respuesta, estas variables se reemplazarán por su valor.
{ "amount": 200050, "currency": "EUR", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "subject": "Votre commande %reference% sur %shop_name%", "body":"Bonjour, <br/>cet e-mail comporte un lien de paiement d'un montant de %amount% valable jusqu'au %end_date%.<br/>Pour confirmer le paiement, cliquez sur le lien suivant: %url%" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "dataCollectionForm": "false" }
{ "amount": 1500, "currency": "EUR", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "subject": "Your payment order %reference% from %shop_name%", "body":"Dear customer, <br/>this is a payment order of %amount% valid until %end_date%.<br/>To confirm, please click on the link below: %url%" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "dataCollectionForm": "false" }
{ "amount": 1500, "currency": "PEN", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "subject": "Su solicitud de pago %reference% por %shop_name%", "body":"Hola, <br/>Este correo electrónico contiene una solicitud de pago por un importe de %amount% válida hasta el %end_date%.<br/> Para confirmar el pago, haga clic en el enlace siguiente: %url%" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "dataCollectionForm": "false" }
{ "amount": 20000, "currency": "ARS", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "subject": "Su solicitud de pago %reference% por %shop_name%", "body":"Hola, <br/>Este correo electrónico contiene una solicitud de pago por un importe de %amount% válida hasta el %end_date%.<br/> Para confirmar el pago, haga clic en el enlace siguiente: %url%" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "dataCollectionForm": "false" }
{ "amount": 100000, "currency": "COP", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "subject": "Su solicitud de pago %reference% por %shop_name%", "body":"Hola, <br/>Este correo electrónico contiene una solicitud de pago por un importe de %amount% válida hasta el %end_date%.<br/> Para confirmar el pago, haga clic en el enlace siguiente: %url%" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "dataCollectionForm": "false" }
{ "amount": 200050, "currency": "EUR", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "MAIL", "mailOptions": { "recipient":"sample@example.com", "subject": "Sua oferta de pagamento %reference% por %shop_name%", "body":"Caro cliente, <br/>Este e-mail contém uma ordem de pagamento no valor de %amount% válida até %end_date%.<br/> Para confirmar o pagamento, favor clicar sobre o link seguinte: %url%" } }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "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"]; ?>
Nota
Si se especifica la configuración regional en la solicitud, el enlace de pago y la fecha de vencimiento de la solicitud se traducirán al idioma solicitado.
Asegúrese de redactar el contenido del e-mail en el idioma correcto.
Respuesta
El objeto answer contendrá los siguientes parámetros:
CARACTERÍSTICAS | Descripción |
---|---|
paymentOrderId | ID de la solicitud de pago. |
paymentURL | URL de pago. |
paymentOrderStatus | Estado de la solicitud de pago. |
creationDate | Fecha y hora de creación de la solicitud de pago. |
updateDate | Fecha y hora de modificación de la solicitud de pago. |
channelDetails.channelType | Canal de transmisión de la solicitud de pago. Valorizado a MAIL. |
channelDetails.mailDetails.recipient | Dirección de e-mail del destinatario. |
channelDetails.mailDetails.subject | Asunto del e-mail enviado. |
channelDetails.mailDetails.body | Cuerpo del e-mail enviado. |
channelDetails.mailDetails.template | Nombre de la plantilla utilizada. |
channelDetails.mailDetails.bcc | Lista de los destinatarios en copia oculta. |
mensaje | Mensaje que incluye el enlace de pago, redactado en el idioma de la configuración regional. |
amount | Monto a pagar, expresado en la unidad más pequeña de la moneda utilizada. |
currency | Moneda del pago. Código ISO 4217 alpha-3. |
locale | Código que representa el nombre del idioma, compuesto por el código del idioma (ISO 639-1) seguido del código del país (ISO 3166 alpha-2), separados por el carácter "_". |
strongAuthentication | Permite habilitar o deshabilitar la autentificación fuerte durante el pago. |
orderId | Referencia del pedido. |
paymentReceiptEmail | Dirección de e-mail para el envío del ticket de pago al comprador. |
taxAmount | Monto de los impuestos para todo el pedido, expresado en su unidad monetaria más pequeña. |
taxRate | Tipo de impuesto aplicado a todo el pedido. |
expirationDate | Fecha de vencimiento de la solicitud en formato ISO-8601. |
dataCollectionForm | Uso del formulario de recaudación de datos. |
merchantComment | Comentario opcional. |
transactionDetails.cardDetails.manualValidation | Modo de validación de la transacción. |
transactionDetails.cardDetails.captureDelay | Plazo de captura. |
customer | Objeto que contiene los datos del comprador. |
formAction | permite definir el tipo de comportamiento que desea al crear la transacción. |
paymentMethodToken | Token del medio de pago que se utilizará para el pago. |
paymentMethods | Lista de formas de pago para ofrecer al comprador. |
metadata | Valores personalizados adjuntos a la transacción, en formato json. |
Vea todos los campos de nuestro Playground: PaymentOrder
Ejemplo de respuesta
{ "webService": "Charge/CreatePaymentOrder", "version": "V4", "applicationVersion": "5.5.0", "status": "SUCCESS", "answer": { "paymentOrderId": "fd8f6060f824427ba687d0161e46af8f", "paymentURL": "https://secure.lyra.com/t/328zq5so", "paymentOrderStatus": "RUNNING", "creationDate": "2020-03-31T15:06:49+00:00", "updateDate": null, "amount": 10000, "currency": "EUR", "locale": "en_GB", "strongAuthentication": "AUTO", "orderId": "myOrderId-1234", "channelDetails": { "channelType": "MAIL", "mailDetails": { "subject": "Your payment order", "body": "<b>Message sent by DEMO STORE</b> <p>Dear customer,</p> <p>This e-mail is a payment order of EUR 2,000.50 valid until 01/04/2020. To confirm, please click on the link below : </p> <p>https://secure.lyra.com/t/w5izg024</p> <p>In case of problems, or if this message is not correctly displayed, please contact support@demostore.com.</p>", "template": null, "recipient": "customer@example.com", "bcc": null, "_type": "V4/MailDetails" }, "smsDetails": null, "whatsAppDetails": null, "ivrDetails": null, "_type": "V4/ChannelDetails" }, "paymentReceiptEmail": "sample@example.com", "taxRate": null, "taxAmount": null, "expirationDate": "2020-04-20T18:13:26+00:00", "transactionDetails": { "cardDetails": { "manualValidation": "NO", "captureDelay": 0, "_type": "V4/CardDetails" }, "_type": "V4/PaymentOrderTransactionDetails" }, "dataCollectionForm": false, "merchantComment": null, "message": "<b>Message sent by DEMO STORE</b> <p>Dear customer,</p> <p>This e-mail is a payment order of EUR 2,000.50 valid until 01/04/2020. To confirm, please click on the link below : </p> <p>https://secure.lyra.com/t/w5izg024</p> <p>In case of problems, or if this message is not correctly displayed, please contact support@demostore.com.</p>", "_type": "V4/PaymentOrder" }, "ticket": null, "serverDate": "2020-03-31T15:06:49+00:00", "applicationProvider": "PAYZEN", "metadata": null, "_type": "V4/WebService/Response" } }
Manejo de errores
El Web Service Charge/createPaymentOrder devolverá un error en los siguientes casos:
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. |
INT_841 | el objeto mailOptions está ausente. |
INT_850 | El parámetro channelOptions.mailOptions.recipient está ausente. |
INT_856 | El parámetro locale es inválido. |
INT_858 | El parámetro taxRate es inválido. |
INT_869 | El parámetro taxAmount es inválido. |
PSP_519 | Moneda desconocida. |
PSP_606 | Moneda no admitida por la afiliación. |
PSP_1007 | La fecha de vencimiento de la solicitud de pago no puede ser anterior a la fecha actual ni exceder los 90 días. |
PSP_1015 | No hay ningún formulario de recolección de datos para esta tienda. |
PSP_1018 | No se puede utilizar el formulario de recolección de datos para la moneda solicitada. |
PSP_1022 | La plantilla especificada en la solicitud no existe para la configuración regional solicitada. |