Je teste Stripe Connect pour permettre aux utilisateurs de payer d'autres utilisateurs. Je le teste avec la bibliothèque Java Stripe (en Kotlin).
Comme le suggère la documentation, les utilisateurs qui recevront de l'argent doivent créer un compte Stripe avec l'option Account.create
puis de relier le compte à l'API AccountLink.create
API.
Lorsque l'utilisateur passe par le flux d'onboarding Stripe (l'url Stripe reçue par l'application AccountLink.create
API) ils doivent saisir un grand nombre de données en plusieurs étapes.
Ces étapes sont :
- 01 : " Démarrer avec Stripe " : l'utilisateur est invité à saisir l'e-mail
- 02 : " Créez votre compte Stripe gratuit " : l'utilisateur doit saisir son adresse électronique et son mot de passe
- 03 : " Sécurisez votre compte avec un numéro de téléphone portable " : activer le 2FA
- 04 : " Commençons par quelques éléments de base "L'utilisateur est invité à saisir l'adresse de l'entreprise et le type d'entreprise.
- 05 : " Vérifiez vos données personnelles "L'utilisateur est invité à saisir son nom, son adresse, son adresse électronique et son numéro de téléphone.
- 06 : " Détails professionnels "L'utilisateur doit saisir le numéro de TVA (facultatif) et sélectionner un secteur d'activité.
- 07 : " Ajoutez votre banque pour recevoir les paiements " : l'utilisateur doit saisir les données relatives à la monnaie et à la banque.
- 08 : " Ajouter des détails publics pour les clients "L'utilisateur doit saisir le "descripteur de la déclaration", le "descripteur abrégé" et le "numéro de téléphone de l'assistance clientèle".
- 09 : " Montrez à vos clients votre engagement en faveur du climat "L'utilisateur doit sélectionner ou ignorer une contribution climatique.
- 10 : " Révision et finalisation "L'utilisateur doit examiner et confirmer les données.
J'aimerais conserver les étapes 1, 2, 3, 5 (sans l'adresse et le numéro de téléphone), 7 et 10 lors de l'intégration initiale et supprimer les autres étapes, afin de réduire les frictions.
J'ai vu d'autres sites web utiliser Stripe Connect, et je sais que c'est possible.
Voici le code que j'utilise :
Account.create
demande :
suspend fun stripeCreateNewAccount(
email: String,
localID: String,
productDescription: String,
onSuccess: suspend (Account?) -> Unit,
) {
try {
Stripe.apiKey = Constants.STRIPE_TOKEN_TEST
val metadata: MutableMap<String, String> = HashMap()
metadata["id"] = localID
val createAccountParams = AccountCreateParams.Builder()
.setType(AccountCreateParams.Type.STANDARD)
.setEmail(email.lowercase().trim())
.setMetadata(metadata)
.setBusinessType(AccountCreateParams.BusinessType.INDIVIDUAL)
.setBusinessProfile(
AccountCreateParams.BusinessProfile.builder()
.setUrl(url)
.setName("Testing Stripe connect")
.setProductDescription(productDescription)
.build()
)
.setCompany(
AccountCreateParams.Company.Builder()
.setName("Test Company Name")
.build()
)
.setIndividual(
AccountCreateParams.Individual.Builder()
.setFirstName("John")
.setLastName("Smith")
.setEmail(email.lowercase().trim())
.build()
)
.setBusinessProfile(
AccountCreateParams.BusinessProfile.builder()
.setUrl("${Constants.BASE_URL}/list/$localID" )
.setProductDescription(productDescription)
.build()
)
.build()
onSuccess(Account.create(createAccountParams))
} catch (e: Exception) {
e.printStackTrace()
onSuccess(null)
}
}
et ceci est le AccountLink.create
demande :
suspend fun stripeLinkExistingAccount(
idAccountToLink: String,
onCompleted: suspend (String?) -> Unit,
) {
try {
Stripe.apiKey = Constants.STRIPE_TOKEN_TEST
val params = AccountLinkCreateParams
.builder()
.setAccount(idAccountToLink)
.setRefreshUrl("${Constants.BASE_URL}/profile")
.setReturnUrl("${Constants.BASE_URL}/profile")
.setType(AccountLinkCreateParams.Type.ACCOUNT_ONBOARDING)
.build()
AccountLink.create(params)?.let { accountLink ->
onCompleted(accountLink.url) // The Stripe onboarding url
} ?: run {
// Something went wrong
onCompleted(null)
}
} catch (e: Exception) {
e.printStackTrace()
onCompleted(null)
}
}