Aller au contenu principal
Sur cette page

Utilisez le SDK iOS de DEUNA pour afficher une expérience de paiement complète, un widget de paiement, un coffre-fort de paiement, Click to Pay, la prochaine étape, les bons de réduction et les fonctionnalités natives Apple Pay. Le package principal prend en charge iOS 13 et versions ultérieures ; il intègre SwiftUI unifié. DeunaWidget Nécessite iOS 14 ou une version ultérieure.

Installation#

Gestionnaire de paquets Swift

Dans Xcode, sélectionnez Fichier → Ajouter des dépendances de paquets, saisissez l'URL du dépôt, et spécifiez la version de publication :

Plain text
https://github.com/deuna-developers/deuna-sdk-ios

Sélectionnez le module principal DeunaSDK produit. Dans un manifeste de package, ajoutez le produit à vos dépendances cibles :

Package.swiftSwift
.product(name: "DeunaSDK", package: "deuna-sdk-ios")

Poissons de cacao

Ajoutez la sous-spécification principale et fixez la version de l'SDK conformément à votre politique de publication :

Fichier de pocheRuby
pod 'DeunaSDK/Core', '~> 2.12'

Les frameworks de fournisseurs de lutte contre la fraude sont optionnels. Ajoutez uniquement les produits ou sous-catégories attribués à votre compte, tels que DeunaSDK/Cybersource, DeunaSDK/Kount, DeunaSDK/Sift, DeunaSDK/Riskified, DeunaSDK/Signifyd, DeunaSDK/Accertify, ou DeunaSDK/MercadoPago.

Initialisation#

Créer une instance SDK avec la clé API publique pour l'environnement sélectionné et la conserver pour l'écran ou le coordinateur concerné.

Swift
import DeunaSDK

let deunaSDK = DeunaSDK(
  environment: .sandbox,
  publicApiKey: "YOUR_PUBLIC_API_KEY"
)

Pour une instance d'application, initialisez et lisez ensuite le SDK partagé :

Swift
DeunaSDK.initialize(
  environment: .sandbox,
  publicApiKey: "YOUR_PUBLIC_API_KEY"
)

let deunaSDK = DeunaSDK.shared

Ouvrir le Widget de Paiement dans une fenêtre modale#

Créer des callbacks de type défini et transmettre le jeton de commande retourné par votre backend.

Swift
let callbacks = PaymentWidgetCallbacks(
  onSuccess: { order in
    deunaSDK.close()
    showConfirmation(order)
  },
  onError: { error in
    showRetry(error)
  },
  onClosed: { action in
    showCart(action)
  },
  onPaymentProcessing: {
    disablePayButton()
  },
  onEventDispatch: { event, payload in
    analytics.track(event, payload)
  }
)

deunaSDK.initPaymentWidget(
  orderToken: orderToken,
  callbacks: callbacks,
  language: "en"
)

Appeler close() pour désactiver le widget actif. Appeler dispose() lorsque le flux parent se termine pour libérer son contrôleur et WebView.

Expériences disponibles#

ExpérienceMéthodeInformations importantes
Finaliser la commandeinitCheckout(...)orderToken, CheckoutCallbacks
Widget de paiementinitPaymentWidget(...)orderToken, PaymentWidgetCallbacks
Coffre-fort de paiementinitElements(...)ElementsCallbacks; types Peut être omis
Cliquez pour payerinitElements(...)types: [["name": ElementsWidget.clickToPay]]
Prochaine étapeinitNextAction(...)Jeton pour la commande nécessitant une action supplémentaire
Bon de réductioninitVoucher(...)Jeton pour la commande de la carte cadeau

La méthode iOS s'appelle initVoucher, et non initVoucherWidget.

Intégrer un widget avec SwiftUI#

Sur iOS 14 ou ultérieur, créer une configuration typée et la rendre. DeunaWidget. L'SDK sélectionne le contrôleur embarqué approprié en fonction du type de configuration.

Swift
struct PaymentScreen: View {
  let deunaSDK: DeunaSDK
  let orderToken: String
  let callbacks: PaymentWidgetCallbacks

  var body: some View {
    let configuration = PaymentWidgetConfiguration(
      orderToken: orderToken,
      callbacks: callbacks
    )

    DeunaWidget(
      deunaSDK: deunaSDK,
      configuration: configuration
    )
  }
}

Utilisation CheckoutWidgetConfiguration, ElementsWidgetConfiguration, NextActionWidgetConfiguration, ou VoucherWidgetConfiguration Pour les autres expériences.

Pour un widget à l'intérieur ScrollView, mot de passe AutoResizeConfig(initialHeight: 150) à la configuration et à la gestion onScrollNeeded afin que le champ de saisie reste visible au-dessus du clavier.

