Saltar al contenido principal
En esta página

Utilice el SDK de iOS de DEUNA para mostrar experiencias completas de Checkout, Widget de Pago, Almacen de Pagos, Click to Pay, "siguiente acción", vales y Apple Pay nativo. El paquete principal es compatible con iOS 13 y versiones posteriores; el paquete unificado utiliza SwiftUI. DeunaWidget Requiere iOS 14 o posterior.

Instalación#

Administrador de paquetes rápido

En Xcode, selecciona Archivo → Agregar dependencias del paquete, introduzca la URL del repositorio y especifique la versión de la publicación:

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

Seleccione el núcleo DeunaSDK producto. En el manifiesto del paquete, agregue el producto a sus dependencias objetivo:

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

CacaoPods

Añada la subespecífica principal y especifique la versión del SDK según su política de lanzamiento:

archivo de podsRuby
pod 'DeunaSDK/Core', '~> 2.12'

Los marcos de proveedores de prevención de fraude son opcionales. Agregue únicamente los productos o subespecificaciones asignadas a su cuenta, como DeunaSDK/Cybersource, DeunaSDK/Kount, DeunaSDK/Sift, DeunaSDK/Riskified, DeunaSDK/Signifyd, DeunaSDK/Accertifyo DeunaSDK/MercadoPago.

Inicialización#

Crear una instancia del SDK con la clave API pública correspondiente al entorno seleccionado, y conservarla para la pantalla o coordinador propietaria.

Swift
import DeunaSDK

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

e

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

let deunaSDK = DeunaSDK.shared

Abra el Widget de Pago en un modal#

Crear callbacks de tipo específico y pasar el token de pedido devuelto por tu 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"
)

llamar close() para desactivar el widget activo. Llama a dispose() cuando finalice el flujo que lo controla para liberar su controlador y WebView.

Experiencias disponibles#

ExperienciaMétodoInformación necesaria
Finalizar comprainitCheckout(...)orderToken, CheckoutCallbacks
Widget de PagoinitPaymentWidget(...)orderToken, PaymentWidgetCallbacks
Caja de PagoinitElements(...)ElementsCallbacks; types puede omitirse
Haga clic para pagarinitElements(...)types: [["name": ElementsWidget.clickToPay]]
Siguiente AccióninitNextAction(...)Token para el pedido que requiere una acción adicional
valeinitVoucher(...)Token para el pedido de vale

El método para iOS se llama initVoucher, no initVoucherWidget.

Incorporar un widget con SwiftUI#

En iOS 14 o posterior, configure y renderice un widget de tipo. DeunaWidget. El SDK selecciona el controlador embebido adecuado según el tipo de configuración.

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
    )
  }
}

Uso CheckoutWidgetConfiguration, ElementsWidgetConfiguration, NextActionWidgetConfigurationo VoucherWidgetConfiguration Para otras experiencias.

Para un widget dentro ScrollView, contraseña AutoResizeConfig(initialHeight: 150) para la configuración y el manejo onScrollNeeded para que el campo de entrada permanezca visible sobre el teclado.

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

Si su aplicación posee el botón de pago, configure hidePayButton: true en la configuración y la llamada deunaSDK.submit { result in ... } desde la acción del botón.

Almacén de pagos y Pago con un clic#

El Almacén de pagos es la experiencia predeterminada de Elements. Proporcione una autenticación userToken o UserInfo para el cliente.

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
)

Uso ElementsWidget.clickToPay en lugar de ElementsWidget.vault para Click to Pay.

Apple Pay nativo#

Verifique tanto la configuración del comerciante como la capacidad del dispositivo antes de mostrar el botón de Apple Pay. El SDK almacena el resultado.

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)
}

Una vez que la disponibilidad sea exitosa, inicie Apple Pay desde la acción del botón seleccionando el Wallet en initElements:

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

La aplicación debe incluir la autorización de Apple Pay y un perfil de aprovisionamiento que contenga el identificador del comerciante. Consulte de Apple Pay para la configuración completa.

Continúe con una acción pendiente#

Utilice el mismo token de pedido cuando DEUNA informe que el pago requiere un desafío o redirección 3DS compatible.

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

El SDK presenta las URLs externas compatibles y devuelve el control al widget. Utilice el estado de llamada de retorno para la interfaz y un webhook verificado para la finalización.

Abrir un cupón#

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

Las llamadas de retorno de los vouchers siguen el mismo ciclo de éxito, error, cierre y envío de eventos que las otras experiencias de pago.

Datos de fraude del dispositivo#

El producto principal no depende de proveedores de fraude. Vincule solo los productos o subespecificaciones de proveedores que utilice, y luego llame a generateFraudId con la configuración asignada a su cuenta.

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

Si el marco de proveedor solicitado no está vinculado, el SDK omitirá ese proveedor. Consulte Integrar la huella digital del dispositivo para la configuración específica del proveedor.

Referencia del ciclo de vida y llamadas de retorno#

Llamada de retorno o métodoÚselo para
onSuccessActualice la interfaz después de que la experiencia haya tenido éxito.
onErrorManeje un tipo de PaymentsError o ElementsError.
onClosedDistinga entre el cierre controlado por el cliente y el SDK.
onEventDispatchObserve los eventos de ciclo de vida de checkout o Elements.
onCardBinDetectedReaccione a la detección de BIN de tarjetas.
onInstallmentSelectedReaccione a la selección de un plan de cuotas.
onPaymentProcessingEvite acciones de pago duplicadas.
close()Cierre la presentación activa manteniendo el controlador del SDK.
dispose()Liberar el controlador y la WebView cuando finalice el flujo.

Ejemplos y código fuente oficiales#

Consulta WalletsScreen.swift para Apple Pay nativo y EmbeddedScreen.swift para el ciclo de vida de SwiftUI.