Pour toute question, nous sommes à un clic

Poser une question

Mobile SDK Payment

Ce SDK n'affiche pas seulement l'interface utilisateur pour les données de carte, mais interagit aussi avec l'API de la passerelle de paiement. En outre, il traite toutes les redirections 3DS et peut utiliser le SDK 3DS comme intégré. Il est plus facile pour le marchand d'intégrer les paiements de cette manière, mais ce SDK n'est pas aussi flexible que SDK Forms ou SDK Core (pas de possibilité d'utiliser toutes les fonctionnalités de l'API de paiement).

Gardez à l'esprit que le SDK Payment utilise Mobile SDK 3DS2, et les ACS de nombreux émetteurs ne fonctionnent pas correctement avec Mobile SDK 3DS2.

Méthodes de paiement prises en charge par ce SDK :

Méthode de paiement Support
Carte bancaire Oui
Identifiants/carte sauvegardés Oui
Apple Pay Oui
Google Pay Oui

En savoir plus sur le SDK Payment

Processus de paiement SDK Payment

Web View pour 3DS

Le diagramme ci-dessous montre le processus de paiement SDK Payment avec redirection 3DS via Web View.

sequenceDiagram participant MA as Application mobile participant MS as Serveur mobile participant SDK as SDK participant PG as Passerelle de paiement MA ->> MS: 1. le client crée une commande MS ->> PG: 2. enregistrement de commande via API PG -->> MS: 3. numéro de commande unique (mdOrder) MA ->> SDK: 4. initialisation du SDK Payment SDK ->> SDK: 5. le client saisit les données SDK -->> PG: 6. envoi du seToken PG ->> PG: 7. paiement (inclut 3DS) opt Notifications callback configurées PG -->> MS: 8. notification callback end MS ->> PG: 9. vérification du statut de paiement MS ->> MA: 10. affichage du résultat de paiement au client
  1. Le client crée une commande
  2. Le serveur mobile enregistre cette commande dans la passerelle de paiement via register.do. Utilisez le paramètre returnUrl comme marqueur pour fermer la Web View après redirection depuis ACS.
  3. Le serveur mobile reçoit en réponse le numéro de commande unique mdOrder.
  4. L'application mobile initie le SDK Payment pour collecter les données de paiement du client.
  5. Le client remplit les données de paiement.
  6. Le SDK envoie les données de paiement chiffrées (seToken) à la passerelle de paiement.
  7. La passerelle de paiement effectue le paiement.
    • Si requis, la passerelle de paiement assure la communication avec 3D Secure.
    • Pour le traitement des paiements avec 3DS 2, nous recommandons d'utiliser la redirection via web view (use3ds2sdk=false).
  8. La passerelle de paiement envoie une notification de rappel au serveur du marchand, si elle est configurée pour le marchand.
  9. Le serveur mobile vérifie le statut final du paiement via getOrderStatusExtended.do.
  10. L'application mobile montre le résultat du paiement au client.

iOS

La configuration du projet est décrite ci-dessous. Le framework peut être installé manuellement.

SDKPayment est basé sur les frameworks ThreeDSSDK, SDKForms. Par conséquent, ils sont nécessaires pour l'importation.

Pour installer les frameworks manuellement, téléchargez et ajoutez-les au projet.

Intégration iOS

Intégration SDKForms.framework

Vous pouvez intégrer SDKForms.framework de la manière suivante :

SDKForms.framework

Figure 1. Ajout du fichier SDKForms.framework


Figure 2. Modification des propriétés SDKForms.framework


Après cela, importez le framework dans le fichier ViewController.swift.

Intégration SDKPayment.framework

SDKPayment.framework

Figure 3. Ajout du fichier SDKPayment.framework


Figure 4. Modification des propriétés SDKPayment.framework


Après cela, importez le framework dans le fichier ViewController.swift.

//ViewController.swift
...
import SDKPayment
...

Travail avec API V2

Configuration SDK

Pour l'initialisation, il est nécessaire de définir l'adresse du serveur de la passerelle de paiement.

final class MainViewController: UIViewController {

    private func checkout() {
      SdkPayment.initialize(
        sdkPaymentConfig: SDKPaymentConfig(
          baseURL: "\(baseApiUrl)",
          use3DSConfig: .noUse3ds2sdk,
          keyProviderUrl: "\(baseApiUrl)/se/keys.do"
        )
      )
      ...
    }
  }

Lors de l'utilisation de l'API V2, il est nécessaire d'enregistrer l'objet session. Lors de l'enregistrement de session, la requête doit contenir les paramètres successUrl et failureUrl, égaux à "sdk://done".

Pour utiliser la méthode checkoutWithBottomSheet(), il est nécessaire de créer CheckoutConfig avec sessionid.

final class MainViewController: UIViewController {

    private func checkout() {
      ...
      // Creating `CheckoutConfig`
      let checkoutConfig = CheckoutConfig(id: .sessionId(id: sessionId))

      SdkPayment.shared.checkoutWithBottomSheet(
          controller: navigationController!,
          checkoutConfig: checkoutConfig,
          callbackHandler: self
      )
    }
  }