Swift
DeunaWidget(deunaSDK: deunaSDK, configuration: configuration)
  .onScrollNeeded { points in
    scrollBy(points)
  }

Si votre application possède le bouton de paiement, définissez hidePayButton: true dans la configuration et l'appel deunaSDK.submit { result in ... } à partir de l'action du bouton.

Coffre-fort de paiement et Paiement en un clic#

Le Coffre-fort de paiement est l'expérience par défaut Elements. Passez soit un compte authentifié userToken ou UserInfo pour le client.

Swift
let elementsCallbacks = ElementsCallbacks(
  onSuccess: { credential in useSavedCredential(credential) },
  onError: { error in showRetry(error) },
  onClosed: { action in showPaymentMethods(action) },
  onEventDispatch: { event, payload in
    analytics.track(event, payload)
  }
)

deunaSDK.initElements(
  callbacks: elementsCallbacks,
  userInfo: DeunaSDK.UserInfo(email: "ada@example.com"),
  types: [["name": ElementsWidget.vault]],
  orderToken: orderToken
)

Utilisation ElementsWidget.clickToPay au lieu de ElementsWidget.vault pour Click to Pay.

Apple Pay natif#

Vérifiez la configuration du commerçant et les capacités de l'appareil avant d'afficher votre bouton Apple Pay. Le SDK stocke le résultat.

Swift
let userInfo = DeunaSDK.UserInfo(email: "ada@example.com")
let params = GetWalletsAvailableParams(
  orderToken: orderToken,
  userInfo: userInfo
)

deunaSDK.getWalletsAvailable(params: params) { wallets, error in
  if let error {
    showWalletError(error)
    return
  }

  applePayButton.isHidden = !wallets.contains(.applePay)
}

Une fois la disponibilité confirmée, lancez Apple Pay à partir de l'action du bouton en sélectionnant le portefeuille dans initElements:

Swift
deunaSDK.initElements(
  callbacks: elementsCallbacks,
  userInfo: userInfo,
  types: [["name": WalletProvider.applePay.processorName.uppercased()]],
  orderToken: orderToken
)

L'application doit inclure l'entitlement Apple Pay et un profil de provisionnement contenant l'identifiant du commerçant. Voir Apple Payer pour la configuration complète.

Poursuivre une action en attente#

Utilisez le même jeton de commande lorsque DEUNA signale que le paiement nécessite un défi ou une redirection 3DS pris en charge.

Swift
deunaSDK.initNextAction(
  orderToken: orderToken,
  callbacks: nextActionCallbacks
)

Le SDK présente les URL externes prises en charge et retourne le contrôle au widget. Utilisez l'état de rappel pour l'interface et un webhook vérifié pour la finalisation.

Ouvrir un bon de réduction#

Swift
deunaSDK.initVoucher(
  orderToken: orderToken,
  callbacks: voucherCallbacks
)

Les notifications de remboursement fonctionnent selon le même cycle de réussite, d'erreur, de fermeture et de déclenchement d'événements que les autres expériences de paiement.

Données des appareils frauduleux#

Le produit principal n'a aucune dépendance envers les fournisseurs de lutte contre la fraude. Liez uniquement les produits ou sous-spécifications de fournisseur que vous utilisez, puis appelez generateFraudId avec la configuration attribuée à votre compte.

Swift
deunaSDK.generateFraudId(params: [
  "CYBERSOURCE": [
    "orgId": "YOUR_ORG_ID",
    "merchantId": "YOUR_MERCHANT_ID",
  ],
]) { fraudId in
  guard let fraudId else { return }
  sendFraudIdToBackend(fraudId)
}

Si le framework de fournisseur demandé n'est pas lié, le SDK ignore ce fournisseur. Voir Intégrer l'empreinte digitale de l'appareil pour la configuration spécifique au fournisseur.

Référence des callbacks et du cycle de vie#

Callback ou méthodeUtilisez-le pour
onSuccessMettre à jour l'interface après le succès de l'expérience.
onErrorGérer une saisie de données PaymentsError ou ElementsError.
onClosedDifférencier la fermeture contrôlée par le client et le SDK.
onEventDispatchObserver les événements de cycle de vie du processus de paiement ou d'Elements.
onCardBinDetectedRéagissez à la détection du BIN de la carte.
onInstallmentSelectedRéagir à la sélection d'un plan de paiement.
onPaymentProcessingEmpêcher les actions de paiement dupliquées.
close()Fermez la présentation active tout en conservant le contrôleur du SDK.
dispose()Libérez le contrôleur et le WebView actifs lorsque le flux se termine.

Exemples et code source officiels#

Consultez WalletsScreen.swift pour Apple Pay natif et EmbeddedScreen.swift pour le cycle de vie SwiftUI.