Premiers pas avec les composants intégrés Connect
Comment intégrer les fonctionnalités du Dashboard à votre site Web.
Utilisez les composants intégrés Connect pour ajouter des fonctionnalités de Dashboard de compte connecté à votre site Web. Ces bibliothèques et leur API associée vous permettent d’offrir à vos utilisateurs la possibilité d’accéder aux produits Stripe directement depuis votre Dashboard et vos applications mobiles.
Configurer StripeConnectCôté clientCôté serveur
Stripe utilise une AccountSession pour exprimer votre intention de déléguer API accès à votre compte connecté.
L’API AccountSessions renvoie une clé secrète du client qui permet à un composant intégré d’accéder aux ressources d’un compte connecté comme si vous faisiez des appels à l’API pour ces derniers.
Créer une AccountSession Serveur
Votre application doit envoyer une demande à votre serveur pour obtenir la session de compte. Actuellement, seule l’inscription des comptes est prise en charge. Vous pouvez créer un endpoint sur votre serveur qui renvoie la clé secrète client à l’application :
API Create Account Session
L’API Create Account Session détermine l’accès aux composants et aux fonctionnalités des composants intégrés Connect. Stripe applique ces paramètres à tous les composants correspondant à la session du compte. Si votre application prend en charge plusieurs rôles d’utilisateur, vérifiez que les composants et fonctionnalités activés pour cette session de compte correspondent au rôle de l’utilisateur actuel. Par exemple, vous pouvez activer la gestion des remboursements uniquement pour les administrateurs de votre site, mais pas pour les autres utilisateurs. Pour vérifier que les accès aux rôles d’utilisateur sont appliqués, vous devez mapper le rôle d’utilisateur de votre site aux composants de session de compte.
Installer le SDK StripeConnect Client
Le SDK iOS de Stripe est disponible en open source et fait l’objet d’une documentation complète. Il est également compatible avec les applications prenant en charge iOS 15 et les versions ultérieures.
Remarque
Pour obtenir de plus amples informations sur la version la plus récente du SDK et ses versions antérieures, consultez la page des versions sur GitHub. Pour recevoir une notification lors de la publication d’une nouvelle version, surveillez les versions à partir du référentiel.
Configurer l’autorisation de l’appareil photo Client-side
Le SDK iOS de Stripe Connect nécessite l’accès à l’appareil photo de l’appareil pour capturer des documents d’identité. Pour permettre à votre application de demander l’autorisation d’utiliser l’appareil photo :
- Ouvrez le fichier Info.plist de votre projet dans Xcode.
- Ajoutez la clé
NSCameraUsageDescription
. - Ajoutez une valeur de chaîne qui explique à vos utilisateurs pourquoi votre application nécessite des autorisations de caméra, par exemple :
Cette application utilise l’appareil photo pour prendre une photo de vos documents d’identité.
Consultez la documentation d’Apple pour en savoir plus sur la demande d’accès à l’appareil photo.
Initialiser EmbeddedComponentManager Client
Définissez votre clé publiable à l’aide de StripeAPI.
et instanciez un EmbeddedComponentManager avec une fermeture qui récupère une clé secrète client en appelant le nouvel endpoint que vous avez créé sur votre serveur. Pour créer un composant, appelez la méthode create appropriée sur l’EmbeddedComponentManager
que vous avez instancié plus tôt. Ceci renvoie un contrôleur que vous pouvez utiliser pour affichage dans l’application.
@_spi(PrivateBetaConnect) import StripeConnect import UIKit class MyViewController: UIViewController { let errorView: UIView func fetchClientSecret() async -> String? { let url = URL(string: "https://{{YOUR_SERVER}}/account_session")! var request = URLRequest(url: url) request.httpMethod = "POST" do { // Fetch the AccountSession client secret let (data, _) = try await URLSession.shared.data(for: request) let json = try JSONSerialization.jsonObject(with: data) as? [String : Any] errorView.isHidden = true return json?["client_secret"] as? String } catch let error { // Handle errors on the client side here print("An error occurred: \(error)") errorView.isHidden = false return nil } } override func viewDidLoad() { super.viewDidLoad() // This is your test publishable API key. STPAPIClient.shared.publishableKey = "{{PUBLISHABLE_KEY}}", let embeddedComponentManager = EmbeddedComponentManager( fetchClientSecret: fetchClientSecret ) let controller = embeddedComponentManager.createAccountOnboardingController() controller.present(from: self) } }
Configure the Embedded Component ManagerCôté client
Personnaliser l’apparence des composants intégrés Connect
La boîte à outils de composants intégrés d’interface utilisateur Figma contient tous les composants, les modèles courants et un exemple d’application. Vous pouvez l’utiliser pour visualiser et concevoir des interfaces utilisateur intégrées sur votre site Web.
Nous proposons un ensemble d’options permettant de personnaliser l’apparence des composants intégrés Connect. Ces personnalisations affectent les boutons, les icônes et d’autres accents de notre système de conception.
Fenêtres contextuelles nécessaires
Certains comportements dans les composants intégrés, tels que l’authentification de l’utilisateur, doivent être présentés dans une vue web authentifiée. Vous ne pouvez pas personnaliser le composant intégré pour éliminer ces vues web.
Vous pouvez définir ces options à l’aide de EmbeddedComponentManager.Appearance lors de l’initialisation de EmbeddedComponentManager
.
func fetchClientSecret() async -> String? { let url = URL(string: "https://{{YOUR_SERVER}}/account_session")! var request = URLRequest(url: url) request.httpMethod = "POST" do { let (data, _) = try await URLSession.shared.data(for: request) let json = try JSONSerialization.jsonObject(with: data) as? [String : Any] return json?["client_secret"] as? String } catch { return nil } } // Specify custom fonts var customFonts: [CustomFontSource] = [] let myFont = UIFont(name: "My Font", size: 16)! let fontUrl = Bundle.main.url(forResource: "my-font-2", withExtension: "woff")! do { let customFontSource = try CustomFontSource(font: myFont, fileUrl: fontUrl) customFonts.append(customFontSource) } catch { print("Error loading custom font: \(error)") } // Customize appearance var appearance = EmbeddedComponentManager.Appearance() appearance.typography.fontfont.base = myFont appearance.typography.fontSizeBase = 16 // Unscaled font size appearance.colors.primary = UIColor { traitCollection in if traitCollection.userInterfaceStyle == .dark { UIColor(red: 0.455, green: 0.424, blue: 1.000, alpha: 1.0) } else { UIColor(red: 0.404, green: 0.365, blue: 1.000, alpha: 1.0) } } STPAPIClient.shared.publishableKey = "{{PUBLISHABLE_KEY}}", let embeddedComponentManager = EmbeddedComponentManager( appearance: appearance, fonts: customFonts, fetchClientSecret: fetchClientSecret )
Les couleurs d’apparence faisant appel à des fournisseurs dynamiques sont automatiquement appliquées au composant Connect Embedded lorsque son UITraitCollection est mis à jour. Cela comprend le mode sombre et le contraste d’accessibilité. L’apparence par défaut n’inclut pas les couleurs du mode sombre, vous devez donc spécifier une apparence avec des couleurs dynamiques dans le EmbeddedComponentManager
pour prendre en charge le mode sombre dans votre application.
Lorsque vous spécifiez des tailles de police, utilisez la taille de police non mise à l’échelle qui s’affiche pour la classe de taille par défaut de l’appareil. Le composant intégré met automatiquement à l’échelle la taille de la police en fonction de son UITraitCollection.
Consultez la liste complète des options d’apparence sur iOS.
Utiliser des polices personnalisées
Si vous utilisez des polices personnalisées dans votre application (par exemple, à partir de fichiers .
ou .
intégrés au fichier binaire de votre application), vous devez spécifier les fichiers de polices dans un CustomFontSource transmis à l’argument fonts
lors de l’initialisation de EmbeddedComponentManager
. Cela permet aux composants Connect intégrés d’accéder aux fichiers de polices pour afficher correctement les polices.
Les polices spécifiées dans appearance
doivent utiliser une police système prise en charge ou une CustomFontSource transmise à EmbeddedComponentManager
lors de l’initialisation pour un rendu correct.
Voir la documentation de référence .
Mise à jour des composants intégrés de Connect après l’initialisation
Appelez la méthode update
pour modifier l’apparence des composants intégrés après l’initialisation :
var appearance = EmbeddedComponentManager.Appearance() appearance.colors.primary = UIColor.red manager.update(appearance: appearance)
Authentification
Nous proposons un ensemble d’API pour gérer les sessions de compte et les informations d’identification des utilisateurs dans les composants Connect intégrés.
Actualiser la clé secrète du client
Sur les sessions de longue durée, la session du secret client peut expirer. Lorsqu’il expire, nous utilisons automatiquement fetchClientSecret
pour récupérer une nouvelle clé secrète client et actualiser la session. Vous n’avez pas besoin de transmettre de paramètres supplémentaires.
func fetchClientSecret() async -> String? { var request = URLRequest(url: URL(string: "https://{{YOUR_SERVER}}/account_session")!) request.httpMethod = "POST" do { let (data, _) = try await URLSession.shared.data(for: request) let json = try JSONSerialization.jsonObject(with: data) as? [String : Any] return json?["client_secret"] as? String } catch let error { return nil } } STPAPIClient.shared.publishableKey = "{{PUBLISHABLE_KEY}}", let embeddedComponentManager = EmbeddedComponentManager( fetchClientSecret: fetchClientSecret )
Localisation
Les composants Connect Embedded prennent en charge les langues ou régions suivantes :
Langue | Code de paramètres régionaux |
---|---|
Bulgare (Bulgarie) | bg-BG |
Chinois (simplifié) | zh-Hans |
Chinois (traditionnel - Hong Kong) | zh-Hant-HK |
Chinois (traditionnel - Taïwan) | zh-Hant-TW |
Croate (Croatie) | hr-HR |
Tchèque (Tchéquie) | cs-CZ |
Danois (Danemark) | da-DK |
Néerlandais (Pays-Bas) | nl-NL |
Anglais (Australie) | en-AU |
Anglais (Inde) | en-IN |
Anglais (Irlande) | en-IE |
Anglais (Nouvelle-Zélande) | en-NZ |
Anglais (Singapour) | en-SG |
Anglais (Royaume-Uni) | en-GB |
Anglais (États-Unis) | en-US |
Estonien (Estonie) | et-EE |
Philippin (Philippines) | fil-PH |
Finnois (Finlande) | fi-FI |
Français (Canada) | fr-CA |
Français (France) | fr-FR |
Allemand (Allemagne) | de-DE |
Grec (Grèce) | el-GR |
Hongrois (Hongrie) | hu-HU |
Indonésien (Indonésie) | id-ID |
Italien (Italie) | it-IT |
Japonais (Japon) | ja-JP |
Coréen (Corée du Sud) | ko-KR |
Letton (Lettonie) | lv-LV |
Lituanien (Lituanie) | lt-LT |
Malais (Malaisie) | ms-MY |
Maltais (Malte) | mt-MT |
Norvégien Bokmål (Norvège) | nb-NO |
Polonais (Pologne) | pl-PL |
Portugais (Brésil) | pt-BR |
Portugais (Portugal) | pt-PT |
Roumain (Roumanie) | ro-RO |
Slovaque (Slovaquie) | sk-SK |
Slovène (Slovénie) | sl-SI |
Espagnol (Argentine) | es-AR |
Espagnol (Brésil) | es-BR |
Espagnol (Amérique latine) | es-419 |
Espagnol (Mexique) | es-MX |
Espagnol (Espagne) | es-ES |
Suédois (Suède) | sv-SE |
Thaï (Thaïlande) | th-TH |
Turc (Turquie) | tr-TR |
Vietnamien (Viêt Nam) | vi-VN |
Authentification de l’utilisateur dans les composants intégrés de Connect
Les composants intégrés Connect ne requièrent généralement pas l’authentification de l’utilisateur. Dans certains cas, les composants intégrés Connect nécessitent que le compte connecté s’identifie avec son compte Stripe avant d’accéder au composant afin de fournir les fonctionnalités requises (par exemple, saisir des informations sur le compte de l’entité juridique dans le cas du composant d’inscription des utilisateurs). D’autres composants peuvent nécessiter une authentification au sein du composant après l’affichage initial.
L’authentification est obligatoire pour les comptes connectés pour lesquels Stripe est responsable de la collecte des informations mises à jour lorsque les exigences évoluent. Pour les comptes connectés pour lesquels vous êtes responsable de la collecte des informations mises à jour lorsque les exigences arrivent à échéance ou évoluent, tels que les comptes Custom, l’authentification de Stripe est contrôlée par la fonctionnalité de session de compte disable_stripe_user_authentication. Nous vous recommandons de mettre en œuvre l’authentification à deux facteurs ou des mesures de sécurité équivalentes à titre de bonne pratique. Pour les configurations de compte qui prennent en charge cette fonctionnalité, comme les comptes Custom, vous assumez la responsabilité des comptes connectés s’ils ne sont pas en mesure de rembourser les soldes négatifs.
Composants nécessitant une authentification
Les comptes connectés verront s’afficher une vue web authentifiée dans votre application. Le compte connecté doit s’authentifier avant de pouvoir continuer son workflow dans la vue web.
Le flux d’authentification hébergé par Stripe affiche le nom, la couleur et l’icône de votre marque tels que définis dans vos paramètres Connect et n’utilise pas l’apparence et les polices personnalisées du gestionnaire de composants intégré tant que l’authentification n’est pas terminée.
Dans certains cas, les comptes connectés doivent s’authentifier pour utiliser le composant suivant :
Traiter les erreurs de chargement
Si le chargement d’un composant échoue, vous pouvez réagir à l’échec en implémentant la méthode déléguée didFailLoadWithError
du composant. En fonction de la cause de l’échec, la méthode didFailLoadWithError
peut être appelée plusieurs fois. Toute logique déclenchée par didFailLoadWithError
doit être idempotente.
// All components emit load errors. This example uses AccountOnboarding. // All components support didFailLoadWithError. class MyViewController: UIViewController, AccountOnboardingControllerDelegate { func openAccountOnboarding() { let accountOnboardingController = embeddedComponentManager.createAccountOnboardingController(); accountOnboardingController.delegate = self accountOnboardingController.present(from: self) } // MARK: - AccountOnboardingControllerDelegate func accountOnboarding(_ accountOnboarding: AccountOnboardingController, didFailLoadWithError error: Error) { print("Account onboarding failed to load with error '\(error)'") } }