Transfert de la demande de paiement

Le serveur marchand reçoit une demande de paiement de la part de l'application mobile et doit la transmettre à la plateforme de paiement.

Pour cela, le site marchand va générer un formulaire de paiement HTML qu'il postera à la plateforme de paiement.

L'intégrité des données échangées est garantie par un échange de signatures alphanumériques entre la plateforme de paiement et le serveur marchand.

Le serveur marchand transmettra la signature alphanumérique dans le formulaire de paiement (voir chapitre Calculer la signature du Guide d'implémentation API Formulaire disponible sur notre site documentaire).

IMPORTANT

Toutes les données de votre formulaire doivent être encodées en UTF-8.

Les caractères spéciaux (accents, ponctuations, etc.) seront ainsi correctement interprétés par la plateforme de paiement.

Dans le cas contraire, le calcul de signature sera erroné et le formulaire sera rejeté.

  1. Création du formulaire de paiement

    Pour créer le formulaire de paiement :
    1. Utilisez l'ensemble des champs présents dans ce tableau pour construire la demande de paiement.
      Nom du champ Description Format Valeur
      vads_site_id Identifiant de la boutique n8 Ex : 12345678
      vads_currency Code numérique de la monnaie à utiliser pour le paiement, selon la norme ISO 4217 (code numérique) n3 Ex : 978 pour l'euro (EUR)
      vads_amount Montant du paiement dans sa plus petite unité monétaire (le centime pour l'euro) n..12 Ex : 3000 pour 30,00 EUR
      vads_cust_email Adresse e-mail de l’acheteur ans..150 Ex: abc@example.com
      vads_payment_cards Type de carte. String Ex: VISA

      (Consultez le Guide d'implémentation API Formulaire pour connaître la liste des valeurs possibles).

      vads_order_id Numéro de commande ans..64 Ex : 2-XQ001
      vads_version Version du protocole d’échange avec la plateforme de paiement enum V2
      vads_theme_config Permet de gagner en performances en désactivant des éléments de la page de paiement comme le sélecteur de langue, les logos du bas de page, etc. map

      SIMPLIFIED_DISPLAY=true

      vads_trans_date Date et heure du formulaire de paiement dans le fuseau horaire UTC n14

      Respectez le format AAAAMMJJhhmmss

      Ex : 20170701130025
      vads_trans_id Numéro de la transaction n6 Ex : 123456
      vads_payment_config Type de paiement enum SINGLE pour un paiement en 1 fois

      MULTI pour un paiement en plusieurs fois

      vads_page_action Action à réaliser enum PAYMENT
      vads_ctx_mode Mode de communication avec la plateforme de paiement enum TEST ou PRODUCTION
      vads_action_mode Mode d’acquisition des données de la carte enum INTERACTIVE
      signature Signature garantissant l'intégrité des requêtes échangées entre le site marchand et la plateforme de paiement. ans44 Ex:

      NrHSHyBBBc+TtcauudspNHQ5cYcy4tS4IjvdC0ztFe8=

    2. Utilisez les champs ci-dessous pour gérer le retour vers l'application mobile à la fin du paiement.

      Un paiement peut aboutir sur 4 états différents :

      • Paiement accepté

      • Paiement refusé

      • Paiement en erreur

      • Paiement abandonné par l'acheteur.

      Pour chaque état vous devez associer une URL:

      Nom du champ Description Format Valeur
      vads_url_success

      URL où sera redirigé l’acheteur, en cas de succès.

      ans..1024 Ex:

      http://webview.success

      vads_url_refused

      URL où sera redirigé l’acheteur, en cas de refus.

      ans..1024 Ex:

      http://webview.refused

      vads_url_cancel

      URL où sera redirigé l’acheteur en cas d'abandon ou d'expiration (timeout).

      ans..1024 Ex:

      http://webview.cancel

      vads_url_error

      URL où sera redirigé l’acheteur en cas d'erreur.

      ans..1024 Ex:

      http://webview.error

    3. Utilisez les champs ci-dessous pour configurer les temps de redirection vers l'application mobile à la fin du paiement:
      Tableau 1. Liste des champs facultatifs disponibles.
      Nom du champ Description Format
      vads_redirect_success_timeout

      Définit le délai d’attente avant redirection après un paiement réussi.

      Ce délai est exprimé en seconde et doit être compris entre 0 et 300 secondes.

      Valorisez ce champ à "0" pour ne pas afficher le ticket de paiement et rediriger automatiquement l'acheteur vers l'application mobile.

      n..3
      vads_redirect_error_timeout

      Définit le délai d’attente avant redirection après un paiement refusé.

      Ce délai est exprimé en seconde et doit être compris entre 0 et 300 secondes.

      Valorisez ce champ à "0" pour ne pas afficher la page de refus de paiement et rediriger automatiquement l'acheteur vers l'application mobile.

      n..3

    4. Ajoutez les autres champs optionnels en fonction de vos besoins (voir chapitre Utiliser des fonctions complémentaires du Guide d'implémentation API Formulaire disponible sur notre site documentaire).

    5. Consulter le chapitre Calculer la signature du Guide d'implémentation API Formulaire et calculez la valeur du champ signature.

  2. Envoi de la demande de paiement

    L'API de création de paiement est disponible en mode POST à cette adresse :

    https://secure.lyra.com/vads-payment/entry.silentInit.a

    IMPORTANT
    L'URL de l'API de création de paiement est différente de l'URL de la page de paiement, telle que décrite dans le Guide d'implémentation API Formulaire.

    Extrait du code d'exemple:

    List<NameValuePair> formParameters = new ArrayList<>();
    									
    formParameters.add(new BasicNameValuePair("vads_action_mode", "INTERACTIVE"));
    formParameters.add(new BasicNameValuePair("vads_amount", amount));
    formParameters.add(new BasicNameValuePair("vads_ctx_mode", mode));
    formParameters.add(new BasicNameValuePair("vads_currency", currency));
    if (StringUtils.isNotEmpty(email)) {
    formParameters.add(new BasicNameValuePair("vads_cust_email", email));
    }
    
    formParameters.add(new BasicNameValuePair("vads_language", language));
    if (StringUtils.isNotEmpty(orderId)) {
    	formParameters.add(new BasicNameValuePair("vads_order_id", orderId));
    }
    formParameters.add(new BasicNameValuePair("vads_page_action", "PAYMENT"));
    
    //Set the card type if provided
    if (StringUtils.isNotEmpty(cardType)) {
    	formParameters.add(new BasicNameValuePair("vads_payment_cards", cardType.toUpperCase()));
    }
    formParameters.add(new BasicNameValuePair("vads_payment_config", "SINGLE"));
    formParameters.add(new BasicNameValuePair("vads_site_id", merchantSiteId));
    formParameters.add(new BasicNameValuePair("vads_theme_config", "SIMPLIFIED_DISPLAY=true"));
    formParameters.add(new BasicNameValuePair("vads_trans_date", calculateDateFormatInUTC("yyyyMMddHHmmss")));
    formParameters.add(new BasicNameValuePair("vads_trans_id", String.format("%06d", transactionId)));
    formParameters.add(new BasicNameValuePair("vads_url_cancel", "http://webview_" + merchantSiteId + ".cancel"));
    formParameters.add(new BasicNameValuePair("vads_url_error", "http://webview_" + merchantSiteId + ".error"));
    formParameters.add(new BasicNameValuePair("vads_url_refused", "http://webview_" + merchantSiteId + ".refused"));
    formParameters.add(new BasicNameValuePair("vads_url_return", "http://webview_" + merchantSiteId + ".return"));
    formParameters.add(new BasicNameValuePair("vads_url_success", "http://webview_" + merchantSiteId + ".success"));
    formParameters.add(new BasicNameValuePair("vads_version", "V2"));
    
    //Create the string to sign
    String concatenateMapParams = "";
    for (NameValuePair pair : formParameters) {
    	concatenateMapParams += pair.getValue() + "+";
    }
    //Add private key in signature
    concatenateMapParams += usedMerchantKey;
    
    //Add signature to form parameters
    formParameters.add(new BasicNameValuePair("signature", hmacSha256(concatenateMapParams, usedMerchantKey)));