Tester la vérification des comptes lors de l'inscription via l'API
Démonstration des tests des différents états de vérification pour les comptes connectés lors de l'inscription via l'API en utilisant votre clé API de test.
Ce document prend pour acquis que vous disposez d’une bonne connaissance du processus d’inscription via l’API, de la manière de mettre à jour les comptes, ainsi que de la vérification d’identité.
Testez vos flux de vérification pour vous assurer qu’ils peuvent prendre en charge les modifications de l’état du compte (par exemple, lorsque vous activez ou désactivez les paiements). Les états du compte évoluent en général une fois que les exigences sont remplies ou lorsque les seuils de traitement ou de temps sont atteints. Les sections ci-dessous décrivent ces modifications et comment tester vos flux de vérification.
Tester les exigences initiales
Commencez par créer un nouveau compte connecté dans un environnement de test, en ajoutant un compte bancaire et en indiquant que le titulaire du compte a accepté le Contrat d’utilisation du service Stripe. Stripe exige que le compte connecté accepte explicitement les Conditions d’utilisation du service Stripe pour réaliser des virements. Dans cet exemple, identity. est paramétré sur company et external_ utilise un compte de test Stripe tokenisé afin d’éviter de dévoiler des informations sensibles dans les appels à l’API.
Remarque
Vous devez fournir une clé API de test à partir d’un compte Stripe qui a commencé l’inscription à la plateforme Connect. La clé API de test Stripe remplie automatiquement fait échouer ces exemples de requêtes.
Lorsque vous créez l’Account, vous devez définir identity. et demander les fonctionnalités card_ et stripe_. Les exemples ci-dessous montrent un compte contrôlé par la plateforme avec les configurations merchant et recipient.
À ce stade, le compte est créé mais les débits et virements ne sont activés que lorsque vous avez rempli les exigences de vérification et joint une méthode de virement. Vérifiez le tableau requirements. pour déterminer les informations que vous devez collecter. Les inscriptions actuellement requises ont un minimum_ défini sur currently_.
{ "id": "{% identifier type=\"connectedAccount\" quoteType=\"double\" /%}", "object": "account", "identity": { "country": "US", "entity_type": "company" }, "dashboard": "none", "defaults": { "responsibilities": { "losses_collector": "application", "fees_collector": "stripe" }, "currency": "usd" }, "configuration": { "merchant": { "capabilities": { "card_payments": { "status": "restricted", "status_details": [ { "code": "determining_status", "resolution": "provide_info" } ] } } }, "recipient": { "capabilities": { "transfers": { "status": "restricted", "status_details": [ { "code": "determining_status", "resolution": "provide_info" } ] } } } }, "requirements": { "summary": { "minimum_deadline": { "time": 1700000000, "status": "currently_due" } }, "entries": [ { "id": "reqent_1", "description": "configuration.merchant.mcc", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] }, { "id": "reqent_2", "description": "defaults.profile.business_url", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] }, { "id": "reqent_3", "description": "identity.business_details.address.city", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] }, { "id": "reqent_4", "description": "identity.business_details.address.line1", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] }, { "id": "reqent_5", "description": "identity.business_details.address.postal_code", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] }, { "id": "reqent_6", "description": "identity.business_details.address.state", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] }, { "id": "reqent_7", "description": "identity.business_details.registered_name", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] }, { "id": "reqent_8", "description": "identity.business_details.phone", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] }, { "id": "reqent_9", "description": "identity.business_details.id_numbers.us_ein", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] }, { "id": "reqent_10", "description": "relationship.representative", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] }, { "id": "reqent_11", "description": "relationship.owner", "minimum_deadline": { "status": "currently_due" }, "awaiting_action_from": "user", "errors": [] } ] } }
Collectez ensuite les informations requises identifiées dans la réponse et ajoutez-les à l’objet Account.
Après avoir mis à jour les détails de l’entreprise, les entrées des exigences peuvent changer. Pour les exigences au niveau de Person, vous devez créer et mettre à jour l’objet Person sous l’objet Account pour les personnes qui représentent ou possèdent l’entreprise.
Utilisez l’API Persons pour créer un profil pour chaque personne propriétaire ou représentante du compte. Pour cet exemple, nous créons un profil pour Jenny Rosen et l’identifions comme representative avec le title deCEO.
Remarque
Pour les comptes dont le paramètre business_type a la valeur individual, vous devez fournir au moins une propriété de type individual (par exemple, le prénom de la personne, individual.) afin que l’objet Person soit créé automatiquement. À défaut, ou pour les comptes dont le paramètre business_ est company, vous devez créer chaque objet Person du compte.
Lorsque vous créez un objet Person, la réponse inclut un hachage requirements. qui répertorie les informations de vérification requises pour cette personne.
{ "id": "person_abc", "object": "person", "requirements": { "entries": [ { "id": "p_req_1", "description": "representative.address.city", "minimum_deadline": { "status": "currently_due" }, "errors": [] }, { "id": "p_req_2", "description": "representative.address.line1", "minimum_deadline": { "status": "currently_due" }, "errors": [] }, { "id": "p_req_3", "description": "representative.address.postal_code", "minimum_deadline": { "status": "currently_due" }, "errors": [] }, { "id": "p_req_3", "description": "representative.address.state", "minimum_deadline": { "status": "currently_due" }, "errors": [] }, `` { "id": "p_req_4", "description": "representative.date_of_birth.day", "minimum_deadline": { "status": "currently_due" }, "errors": [] }, { "id": "p_req_5", "description": "representative.date_of_birth.month", "minimum_deadline": { "status": "currently_due" }, "errors": [] }, { "id": "p_req_6", "description": "representative.date_of_birth.year", "minimum_deadline": { "status": "currently_due" }, "errors": [] }, { "id": "p_req_7", "description": "representative.phone", "minimum_deadline": { "status": "currently_due" }, "errors": [] }, { "id": "p_req_8", "description": "representative.email", "minimum_deadline": { "status": "currently_due" }, "errors": [] }, { "id": "p_req_9", "description": "identity.attestations.persons_provided.owners", "minimum_deadline": { "status": "currently_due" }, "errors": [] }, { "id": "p_req_10", "description": "representative.id_numbers. us_ssn_last_4", "minimum_deadline": { "status": "currently_due" }, "errors": [] } ] } }
Après avoir créé une Person et fourni es informations demandées au niveau individuel, requirements. pour l’Account inclut les descriptions qui font référence au Person ID.
Mettez à jour la Person pour fournir les informations de vérification demandées pour Jenny Rosen :
En configurant relationship. sur true, vous confirmez à Stripe que le représentant exerce un contrôle significatif au sein de l’organisation. Les informations requises aux États-Unis pour la vérification des représentants d’entreprises américaines sont plus nombreuses.
Pour ajouter un propriétaire, créez une autre Person et définissez-la comme owner pour le compte. Dans cet exemple, Kathleen Banks possède 80 % de The Best Cookie Co.
Vous devez ajouter tous les propriétaires qui détiennent au moins 25 % de parts de l’entreprise, puis définir identity. sur true.
Un premier onboarding réussi de votre compte connecté à ce stade signifie :
- Vous avez fourni toutes les informations requises (
requirements.).summary. minimum_ deadline=null - Les paiements sont activés pour le compte (
charges_).enabled=true - Vous avez reçu un événement webhook
v2.de Stripe.core. account. updated
Seuils de test
Que vous utilisiez l’onboarding complet ou l’onboarding progressif, Stripe peut demander plus d’informations sur les comptes connectés à mesure que ces comptes atteignent certains seuils. Par exemple, plus d’informations peuvent être nécessaires après 1 500 USD de frais ou 30 jours après la création d’un compte. Pour savoir quelles informations pourraient éventuellement devenir nécessaires si un compte atteint un certain seuil, consultez le tableau requirements. pour les exigences avec minimum_ défini comme eventually_.
Si vous ne fournissez pas les informations requises avant une certaine date, les frais et paiements pourraient être désactivés. Vous pouvez déclencher ces scénarios lors de tests.
Seuils de déclenchement
Vous pouvez créer un paiement avec le token de vérification (tok_) pour déclencher un seuil de vérification générique. Cela ne bloque pas les paiements ou les virements, mais déclenche la demande d’informations complémentaires. Si vous écoutez l’événement webhook v2.core.account[requirements].updated, vous pouvez vérifier :
requirements.pour les entrées oùentries minimum_estdeadline. status currently_due requirements.pour connaître la date limite la plus ancienne applicable à ces entréessummary. minimum_ deadline. time
Pour tester des scénarios où les informations requises ne sont pas fournies avant la date limite, voir les sections sur le blocage des charges et payouts ci-dessous.
Vous pouvez aussi activer des déclencheurs de vérification plus spécifiques, comme une inadéquation d’identité ou un seuil OFAC. Tester ces scénarios est bénéfique car ils se produisent souvent lorsque la vérification échoue.
Tests des paiements bloqués
Vous pouvez bloquer des paiements en créant un paiement de test avec le token charge block (tok_). Suite à cela, vous recevrez un événement webhook v2.core.account[requirements].updated qui contenant :
- L’état de la fonctionnalité pertinente les paiements par carte n’est pas
active(par exemple,configuration.n’est pasmerchant. capabilities. card_ payments. status active) - Les informations actuellement requises dans le tableau
requirements.avecentries minimum_défini commedeadline. status currently_due - Toutes les entrées qui ne sont pas encore requises apparaissent avec
minimum_etdeadline. status eventually_due
Vous pouvez ensuite mettre à jour le compte en lui ajoutant les nouvelles informations. Cela déclenche un autre événement webhook qui indique que les paiements sont activés et qu’il n’y a aucune exigence due actuellement ou plus tard.
Tests des virements bloqués
Vous pouvez bloquer les virements en créant un paiement de test avec le token block transfer (tok_). Suite à cela, vous recevrez un événement webhook v2. indiquant ce qui suit :
capabilities.dans la configurationstripe_ balance. payouts. status merchantourecipientn’est pasactive- Informations actuellement requises dans le tableau
requirements.avecentries minimum_défini commedeadline. status currently_due - Les exigences à échéance apparaissent finalement dans le tableau
requirements.avecentries minimum_défini commedeadline. status eventually_due
Vous pouvez ensuite mettre à jour le compte en lui ajoutant les nouvelles informations. Cela déclenche un autre événement webhook qui indique que les virements sont activés et que les tableaux requirements. et requirements. sont tous deux vides.