# Utiliser Terminal avec Connect Intégrez Stripe Terminal à votre plateforme Connect. Stripe Terminal est compatible avec *Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients), ce qui permet à votre plateforme et à vos comptes connectés d’accepter les paiements par TPE. Intégrez Terminal à Connect selon la façon dont votre plateforme traite les paiements pour vos comptes connectés. - Si vous utilisez des [paiements directs](https://docs.stripe.com/connect/direct-charges.md), vous envoyez des requêtes à l’API Terminal pour configurer les lecteurs et accepter des paiements à l’aide de la clé API de votre plateforme et de l’en-tête `Stripe-Account` pour identifier le compte connecté. - Si vous utilisez des [paiements indirects](https://docs.stripe.com/connect/destination-charges.md), vous envoyez des requêtes API Terminal pour configurer les lecteurs et accepter des paiements utilisant la clé API de votre plateforme et identifiez le compte connecté à l’aide de métadonnées. - Si vous utilisez des [paiements et transferts distincts](https://docs.stripe.com/connect/separate-charges-and-transfers.md), vous envoyez des requêtes API Terminal en utilisant la clé API de votre plateforme pour créer des paiements sur le compte de votre plateforme, puis vous effectuez des transferts séparés pour déplacer les fonds vers vos comptes connectés. Dans tous les cas, utilisez les [locations](https://docs.stripe.com/api/terminal/locations.md) pour regrouper les lecteurs de manière appropriée. > Vos comptes connectés Terminal doivent disposer de la fonctionnalité `card_payments` pour effectuer des transactions. # Paiements directs > This is a Paiements directs for when connect-charge-type is direct. View the full page at https://docs.stripe.com/terminal/features/connect?connect-charge-type=direct. ## Lecteurs des comptes connectés Avec cette intégration, toutes les références de l’API relèvent du compte connecté, et non de la plateforme. Le compte connecté assume les frais de Stripe, les remboursements et les rétrofacturations. Dans le Dashboard, vous pouvez visualiser vos données Terminal en vous connectant à votre compte connecté. ### Créer des emplacements et des lecteurs (Server-side) Créez des [Emplacements](https://docs.stripe.com/terminal/fleet/locations-and-zones.md?dashboard-or-api=dashboard#create-locations-and-zones) et des [Lecteurs](https://docs.stripe.com/terminal/payments/connect-reader.md?reader-type=internet) pour les comptes connectés en incluant l’en-tête `Stripe-Account` dans les requêtes API. Vous pouvez également enregistrer le lecteur en cliquant sur **Afficher en tant que** dans le Dashboard Stripe du compte connecté. ```curl curl https://api.stripe.com/v1/terminal/locations \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d display_name=HQ \ -d "address[line1]=1272 Valencia Street" \ -d "address[city]=San Francisco" \ -d "address[state]=CA" \ -d "address[country]=US" \ -d "address[postal_code]=94110" ``` ```curl curl https://api.stripe.com/v1/terminal/readers \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d registration_code={{READER_REGISTRATION_CODE}} \ --data-urlencode "label=Alice's reader" \ -d "location={{TERMINALLOCATION_ID}}" ``` ### Créer des tokens de connexion (Server-side) > Lorsque vous utilisez l’authentification [OAuth Connect](https://docs.stripe.com/connect/oauth-reference.md), vous devez autoriser le compte connecté séparément pour le mode production et les environnements de test à l’aide de l’ID client de l’application correspondant à chaque mode. Lorsque vous créez un [ConnectionToken](https://docs.stripe.com/api/terminal/connection_tokens.md) pour le SDK Terminal, définissez l’en-tête `Stripe-Account` sur le compte connecté acceptant les paiements. Vous pouvez également fournir un paramètre d’`location` afin de contrôler l’accès aux lecteurs. Si vous définissez un emplacement, le `ConnectionToken` n’est utilisable qu’avec les lecteurs assignés à cet emplacement. Sans emplacement défini, vous pouvez utiliser le `ConnectionToken` avec tous les lecteurs. ```curl curl https://api.stripe.com/v1/terminal/connection_tokens \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "location={{TERMINALLOCATION_ID}}" ``` Si vous utilisez une intégration pilotée par serveur, vous n’avez pas besoin de créer un token de connexion. ### Créer des PaymentIntents (Client-side) (Server-side) Avec les SDK iOS, Android et React Native, vous pouvez créer un `PaymentIntent` côté client ou côté serveur. Avec le SDK JavaScript, seule la création côté serveur est prise en charge. #### Côté client Lors de la création d’une `PaymentIntent` côté client pour les paiements directs, ne spécifiez aucun paramètre supplémentaire pour la `PaymentIntent`. Créez plutôt un `ConnectionToken` avec l’en-tête `Stripe-Account` pour le compte connecté acceptant les paiements. Les SDK clients créent la `PaymentIntent` sur le même compte connecté auquel le `ConnectionToken` appartient. Pour en savoir plus, consultez la page [Créer des PaymentIntents côté client](https://docs.stripe.com/terminal/payments/collect-card-payment.md#create-client-side). #### Côté serveur Le SDK JavaScript exige que le `PaymentIntent` soit créé sur votre serveur. Pour les autres SDK client, créez le `PaymentIntent` sur votre serveur si les informations requises pour démarrer un paiement ne sont pas facilement accessibles dans votre application. Pour en savoir plus, veuillez consulter la page [Créer des PaymentIntents côté serveur](https://docs.stripe.com/terminal/payments/collect-card-payment.md?terminal-sdk-platform=js#create-payment). Afin de créer un `PaymentIntent` côté serveur pour les paiements directs, définissez l’en-tête `Stripe-Account` sur le compte connecté. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_types[]=card_present" \ -d capture_method=manual ``` Ensuite, suivez les étapes pour [collecter un paiement](https://docs.stripe.com/terminal/payments/collect-card-payment.md) afin de traiter l’intention de paiement. ## Lecteurs appartenant à la plateforme (Version bêta privée) > [Contactez-nous](mailto:stripe-terminal-betas@stripe.com) si vous souhaitez permettre à la plateforme de posséder et de gérer des lecteurs avec paiement direct. Cette fonctionnalité en version bêta privée est actuellement disponible pour les [lecteurs intelligents](https://docs.stripe.com/terminal/smart-readers.md) utilisant une [intégration pilotée par serveur](https://docs.stripe.com/terminal/payments/setup-integration.md?terminal-sdk-platform=server-driven). Cette intégration fonctionne uniquement avec les comptes connectés que vous contrôlez au sein d’une même plateforme. Grâce à cette intégration, votre plateforme possède des ressources d’appareil comme [Emplacements](https://docs.stripe.com/api/terminal/locations.md) et [Lecteurs](https://docs.stripe.com/api/terminal/readers.md), et vos comptes connectés possèdent des ressources de paiement comme [PaymentIntents](https://docs.stripe.com/api/payment_intents.md). Cela permet à votre plateforme de gérer un seul lecteur qui traite les paiements pour plusieurs comptes connectés. Les comptes connectés sont responsables du coût des frais de Stripe, des remboursements et des rétrofacturations. Dans le Dashboard, vous pouvez visualiser directement vos données de gestion des appareils Terminal lorsque vous êtes connecté(e) à votre compte de plateforme. Pour consulter les données de paiement, vous devez vous connecter en tant que compte connecté. ### Créer des emplacements et des lecteurs Le meilleur moyen de regrouper les objets Reader par compte connecté consiste à les assigner à des objets `Locations`. Sur votre compte de plateforme, [créez un objet Location](https://docs.stripe.com/terminal/fleet/locations-and-zones.md?dashboard-or-api=dashboard#create-locations-and-zones) pour un compte connecté en utilisant un nom d’affichage permettant d’identifier le compte. ```curl curl https://api.stripe.com/v1/terminal/locations \ -u "<>:" \ -d display_name=HQ \ -d "address[line1]=1272 Valencia Street" \ -d "address[city]=San Francisco" \ -d "address[state]=CA" \ -d "address[country]=US" \ -d "address[postal_code]=94110" ``` Avant de pouvoir connecter votre application à un [lecteur intelligent](https://docs.stripe.com/terminal/payments/connect-reader.md?reader-type=internet), vous devez enregistrer ce lecteur sur votre compte de plateforme. ```curl curl https://api.stripe.com/v1/terminal/readers \ -u "<>:" \ -d registration_code={{READER_REGISTRATION_CODE}} \ --data-urlencode "label=Alice's reader" \ -d "location={{TERMINALLOCATION_ID}}" ``` ### Créer des PaymentIntents Lorsque vous créez un `PaymentIntent` pour des paiements directs, l’en-tête `Stripe-Account` doit faire référence au compte connecté. > La plateforme ne peut traiter les PaymentIntents ultérieurement que si vous les créez pour des comptes connectés que vous contrôlez par l’intermédiaire d’une plateforme unique. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_types[]=card_present" \ -d capture_method=manual ``` ### Traiter les PaymentIntents La plateforme peut traiter le `PaymentIntent` du compte connecté avec le lecteur de la plateforme. > Le PaymentIntent ne peut être traité que si vous le créez en utilisant l’en-tête `Stripe-Account`. ```curl curl https://api.stripe.com/v1/terminal/readers/{{TERMINALREADER_ID}}/process_payment_intent \ -u "<>:" \ -d "payment_intent={{PAYMENTINTENT_ID}}" ``` # Paiements indirects > This is a Paiements indirects for when connect-charge-type is destination. View the full page at https://docs.stripe.com/terminal/features/connect?connect-charge-type=destination. Lorsque vous utilisez des [paiements indirects](https://docs.stripe.com/connect/destination-charges.md), votre plateforme possède les références de l’API comme [PaymentIntents](https://docs.stripe.com/api/payment_intents.md) et [Emplacements](https://docs.stripe.com/api/terminal/locations.md). Chaque paiement crée automatiquement un transfert vers un compte connecté. Dans le Dashboard, vous pouvez visualiser vos données Terminal directement en vous connectant à votre compte de plateforme. ## Créer des emplacements et des lecteurs (Server-side) Le meilleur moyen de regrouper les objets Lecteur par compte connecté consiste à les assigner à des `Locations`. Sur votre compte de plateforme, [créez un emplacement ](https://docs.stripe.com/terminal/fleet/locations-and-zones.md?dashboard-or-api=dashboard#create-locations-and-zones) pour un compte connecté en utilisant un nom d’affichage permettant d’identifier le compte. ```curl curl https://api.stripe.com/v1/terminal/locations \ -u "<>:" \ -d display_name=HQ \ -d "address[line1]=1272 Valencia Street" \ -d "address[city]=San Francisco" \ -d "address[state]=CA" \ -d "address[country]=US" \ -d "address[postal_code]=94110" ``` Avant de pouvoir connecter votre application à un [lecteur intelligent](https://docs.stripe.com/terminal/payments/connect-reader.md?reader-type=internet), vous devez enregistrer ce lecteur sur votre compte de plateforme. ```curl curl https://api.stripe.com/v1/terminal/readers \ -u "<>:" \ -d registration_code={{READER_REGISTRATION_CODE}} \ --data-urlencode "label=Alice's reader" \ -d "location={{TERMINALLOCATION_ID}}" ``` ## Créer des tokens de connexion (Server-side) Lorsque vous créez un `ConnectionToken`pour le SDK Terminal, utilisez la clé secrète du compte de votre plateforme. Ne définissez pas l’en-tête `Stripe-Account`. Fournissez un paramètre `location` afin de contrôler l’accès aux lecteurs. Si vous définissez un emplacement, le `ConnectionToken` n’est utilisable qu’avec les lecteurs assignés à cet emplacement. Sans emplacement défini, vous pouvez utiliser le `ConnectionToken` avec tous les lecteurs. ```curl curl https://api.stripe.com/v1/terminal/connection_tokens \ -u "<>:" \ -d "location={{TERMINALLOCATION_ID}}" ``` Si vous utilisez une intégration pilotée par serveur, vous n’avez pas besoin de créer un token de connexion. ## Créer des PaymentIntents (Client-side) (Server-side) Pour créer un `PaymentIntent` avec des paiements indirects, fournissez les paramètres [on_behalf_of](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-on_behalf_of), [transfer_data[destination]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-transfer_data-destination) et [application_fee_amount](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-application_fee_amount). Le paramètre `on_behalf_of` correspond à l’ID du compte connecté qui devient l’entité de règlement pour le paiement. Pour les transactions Terminal, ce paramètre doit être défini dans les cas où le pays de la plateforme n’est pas le même que celui du compte connecté. Lorsque le paramètre `on_behalf_of` est défini, Stripe effectue automatiquement les actions suivantes : - Règle les frais dans le pays du compte spécifié, minimisant ainsi les refus et évitant les conversions de devises. - Utilise la structure des frais appliquée pour le pays du compte connecté. - Indique l’adresse et le numéro de téléphone du compte connecté sur le relevé de carte bancaire du client, au lieu de l’adresse et du numéro de téléphone de votre plateforme (uniquement si le compte et la plateforme se trouvent dans des pays différents). Pour le paramètre `transfer_data[destination]`, précisez l’ID du compte connecté destinataire du transfert. Enfin, vous pouvez prélever une commission pour votre plateforme en renseignant le paramètre [application_fee_amount](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-application_fee_amount). ### Côté client Avec les SDK iOS, Android et React Native, vous pouvez créer un `PaymentIntent` côté client et fournir les paramètres `onBehalfOf`, `transferDataDestination` et `applicationFeeAmount`. #### JavaScript > La création d’un `PaymentIntent` côté client est possible avec les autres SDK. Si vous utilisez le SDK JavaScript pour Stripe Terminal, créez un `PaymentIntent` côté serveur. #### iOS - [PaymentIntentParameters (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPPaymentIntentParameters.html) > Si votre application est connectée au Verifone P400, vous ne pouvez pas créer un `PaymentIntent` à partir du SDK iOS. > > Vous devez [créer le PaymentIntent côté serveur](https://docs.stripe.com/terminal/payments/collect-card-payment.md#create-server-side), puis récupérer le `PaymentIntent` dans votre application à l’aide de la méthode `Terminal.retrievePaymentIntent` du SDK. #### Swift ```swift import UIKit import StripeTerminal class PaymentViewController: UIViewController { // ... // Action for a "Checkout" button func checkoutAction() throws { let params = try PaymentIntentParametersBuilder(amount: 1000, currency: "usd") .setOnBehalfOf(""{{CONNECTED_ACCOUNT_ID}}"") .setTransferDataDestination(""{{CONNECTED_ACCOUNT_ID}}"") .setApplicationFeeAmount(200) .build() Terminal.shared.createPaymentIntent(params) { createResult, createError in if let error = createError { print("createPaymentIntent failed: \(error)") } else if let paymentIntent = createResult { print("createPaymentIntent succeeded") // ... } } } // ... } ``` #### Android - [PaymentIntentParameters (Android)](https://stripe.dev/stripe-terminal-android/external/com.stripe.stripeterminal.external.models/-payment-intent-parameters/index.html) > Si votre application est connectée au Verifone P400, vous ne pouvez pas créer un `PaymentIntent` à partir du SDK Android. > > Vous devez [créer le PaymentIntent côté serveur](https://docs.stripe.com/terminal/payments/collect-card-payment.md#create-server-side), puis récupérer le `PaymentIntent` dans votre application à l’aide de la méthode `Terminal.retrievePaymentIntent` du SDK. #### Kotlin ```kotlin val params = PaymentIntentParameters.Builder() .setAmount(1000) .setCurrency("usd") .setOnBehalfOf(""{{CONNECTED_ACCOUNT_ID}}"") .setTransferDataDestination(""{{CONNECTED_ACCOUNT_ID}}"") .setApplicationFeeAmount(200) .build() Terminal.getInstance().createPaymentIntent( params, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` #### React Native - [CreatePaymentIntentParams (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/index.html#CreatePaymentIntentParams) > Si votre application est connectée au Verifone P400, vous ne pouvez pas créer un `PaymentIntent` à partir du SDK React Native. > > Vous devez [créer le PaymentIntent côté serveur](https://docs.stripe.com/terminal/payments/collect-card-payment.md#create-server-side), puis récupérer le `PaymentIntent` dans votre application à l’aide de la méthode `retrievePaymentIntent` du SDK. ```js const {paymentIntent, error} = await createPaymentIntent({ amount: 1000, currency: "usd", onBehalfOf: "{{CONNECTED_ACCOUNT_ID}}" , transferDataDestination: "{{CONNECTED_ACCOUNT_ID}}", applicationFeeAmount: 200, }); if (error) { // Placeholder for handling exception return; } // Placeholder for collecting a payment method with PaymentIntent ``` ### Côté serveur Le SDK JavaScript exige que le `PaymentIntent` soit créé sur votre serveur. Pour les autres SDK client, créez le `PaymentIntent` sur votre serveur si les informations requises pour démarrer un paiement ne sont pas facilement accessibles dans votre application. Pour en savoir plus, veuillez consulter la page [Créer des PaymentIntents côté serveur](https://docs.stripe.com/terminal/payments/collect-card-payment.md?terminal-sdk-platform=js#create-payment). ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_types[]=card_present" \ -d capture_method=manual \ -d application_fee_amount=200 \ -d "on_behalf_of={{CONNECTEDACCOUNT_ID}}" \ -d "transfer_data[destination]={{CONNECTEDACCOUNT_ID}}" ``` Ensuite, suivez les étapes pour [collecter un paiement](https://docs.stripe.com/terminal/payments/collect-card-payment.md) afin de traiter l’intention de paiement. # Paiements et transferts distincts > This is a Paiements et transferts distincts for when connect-charge-type is separate. View the full page at https://docs.stripe.com/terminal/features/connect?connect-charge-type=separate. Lors de l’utilisation de [paiements et transferts distincts](https://docs.stripe.com/connect/separate-charges-and-transfers.md), votre plateforme possède les ressources API telles que les [PaymentIntents](https://docs.stripe.com/api/payment_intents.md) et les [locations](https://docs.stripe.com/api/terminal/locations.md). Vous créez d’abord un paiement sur le compte de votre plateforme, puis des transferts séparés pour déplacer les fonds vers vos comptes connectés. Cela vous permet de répartir les paiements entre plusieurs comptes connectés. Dans le Dashboard, vous pouvez visualiser vos données Terminal directement en vous connectant à votre compte de plateforme. ## Créer des emplacements et des lecteurs (Server-side) Le meilleur moyen de regrouper les objets `Reader` par compte connecté consiste à les assigner à des `locations`. Sur votre compte de plateforme, [créez une location](https://docs.stripe.com/terminal/fleet/locations-and-zones.md?dashboard-or-api=dashboard#create-locations-and-zones) pour un compte connecté en utilisant un nom d’affichage permettant d’identifier le compte. ```curl curl https://api.stripe.com/v1/terminal/locations \ -u "<>:" \ -d display_name=HQ \ -d "address[line1]=1272 Valencia Street" \ -d "address[city]=San Francisco" \ -d "address[state]=CA" \ -d "address[country]=US" \ -d "address[postal_code]=94110" ``` Avant de pouvoir connecter votre application à un [lecteur intelligent](https://docs.stripe.com/terminal/payments/connect-reader.md?reader-type=internet), vous devez enregistrer ce lecteur sur votre compte de plateforme. ```curl curl https://api.stripe.com/v1/terminal/readers \ -u "<>:" \ -d registration_code={{READER_REGISTRATION_CODE}} \ --data-urlencode "label=Alice's reader" \ -d "location={{TERMINALLOCATION_ID}}" ``` ## Créer des tokens de connexion (Server-side) Lorsque vous créez un `ConnectionToken`pour le SDK Terminal, utilisez la clé secrète du compte de votre plateforme. Ne définissez pas l’en-tête `Stripe-Account`. Fournissez un paramètre `location` afin de contrôler l’accès aux lecteurs. Si vous définissez un emplacement, le `ConnectionToken` n’est utilisable qu’avec les lecteurs assignés à cet emplacement. Sans emplacement défini, vous pouvez utiliser le `ConnectionToken` avec tous les lecteurs. ```curl curl https://api.stripe.com/v1/terminal/connection_tokens \ -u "<>:" \ -d "location={{TERMINALLOCATION_ID}}" ``` Si vous utilisez une intégration pilotée par serveur, vous n’avez pas besoin de créer un token de connexion. ## Créer des PaymentIntents (Server-side) Créez un `PaymentIntent` sur le compte de votre plateforme. Vous pouvez éventuellement fournir un paramètre `transfer_group` pour identifier les paiements et transferts liés à des fins de suivi. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_types[]=card_present" \ -d capture_method=manual \ -d transfer_group=ORDER_95 ``` Ensuite, suivez les étapes pour [collecter un paiement](https://docs.stripe.com/terminal/payments/collect-card-payment.md) afin de traiter l’intention de paiement. ## Créer des transferts (Server-side) Après avoir capturé le `PaymentIntent`, vous pouvez créer un ou plusieurs [transferts](https://docs.stripe.com/api/transfers.md) pour transférer des fonds vers vos comptes connectés. Créez un transférer en précisant le compte connecté comme destination. Vous pouvez éventuellement inclure le `transfer_group` pour associer le transférer au paiement initial : ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=700 \ -d currency=usd \ -d "destination={{CONNECTEDACCOUNT_ID}}" \ -d transfer_group=ORDER100 ``` ### Disponibilité des transferts Par défaut, une demande de transfert échoue si le montant dépasse le solde disponible du compte de votre plateforme. Pour éviter cela, vous pouvez lier le transfert à un paiement spécifique en utilisant le paramètre [source_transaction](https://docs.stripe.com/api/transfers/create.md#create_transfer-source_transaction). Cela permet à la demande de transfert de réussir même si les fonds ne sont pas encore disponibles sur votre solde. Le transfert s’exécute automatiquement dès que les fonds du paiement associé deviennent disponibles. Pour utiliser un `source_transaction`, commencez par récupérer l’ID du paiement à partir de l’attribut [latest_charge](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) du PaymentIntent : ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=700 \ -d currency=usd \ -d "destination={{CONNECTEDACCOUNT_ID}}" \ -d "source_transaction={{CHARGE_ID}}" \ -d transfer_group=ORDER100 ``` ### Paiements fractionnés entre plusieurs comptes Pour répartir un paiement entre plusieurs comptes connectés, créez des transferts distincts pour chaque compte : ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=400 \ -d currency=usd \ -d "destination={{CONNECTEDACCOUNT_ID}}" \ -d transfer_group=ORDER100 ``` ```curl curl https://api.stripe.com/v1/transfers \ -u "<>:" \ -d amount=300 \ -d currency=usd \ -d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \ -d transfer_group=ORDER100 ``` ## See also - [Affichage du panier](https://docs.stripe.com/terminal/features/display.md) - [Reçus](https://docs.stripe.com/terminal/features/receipts.md)