Questions fréquentes
Comment corriger les erreurs CORS ou "Unable to post message" au moment de payer ?
Lorsque l'acheteur décide de payer, créez un formToken en envoyant une requête vers le Web Service Charge/CreatePayment :
- Toujours depuis **votre serveur marchand**, car les données sensibles sont protégées. - Jamais depuis **votre navigateur**, car vos données sensibles sont vulnérables, comme vos identifiants. Pour sécuriser vos données, nous bloquons la requête et affichons des erreurs **CORS**.Pour vous aider, voir nos exemples d'intégration en fonction de votre framework JavaScript : Exemples de code.
Donnez un accès à la page de paiement avec **http://** et non avec **file://** depuis un serveur web.
Pour le framework [**ionic**](https://ionicframework.com/) ou **cordova**, dans **config.xml**, déclarez les noms de domaines pouvant être appelés par le client JavaScript :
```html[Plus d'informations.](https://cordova.apache.org/docs/en/latest/guide/appdev/allowlist/index.html)
Comment corriger les erreurs "Same-origin policy" ?
En cas d'erreur, ce type de message s'affiche souvent : "Blocked a frame with origin "[URL Domain]" from accessing a frame with origin "[URL Domain]".
Pour des raisons de sécurité, la `Same-origin policy` a restreint l'accès aux ressources provenant d'origines différentes.
[Plus d'informations.](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)
Comment configurer les CSP (Content Security Policy)
Ajoutez ces 3 directives pour autoriser le client JavaScript à créer ses IFrames.
Directive CSP | Valeurs |
---|---|
connect-src | https://static.scelliuspaiement.labanquepostale.fr |
frame-src | https://static.scelliuspaiement.labanquepostale.fr |
script-src | https://static.scelliuspaiement.labanquepostale.fr |
Exemple d'ajout dans les meta du head de votre page:
<meta
http-equiv="Content-Security-Policy"
content="
connect-src https://static.scelliuspaiement.labanquepostale.fr;
frame-src https://static.scelliuspaiement.labanquepostale.fr;
script-src https://static.scelliuspaiement.labanquepostale.fr;"
/>
Si vous utilisez un moteur de détection de fraude externe (comme monitor+, clearsale, ...), ajoutez également :
Directive CSP | Valeurs |
---|---|
connect-src | https://scelliuspaiement.labanquepostale.fr |
frame-src | https://scelliuspaiement.labanquepostale.fr |
script-src | https://scelliuspaiement.labanquepostale.fr |
Comment intégrer l'intégrité des sous-ressources (SRI) ?
Intégrer le SRI en suivant ces étapes :
- Appelez l'URL correspondant à la ressource que vous souhaitez charger sur votre page de paiement :
Librairie JavaScript | URL SRI |
---|---|
Formulaire SmartForm (kr-payment-form.min.js) | https://static.scelliuspaiement.labanquepostale.fr/static/js/krypton-client/V4.0/version.json |
Authentification du payeur (kr-authenticate.umd.js) | https://static.scelliuspaiement.labanquepostale.fr/static/js/authenticate-client/V1.0/version.json |
- Récupérez le hash présent dans la réponse :
- Dans cet exemple, la valeur du
hash
correspond àsha384-m2TqTgecvuLe1k+/eCJg3(...)TsYGcJfc5RMWYa/
.
{
"version": "V4.14",
"build": "87",
"target": "V4.0",
"integrity": {
"kr-payment-form.min.js": "sha384-m2TqTgecvuLe1k+/eCJg3(...)TsYGcJfc5RMWYa/"
},
"webservices": "V4"
- Intégrez dynamiquement le
hash
dans le header de votre page. Dans la balisescript
lors du chargement de notre librairie JS, ajoutez lehash
dans l'attributintegrity
.
Exemple :
Créez une variable sha_384
avec la valeur dynamique du hash
.
<script> src="https://static.scelliuspaiement.labanquepostale.fr/static/js/krypton-client/V4.0/stable/kr-payment-form.min.js" integrity="sha_384" crossorigin="anonymous" (...) </script>
Vous pouvez utiliser une librairie comme cURL
ou une API comme fetch
pour réaliser cette intégration.
Exemple avec cURL
- Appeler l'URL et récupérer le hash dans une variable. Dans cet exemple, le nom de la variable est
sha_384
.
<?php // create a new cURL resource $url = "/version.json"; // Initiate a cURL session. $ch = curl_init(); // Get page content curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Enter the URL and pass it to the variable. curl_setopt($ch, CURLOPT_URL, $url); //Disable certificate verification if HTTPS curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Execute the query $result = curl_exec($ch); //Encode in JSON $res = json_decode($result, true); // Get the hash $sha_384 = $res["integrity"]["kr-payment-form.min.js"]; //Close the cURL session curl_close($ch); (...) ?>
- Intégrer la variable (
sha_384
) dans leHTML
dans l'attributintegrity
lors du chargement de notre librairie JS.
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script src="/stable/kr-payment-form.min.js" integrity="<?php echo $sha_384; ?>" crossorigin="anonymous" (...) > </script> <link rel="stylesheet" href="/ext/neon-reset.min.css"> <script src="/ext/neon.js"> </script> <script type="text/javascript"> (...) </head> <body> (...) </body> </html>
- Appeler l'URL et récupérer le hash dans une variable. Dans cet exemple, le nom de la variable est
Si vous avez une erreur avec le framework Angular (zone.js) ?
Le framework Angular (zone.js) rencontre un problème lors du wrapping des rejets de promesses avec un dysfonctionnement du service `detectChanges`.
Exemple de message d'erreur :

Pour résoudre :
- Créez un fichier
zone-flags.ts
:- (window as any)._zone_symbol_DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION = true ;
- Importez le fichier dans
polyfills.ts
avantimport 'zone.js';
:- import './zone-flags' ;
Pour vous aider, voir notre exemple d'intégration pour Angular.
Plus d'infos : dans la documentation Angular et la configuration.
Comment accèder à des cas d'utilisation en mode avancé ?
Quelle est la durée de validité du formToken ?
Le formToken est le résultat de la réponse de l'appel Charge/CreatePayment.
Le formToken est valide pendant 15 minutes et non configurable.
Cette durée est :
- suffisante pour permettre à chaque acheteur de réaliser son paiement
- fixe : elle n'est pas remise à zéro à chaque action de l'utilisateur
- non modifiable : elle est fixée par la plateforme de paiement pour répondre à des contraintes techniques.
Comment ajouter des Conditions Générales de Vente (CGV) dans le formulaire embarqué
Conformément à la réglementation RGPD, l'acheteur doit d'abord valider vos Conditions Générales de Vente (CGV) avant de procéder au paiement.
L'affichage et la validation des CGV se font dans le code de votre page de paiement, à l'extérieur du formulaire embarqué.
La gestion des CGV sur votre site internet est hors du périmètre technique de la plateforme de paiement
Comprendre le refus d'un remboursement
La transaction ne peut pas être remboursée.
Trois cas existent :
- Si la carte a expiré de plus de 3 mois, la plateforme de paiement refuse la demande de remboursement avec un code 8 : La date d'expiration du moyen de paiement ne permet pas cette action (champ detailedErrorCode).
- Si le réseau supporte le credit online, la plateforme de paiement indique le motif de refus du remboursement, après la demande d'autorisation (champ detailedErrorMessage).
<p>Pour le réseau <no-translate><b>CB</b></no-translate>, par exemple, si la demande de remboursement se fait sur une carte en opposition, le code et le motif du refus peut être "59 : suspicion de fraude".</p>
- Si le réseau ne supporte pas le credit online, la plateforme de paiement n'a pas d'information sur le statut final du remboursement.
En cas de refus, l'acheteur doit contacter sa banque pour connaître le motif.
Quelles sont les langues disponibles pour le formulaire embarqué ?
Langue d'affichage du formulaire au format Culture (fr-FR) avec le paramètre kr-language (voir : lien).
Ex :
- pour le français, "fr-FR";
- pour le japonais, "ja-JP";
- pour le chinois, "zh-CN".
Utilisez aussi la méthode KR.setFormConfig (voir : lien)
Langue | Codification ISO 639-1 | Codification ISO 3166-1 alpha-2 |
---|---|---|
Allemand | de | DE |
Anglais | en | GB |
Chinois | zh | CN |
Espagnol | es | ES |
Français | fr | FR |
Italien | it | IT |
Japonais | ja | JP |
Néerlandais | nl | NL |
Polonais | pl | PL |
Portugais | pt | PT |
Russe | ru | RU |
Suédois | sv | SE |
Turc | tr | TR |