Traitement du résultat de paiement

Pour MainViewController, il est nécessaire d'implémenter les exigences ResultPaymentCallback.

extension MainViewController: ResultPaymentCallback {

    typealias T = PaymentResult

    func onResult(result: PaymentResult) {
      print("\(result.isSuccess) \(result.paymentId)")
    }
  }

En cas de paiement réussi, un objet PaymentResult est retourné, contenant le champ isSuccess au format boolean, qui contient le résultat du paiement, et un champ optionnel exception.

Exemples d'écrans

Card payment 3DSecure confirmation
Figure 5. Paiement avec une nouvelle carte



Cartes sauvegardées Confirmation CVC Confirmation 3DSecure
Figure 6. Paiement avec carte liée

Journalisation

Les processus internes sont journalisés avec l'étiquette SDKPayment. Vous pouvez également journaliser vos processus.

La journalisation est disponible via l'objet Logger.shared.

Exemple pour la journalisation :

...
final class LoggerImplementation: LogInterface {

    func log(class: AnyClass, tag: String, message: String, exception: (any Error)?) {
        // Do something for logging
    }
}

Logger.shared.addLogInterface(logger: LoggerImplementation())
...

Par défaut, l'étiquette SDKPayment est utilisée. Vous pouvez définir la vôtre si vous le souhaitez.

Exemple :

...
     Logger.shared.log(classMethod: type(of: self),
                       tag: "MyTag",
                       message: "My process...",
                       exception: nil)
...

Travail avec API V1

Configuration SDK

Pour l'initialisation, il est nécessaire de définir l'adresse du serveur de la passerelle de paiement.

final class MainViewController: UIViewController {

    private func checkout() {
      SdkPayment.initialize(
        sdkPaymentConfig: SDKPaymentConfig(
          baseURL: "\(baseApiUrl)",
          use3DSConfig: .noUse3ds2sdk,
          keyProviderUrl: "\(baseApiUrl)/se/keys.do"
        )
      )
      ...
    }
  }

Lors de l'utilisation de l'API V1, vous devez enregistrer un nouvel objet order. Lors de l'enregistrement de order, la requête doit contenir le paramètre returnUrl égal à "sdk://done".

Pour utiliser la méthode checkoutWithBottomSheet(), il est nécessaire de créer CheckoutConfig avec mdOrder.

final class MainViewController: UIViewController {

    private func checkout() {
      ...
      // Creating `CheckoutConfig`
      let checkoutConfig = CheckoutConfig(id: .mdOrder(id: mdOrder))

      SdkPayment.shared.checkoutWithBottomSheet(
          controller: navigationController!,
          checkoutConfig: checkoutConfig,
          callbackHandler: self
      )
    }
  }

Traitement du résultat de paiement

Pour MainViewController, il est nécessaire d'implémenter les exigences de ResultPaymentCallback.

extension MainViewController: ResultPaymentCallback {

    typealias T = PaymentResult

    func onResult(result: PaymentResult) {
      print("\(result.isSuccess) \(result.paymentId)")
    }
  }

Android

SDKPayment est basé sur les frameworks ThreeDSSDK, SDKForms. Par conséquent, ils sont nécessaires pour l'importation.

Intégration Android

Connexion au projet Gradle en ajoutant des fichiers .aar de bibliothèque

Il est nécessaire d'ajouter le fichier de bibliothèque sdk_forms-release.aar dans le dossier libs, puis de spécifier la dépendance de la bibliothèque ajoutée.

build.gradle.kts

allprojects {
  repositories {
    // ...
    flatDir {
      dirs("libs")
    }
  }
}

dependencies {
  // dependency is mandatory to add
  implementation(group = "", name = "sdk_forms-release", ext = "aar")

  implementation("androidx.cardview:cardview:1.0.0")
  implementation("com.github.devnied.emvnfccard:library:3.0.1")
  implementation("com.caverock:androidsvg-aar:1.4")
  implementation("io.card:android-sdk:5.5.1")
  implementation("com.google.android.gms:play-services-wallet:18.0.0")
}

build.gradle

allprojects {
  repositories {
    // ...
    flatDir {
      dirs 'libs'
    }
  }
}

dependencies {
  // dependency is mandatory to add
  implementation(group = "", name = "sdk_forms-release", ext = "aar")
  implementation("androidx.cardview:cardview:1.0.0")
  implementation("com.github.devnied.emvnfccard:library:3.0.1")
  implementation("com.caverock:androidsvg-aar:1.4")
  implementation("io.card:android-sdk:5.5.1")
  implementation("com.google.android.gms:play-services-wallet:18.0.0")
}

Connexion au projet Gradle en ajoutant les fichiers .aar de la bibliothèque

Il est nécessaire d'ajouter le fichier de la bibliothèque sdk_payment-release.aar dans le dossier libs, puis spécifier la dépendance de la bibliothèque ajoutée.

build.gradle.kts

allprojects {
    repositories {
        // ...
        flatDir {
            dirs("libs")
        }
    }
}

dependencies {
    // dependency is mandatory to add
    implementation(group = "", name = "sdk_payment-release", ext = "aar")
}

