Encaissement de paiements par carte en mode hors ligne
Encaisser des paiements par carte lorsque vous rencontrez des problèmes de connectivité Internet.
Le SDK Terminal permet à votre application de continuer à encaisser les paiements à l’aide d’un lecteur mobile sans connexion réseau.
Erreur fréquente
En mode hors ligne, les informations de paiement sont collectées au moment de la vente et l’autorisation n’est tentée qu’après que la connectivité est rétablie et que le paiement est transmis. En tant qu’utilisateur, vous assumez tous les risques de refus et de falsification associés à une transaction hors ligne. Si votre lecteur falsifié ne peut pas transférer les paiements à Stripe, ou si l’émetteur refuse la transaction, il n’y a aucun moyen de récupérer les fonds et il est possible que vous ne receviez pas le paiement du client pour les biens ou services déjà fournis.
Pour limiter les risques de refus de la part de l’émetteur, nous vous conseillons de :
- Rétablir la connexion Internet le plus rapidement possible pour enregistrer les paiements sur Stripe.
- Bloquer les transactions supérieures à un certain montant.
- Faire échouer tous les paiements hors ligne quand le SDK a stocké un ensemble de transactions dont la somme dépasse un certain montant.
Encaisser des paiements en mode hors ligne
Les paiements hors ligne suivent les mêmes étapes que les paiements en ligne : création, collecte, traitement et capture du paiement. Votre appareil peut passer du mode en ligne au mode hors ligne à n’importe quelle étape du processus.
- Activer le mode hors ligne
- Se connecter à un lecteur en mode hors ligne
- Gérer les événements hors ligne
- Créer un Payment Intent en mode hors ligne
- Collecter un moyen de paiement
- Confirmer le paiement
- Attendre l’acheminement des paiements
- (Facultatif) Capturer le paiement
- (Facultatif) Examiner les paiements encaissés hors ligne
Activer le mode hors ligne
Pour utiliser le mode hors ligne, votre application doit utiliser la version 3.
ou une version ultérieure du SDK Terminal iOS.
Utilisez un objet Configuration ou le Dashboard afin d’activer le mode hors ligne pour les appareils pris en charge dans votre Location
.
Après avoir activé le mode hors ligne sur un objet Configuration
, vous pouvez l’affecter à un objet Location
. Vous pouvez également activer le mode hors ligne par défaut pour tous les emplacements (Locations
) en mettant à jour l’objet Configuration
par défaut de votre compte. La propagation des modifications apportées à l’API Configuration vers votre SDK et votre lecteur peut prendre quelques minutes. Pour qu’elles soient prises en compte, vous devez vous déconnecter puis vous reconnecter à votre lecteur.
Se connecter à un lecteur en mode hors ligne
Le SDK stocke localement les informations nécessaires sur Location
après la connexion en ligne. Lors des connexions hors ligne suivantes, il utilise les informations de configuration stockées à partir de cet emplacementLocation
.
Pour encaisser des paiements à l’aide d’un lecteur intelligent en mode hors ligne, vous devez avoir établi une connexion à un lecteur mobile du même type au même emplacement (Location
) en étant en ligne au cours des 30 derniers jours et avoir mis à jour le logiciel de votre lecteur dans ce laps de temps.
Si vous tentez de vous connecter à un lecteur hors ligne sans remplir ces conditions, la demande échoue avec une erreur.
Erreur | Résolution |
---|---|
Le SDK n’est pas connecté à Internet | Assurez-vous que l’objet Location que vous utilisez est configuré pour le mode hors ligne. Sinon, connectez-vous en ligne à un lecteur, puis hors ligne à un lecteur du même type. |
Le lecteur sélectionné nécessite une mise à jour logicielle avant de pouvoir être utilisé hors ligne pour collecter des paiements. | Le logiciel du lecteur n’a pas été mis à jour depuis 30 jours ou plus. Connectez-vous au lecteur en ligne pour le mettre à jour. |
Le lecteur sélectionné doit être appairé en ligne à cet endroit avant de pouvoir être utilisé hors ligne pour collecter des paiements. | Vous essayez de vous connecter à un type de lecteur auquel votre PDV ne s’est pas encore connecté en ligne. Vous devez d’abord vous connecter en ligne à ce lecteur ou à tout autre lecteur du même type. Si vous voulez vous connecter hors ligne, vous pouvez également vous connecter à un type de lecteur auquel votre PDV s’est déjà connecté en ligne. |
Si vous réinstallez l’application ou effectuez une opération qui vide la mémoire du disque pour le SDK (comme l’effacement du cache de votre application de point de vente dans les paramètres de l’appareil de point de vente), vous perdez tous les paiements que le SDK a stockés et qui n’ont pas encore été transmis. Assurez-vous qu’aucun paiement n’est stocké avant d’effectuer une action de suppression.
Gérer les événements hors ligneCôté client
Pour permettre à votre application de recevoir des mises à jour sur l’état du réseau du SDK et des paiements transmis, implémentez le protocole OfflineDelegate
et transmettez-le au SDK Terminal. Vous devez définir OfflineDelegate
avant de collecter les paiements en mode hors ligne.
Créer un PaymentIntent en mode en ligneCôté client
Afin prendre en charge le fonctionnement hors ligne, utilisez l’attribut createPaymentIntent
du SDK pour créer des objets PaymentIntent. Cela permet au SDK de créer des PaymentIntents en mode hors ligne et de les transmettre à Stripe une fois que vous avez rétabli la connexion.
En mode hors ligne, les objets PaymentIntent
ont un champ stripeId
vide. Nous vous recommandons d’ajouter un identifiant personnalisé aux metadata pour faciliter le rapprochement des objets PaymentIntent
créés hors ligne dans votre base de données.
Une fois que le PaymentIntent
a été transmis à Stripe lors de l’étape 7, utilisez votre identifiant personnalisé pour le rapprocher dans le rappel OfflineDelegate.
.
Terminal.
accepte un paramètre CreateConfiguration
. Par défaut, si vous êtes en mode hors ligne, le SDK Terminal enregistre tous les paiements hors ligne, puis les transmet au backend de Stripe lorsque la connexion est rétablie.
Pour personnaliser ce comportement, vous pouvez transmettre un objet CreateConfiguration
avec un attribut offlineBehavior
défini sur REQUIRE_
, PREFER_
ou FORCE_
.
Gestion du risque
La définition de offlineBehavior
sur REQUIRE_
entraîne un échec de la transaction en cours si vous fonctionnez en mode hors ligne. Par exemple, vous pouvez refuser les transactions supérieures à un certain montant ou toutes les transactions hors ligne si le SDK a stocké un ensemble de transactions dont la somme dépasse un certain montant.
Le SDK expose deux propriétés pour vous aider à gérer les risques :
Terminal.
offlineStatus. sdk. offlinePaymentsCount Terminal.
offlineStatus. sdk. offlinePaymentAmountsByCurrency
Gérer la latence en mode hors ligne
En fonction de votre connectivité réseau, le SDK Terminal détermine automatiquement si les paiements sont collectés en ligne ou hors ligne. Cependant, il peut vous arriver de vouloir fonctionner hors ligne malgré une connexion réseau active (par exemple, si vous devez encaisser des paiements rapidement et que votre connexion réseau est lente). Vous pouvez transmettre un objet CreateConfiguration
avec l’attribut offlineBehavior
défini sur FORCE_
pour collecter un paiement hors ligne quel que soit l’état de la connexion.
Les paiements collectés hors ligne alors que le SDK Terminal dispose d’une connexion réseau active sont transmis en arrière-plan.
Collecter un moyen de paiementCôté client
Remarque
La responsabilité du paiement vous incombe lorsque vous utilisez votre lecteur hors ligne. Les données de bande magnétique étant faciles à usurper, Stripe désactive cette option pour les paiements hors ligne. En outre, la présentation des cartes n’est pas prise en charge sur les marchés où l’authentification forte du client est requise.
La collecte des paiements en mode hors ligne est similaire à la collecte des paiements en ligne. Utilisez la méthode didRequestReaderInput
pour afficher les options de présentation de carte valides au client.
Remarque
La vérification des informations relatives aux moyens de paiement avant l’autorisation n’est pas prise en charge en mode hors ligne. Bien que vous puissiez toujours définir le paramètre initWithUpdatePaymentIntent
dans CollectConfiguration
, le champ paymentMethod
du PaymentIntent est absent si le SDK fonctionne en mode hors ligne.
Confirmer le paiementCôté client
La confirmation des paiements en mode hors ligne est similaire à la confirmation des paiements en ligne. La principale différence est que votre intégration doit gérer des types d’erreurs spécifiques au mode hors ligne, par exemple lorsque la transaction dépasse la limite maximum de 10 000 USD appliquée par Stripe pour les paiements hors ligne (ou un montant équivalent dans votre devise).
Dans certains cas, le SDK peut créer en ligne un PaymentIntent
, mais le confirmer hors ligne. Dans ce cas, le PaymentIntent
peut avoir un stripeId
non nul. S’il a été confirmé hors ligne, offlineDetails
sera défini et renseigné.
Fourniture de reçus
Vous pouvez avoir besoin d’informations concernant la carte utilisée pour un paiement en mode hors ligne. Par exemple, vous pouvez avoir besoin de générer un reçu pour les clients qui le demandent au moment de l’achat.
Si le PaymentIntent est confirmé hors ligne, récupérez sa propriété OfflineCardPresentDetails from the paymentIntent.
.
Ce hachage contient une propriété ReceiptDetails que vous pouvez utiliser pour générer un reçu ainsi que d’autres informations sur la carte bancaire, notamment sa marque et le nom de son titulaire.
Les champs des reçus account_
et authorization_
ne sont pas disponibles sur les PaymentIntents traités en mode hors ligne. Les reçus par e-mail préconfigurés sont uniquement envoyés lorsque la connexion est rétablie et que le paiement est capturé.
Attendre l'acheminement des paiementsCôté client
Quand l’accès Internet est rétabli, le SDK commence automatiquement à transférer les paiements hors ligne stockés.
Le SDK tente de transmettre les paiements même si l’état de son réseau est hors ligne. Cela signifie que votre fournisseur de tokens de connexion peut recevoir une demande de token de connexion, même lorsque l’appareil est hors ligne.
Si vous éteignez votre appareil de POS trop tôt, vos paiements risquent de ne pas être transférés. Vous pouvez interroger Terminal.
pour vous assurer que votre POS est en ligne et peut transférer des paiements, et Terminal.
pour connaître le nombre de paiements que le SDK Terminal doit transférer.
Capturer le paiement
Lorsque vous êtes hors ligne, vous pouvez créer des PaymentIntents avec l’attribut captureMethod
défini sur automatic
.
Une fois que vous avez confirmé ces PaymentIntents, ils passent à l’état Succeeded
au lieu de RequiresCapture
. Stripe capture automatiquement les paiements une fois que vous les avez transmis.
Si vous choisissez la capture manuelle, les paiements acheminés et autorisés doivent alors être capturés depuis votre back-end ou votre application.
- Afin de capturer les paiements depuis votre back-end, utilisez des webhooks pour écouter les PaymentIntents à l’état
requires_
.capture - Pour capturer les paiements depuis votre application, attendez que celle-ci reçoive les appels à
OfflineDelegate.
pour chaque PaymentIntent à mesure que le SDK les transmet. Un PaymentIntent est prêt à capturer si son état estdidForwardPayment RequiresCapture
et si le paramètreofflineDetails
est vide ou présente une valeurrequiresUpload
deNO
.
Capturez un paiement hors ligne après qu’il ait été transmis par le SDK dans le didForwardPaymentIntent
de votre OfflineDelegate :
Examiner les paiements collectés hors ligne
Après autorisation, vous pouvez utiliser l’API PaymentIntents pour examiner les informations hors ligne d’un paiement. Accédez aux informations relatives au moyen de paiement sur le dernier objet Charge d’un PaymentIntent
pour déterminer s’il a été encaissé hors ligne.