Générer un lien de paiement
Testez le web service Charge/CreatePaymentOrder depuis notre playground : Charge/CreatePaymentOrder.
Cas d'utilisation
Le marchand souhaite générer une URL de paiement afin d'envoyer une proposition commerciale.
Avec cette solution, il peut personnaliser entièrement le message et joindre une pièce jointe, comme par exemple un devis, s'il le désire.
Il peut aussi récupérer le contenu du message généré par la plateforme afin de l'utiliser dans le message qu'il transmettra à l'acheteur.
L'envoi du message est réalisée par le marchand.
Requête pour un paiement comptant
Appelez le service PCharge/CreatePaymentOrder en utilisant les champs ci-dessous :
Paramètre | Requis | Description |
---|---|---|
channelOptions.channelType | Non | Paramètre permettant de définir le canal d'émission de l'ordre de paiement. Peut être valorisé à URL ou ne pas être envoyé. |
expirationDate | Non | Date de validité de l'ordre au format ISO-8601. Ne peut pas être antérieure à la date courante et ne peut pas dépasser 90 jours. Si ce paramètre n'est pas envoyé, la valeur appliquée sera celle de la boutique. Ex : 2021-10-05T21:59:59+00:00 |
locale | Non | Code représentant le nom de la langue et composé du code de la langue (ISO 639-1) suivi du code du pays (ISO 3166 alpha-2), séparés par le caractère "_". Permet de définir la langue des pages de paiement et du mail de confirmation. Si ce paramètre n'est pas renseigné, la langue utilisée sera celle de la boutique. Par exemple : "fr_FR", "es_ES", "en_GB", "pt_BR" |
merchantComment | Non | Commentaire facultatif destiné à l'utilisateur du Identifiant utilisateur source , soit en consultant la colonne Informations utilisateur . |
amount | Oui | Montant à payer, exprimé dans sa plus petite unité monétaire (le centime pour l'euro). |
currency | Oui | Devise du paiement. Code ISO 4217 alpha-3. Ex: "EUR" pour l'euro. |
orderId | Non | Référence de la commande. |
taxAmount | Non | Montant des taxes pour l’ensemble de la commande, exprimé dans sa plus petite unité monétaire (le centime pour l'euro). |
taxRate | Non | Taux de taxe appliqué sur l’ensemble de la commande. La valeur doit être le pourcentage à appliquer (21 pour 21%). |
transactionOptions.cardOptions.manualValidation | Non | Permet de préciser si la validation de la transaction est manuelle. Valeurs possibles: "YES" ou "NO". |
transactionOptions.cardOptions.captureDelay | Non | Indique le délai, en nombre de jours, avant remise en banque. |
strongAuthentication | Non | Permet d’activer ou de désactiver l’authentification forte lors du paiement. Valeurs possibles : "ENABLED", "DISABLED", CHALLENGE_REQUESTED, CHALLENGE_MANDATE, NO_PREFERENCE ou "AUTO". |
paymentReceiptEmail | Non | Adresse email qui sera utilisée pour l'envoi du ticket de paiement à l'acheteur. Nécessite l'activation de la règle de notification "E-mail de confirmation de paiement à destination de l'acheteur". |
dataCollectionForm | Non | Utilisation du formulaire de collecte de données. Valeurs possibles: "true" ou "false". |
customer | Non | Objet contenant les données de l'acheteur. |
formAction | Non | Permet de définir le type de comportement souhaité lors de la création de la transaction. |
paymentMethodToken | Non | Alias du moyen de paiement à utiliser pour le paiement. |
paymentMethods | Non | Liste des moyens de paiement à proposer à l’acheteur. |
metadata | Non | Valeurs personnalisées rattachées à la transaction, au format json. |
D'autres champs facultatifs sont disponibles.
Retrouvez l'intégralité des champs dans notre playground : Charge/CreatePaymentOrder (menu à gauche).
Exemple de requête
Paiement comptant
{ "amount": 10000, "currency": "EUR", "orderId": "myOrderId-1234", "channelOptions": { "channelType": "URL" } }
{ "amount": 200050, "currency": "PEN", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "URL" }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "locale": "es_PE", "dataCollectionForm": "false" }
{ "amount": 200050, "currency": "ARS", "orderId": "myOrderId-999999", "channelOptions": { "channelType": "URL" }, "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": "URL" }, "paymentReceiptEmail": "sample@example.com", "expirationDate": "2020-04-20T20:13:26+02:00", "locale": "es_CO", "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"]; ?>
Réponse
L'objet answer contiendra les paramètres ci-dessous:
Paramètre | Description |
---|---|
paymentOrderId | ID de l'ordre de paiement. |
paymentURL | URL de paiement. |
paymentOrderStatus | Statut de l'ordre de paiement. |
creationDate | Date et heure de création de l'ordre de paiement. |
updateDate | Date et heure de modification de l'ordre de paiement. |
channelDetails.channelType | Canal de transmission de l'ordre de paiement. |
message | Message comportant le lien de paiement, rédigé dans la locale. |
amount | Montant à payer, exprimé dans sa plus petite unité monétaire. |
currency | Devise du paiement. Code ISO 4217 alpha-3. |
locale | Code représentant le nom de la langue et composé du code de la langue (ISO 639-1) suivi du code du pays (ISO 3166 alpha-2), séparés par le caractère "_". |
strongAuthentication | Préférence du marchand concernant l'authentification forte. |
orderId | Référence de la commande. |
paymentReceiptEmail | Adresse email qui sera utilisée pour l'envoi du ticket de paiement à l'acheteur. |
taxAmount | Montant des taxes pour l’ensemble de la commande, exprimé dans sa plus petite unité monétaire. |
taxRate | Taux de taxe appliqué sur l’ensemble de la commande. |
expirationDate | Date de validité de l'ordre au format ISO-8601. |
dataCollectionForm | Utilisation du formulaire de collecte de données. |
merchantComment | Commentaire facultatif. |
transactionDetails.cardDetails.manualValidation | Mode de validation de la transaction. |
transactionDetails.cardDetails.captureDelay | Délai de capture. |
customer | Objet contenant les données de l'acheteur. |
formAction | Permet de définir le type de comportement souhaité lors de la création de la transaction. |
paymentMethodToken | Alias du moyen de paiement à utiliser pour le paiement. |
paymentMethods | Liste des moyens de paiement à proposer à l’acheteur. |
metadata | Valeurs personnalisées rattachées à la transaction, au format json. |
Retrouvez l'intégralité des champs dans notre playground : PaymentOrder
Exemple de réponse
{ "webService": "Charge/CreatePaymentOrder", "version": "V4", "applicationVersion": "5.5.0", "status": "SUCCESS", "answer": { "paymentOrderId": "fd8f6060f824427ba687d0161e46af8f", "paymentURL": "https://sogecommerce.societegenerale.eu/t/328zq5so", "paymentOrderStatus": "RUNNING", "creationDate": "2020-03-31T15:06:49+00:00", "updateDate": null, "amount": 200050, "currency": "EUR", "locale": "en_GB", "strongAuthentication": "AUTO", "orderId": "myOrderId-1234", "channelDetails": { "channelType": "URL", "mailDetails": null, "smsDetails": null, "whatsAppDetails": 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": "I pay EUR 2,000.50 via secure payment before 23/04/2020 (if the link does not work, copy the URL : https://sogecommerce.societegenerale.eu/t/xdt0bcmo ).", "_type": "V4/PaymentOrder" }, "ticket": null, "serverDate": "2020-03-31T15:06:49+00:00", "applicationProvider": "SOGECOM", "metadata": null, "_type": "V4/WebService/Response" } }
Gestion des erreurs
Le Web Service Charge/createPaymentOrder retournera une erreur dans les cas suivants:
Code | Description |
---|---|
INT_009 | Le format du champ amount est invalide ou le champ n'est pas transmis. |
INT_010 | Le format du champ currency est invalide ou le champ n'est pas transmis. |
INT_050 | Le paramètre strongAuthentication est invalide. |
INT_856 | Le paramètre locale est invalide. |
INT_858 | Le paramètre taxRate est invalide. |
INT_869 | Le paramètre taxAmount est invalide. |
PSP_519 | Devise inconnue. |
PSP_606 | Devise non supportée par le contrat. |
PSP_1007 | La date d'expiration de l'ordre de paiement ne peut etre antérieure à la date courante ni excédée 90 jours. |
PSP_1015 | Aucun formulaire de collecte de données pour cette boutique. |
PSP_1018 | Le formulaire de collecte de données ne peut être utilisé pour la devise demandée. |