build.gradle

allprojects {
    repositories {
        // ...
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    // dependency is mandatory to add
    implementation(group = "", name = "sdk_payment-release", ext = "aar")
}

Travail avec l'API V2

Configuration du SDK

Pour l'initialisation, il est nécessaire de définir l'adresse du serveur de la passerelle de paiement.

SDKPayment.init(
  SDKPaymentConfig(
    baseURL = "https://dev.bpcbt.com/payment/rest",
  )
)

Lors de l'utilisation de l'API V2, il est nécessaire d'enregistrer l'objet session. Lors de l'enregistrement de session, la requête doit contenir les paramètres successUrl et failureUrl, égaux à "sdk://done".

// A link to an activity or a fragment is required. Checkout config is required.
  val checkoutConfig = CheckoutConfig.sessionId("sessionId")
  SDKPayment.checkout(activity = this, checkoutConfig = checkoutConfig)

L'URL de base pour accéder aux méthodes de la passerelle de paiement et le certificat racine pour vérifier la signature sont spécifiés via l'objet de la classe SDKPaymentConfig.

La méthode de paiement est disponible en deux variantes, appelées depuis Activity et Fragment :

Traitement du résultat de paiement

Pour Activity et Fragment, il est nécessaire de redéfinir la méthode onActivityResult.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    // Processing the result of the payment cycle.
    SDKPayment.handleCheckoutResult(requestCode, data, object :
        ResultPaymentCallback<PaymentData> {
          override fun onResult(result: PaymentResult) {
            // check payment result
          }
    })
}

En cas de paiement réussi, un objet PaymentResult est retourné, contenant le champ isSuccess au format boolean, contenant le résultat du paiement, ainsi qu'un champ optionnel exception.

Travail avec l'API V1

Configuration du SDK

Pour l'initialisation, il est nécessaire de définir l'adresse du serveur de la passerelle de paiement.

SDKPayment.init(
  SDKPaymentConfig(
    baseURL = "https://dev.bpcbt.com/payment/rest",
  )
)

Lors de l'utilisation de l'API V1, vous devez enregistrer un nouvel objet order. Lors de l'enregistrement d'order, la requête doit contenir le paramètre returnUrl et ne contenir aucun autre paramètre avec Url, tel que failUrl. returnUrl doit avoir la valeur "sdk://done".

// A link to an activity or a fragment is required. Checkout config is required.
  val checkoutConfig = CheckoutConfig.MdOrder("eecbbe96-973e-422e-a220-e9fa8d6cb124")
  SDKPayment.checkout(activity = this, checkoutConfig = checkoutConfig)

L'URL de base pour accéder aux méthodes de la passerelle de paiement et le certificat racine pour vérifier la signature sont spécifiés via l'objet de la classe SDKPaymentConfig.

La méthode de paiement est disponible en deux variantes, appelées depuis Activity et Fragment :

Traitement du résultat de paiement

Pour Activity et Fragment il est nécessaire de redéfinir la méthode onActivityResult.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    // Processing the result of the payment cycle.
    SDKPayment.handleCheckoutResult(requestCode, data, object :
        ResultPaymentCallback<PaymentData> {
          override fun onResult(result: PaymentResult) {
            // check payment result
          }
    })
}

En cas de paiement réussi, un objet PaymentResult est renvoyé, contenant un champ texte isSuccess au format boolean, contenant le résultat du paiement, ainsi qu'un champ optionnel exception.

Exemples d'écrans

Paiement par carte Confirmation 3DSecure
Figure 7. Paiement avec une nouvelle carte



Cartes sauvegardées Confirmation CVC Confirmation 3DSecure
Figure 8. Paiement avec une carte liée

Paiement via Google Pay par le module SDK Payment

Pour effectuer un paiement via Google Pay par le module SDK, il est nécessaire d'appeler la méthode de paiement checkout(), en transmettant la valeur true du flag gPayClicked. La valeur par défaut est false.

fun checkout(activity: Activity, checkoutConfig: CheckoutConfig, gPayClicked: Boolean = false) {
}

Écrans avec les boutons de paiement des portefeuilles

Figure 9. Design du bouton Google Pay

Journalisation

Les processus internes sont journalisés avec le tag SDK-Core. Vous pouvez également journaliser vos propres processus.

La journalisation est disponible via l'objet Logger.

...
    Logger.addLogInterface(object : LogInterface {
        override fun log(classMethod: Class<Any>, tag: String, message: String, exception: Exception?) {
                Log.i(tag, "$classMethod: $message", exception)
            }
        })
...

Par défaut, le tag SDK-Core est utilisé. Vous pouvez définir le vôtre si vous le souhaitez.

Exemple: ... Logger.log(this.javaClass, "MyTag", "My process...", null) ...

Questions fréquemment posées

Q: Qu'est-ce que CardIOUtilities?
A: CardIOUtilities - c'est une interface de la bibliothèque CardIO. Vous pouvez lire le guide ici: https://github.com/card-io/card.io-iOS-source.

Catégories:
eCommerce SDK
Catégories
Résultats de recherche