llinardos / sdk-ios-v2

SDK de FrontEnd para Gateway de pago Decidir

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Decidir SDK IOS

Modulo para conexión con gateway de pago DECIDIR2

Introducción

El flujo de una transacción a través de las sdks consta de dos pasos, la generación de un token de pago por parte del cliente y el procesamiento de pago por parte del comercio. Existen sdks específicas para realizar estas funciones en distintos lenguajes que se detallan a continuación:

Volver a inicio

Alcance

La sdk IOS provee soporte para su aplicación front-end, encargandose de la generación de un token de pago por parte de un cliente. Este token debe ser enviado al comercio al realizar el pago. Esta sdk permite la comunicación del cliente con la API Decidir utilizando su API Key pública1.

Para procesar el pago con Decidir, el comercio podr´ realizarlo a través de alguna de las siguentes sdks front-backend:

imagen de sdks


_1 - Las API Keys serán provistas por el equipo de Soporte de DECIDIR (soporte@decidir.com.ar). _

Volver a inicio

Cierre de lotes

El cierre de lote le permite al comercio hacer la presentación ante cada Marca de las operaciones de Compras, Anulaciones y Devoluciones realizadas para que las mismas puedan ser liquidadas por cada medio de pago.+

Los cierres de lotes de cada medio de pago pueden realizarse de 2 maneras: Manual: esta modalidad es “on demand”. Para ello, un usuario del comercio debe ingresar a la consola de Decidir y seleccionar el medio de pago a cerrar lote. Opción de menú: Menú --> Cerrar Lote. Para más detalle por favor consultar el Manual de Administración de Decidir. Automática: Los procesos se ejecutan diariamente luego de la medianoche, y al finalizar, se envían al comercio cada uno de los archivos del cierre de lote de cada medio de pago habilitado. Los resúmenes correspondientes a los cierres de lotes automáticos efectuados pueden ser enviados por:

  • E-MAIL
  • FTP/SFTP

En caso de que el comercio opte por recibir los resúmenes vía e-mail, debe indicarnos a qué dirección o direcciones de correo electrónico desea recibir tales archivos. En caso de que el comercio opte por recibir los resúmenes vía FTP o SFTP, debe indicarnos los siguientes datos: URL del servidor, usuario y clave.

Para mas informacion consultar en : https://decidir.api-docs.io/1.0/introduccion/cierre-de-lote

Volver a inicio

Diagrama de secuencia

El flujo de una transacción a través de las sdks consta de dos pasos, a saber:

  1. sdk front-end: Se realiza una solicitud de token de pago con la Llave de Acceso pública (public API Key), enviando los datos sensibles de la tarjeta (PAN, mes y año de expiración, código de seguridad, titular, y tipo y número de documento) y obteniéndose como resultado un token que permitirá realizar la transacción posterior.

  2. sdk back-end: Se ejecuta el pago con la Llave de Acceso privada (private API Key), enviando el token generado en el Paso 1 más el identificador de la transacción a nivel comercio, el monto total, la moneda y la cantidad de cuotas.

A continuación, se presenta un diagrama con el Flujo de un Pago.

imagen de configuracion

Volver a inicio

Instalación

Se debe descargar la última versión del SDK desde el botón Download ZIP del branch master y utilzar alguna de las siguientes opciones: CocoaPods, Carthage o manualmente.

Luego en su proyecto puede referenciar a la sdk agregando el siguiente import

import sdk_ios_v2

Instalando con CocoaPods

Deberá tener instalado CocoaPods.

Una vez descargado y descomprimido el archivo zip, se debe generar la librería con el comando pod lib lint sobre la misma. Debe agregar en el archivo Podfile de su proyecto el siguiente código. Si no posee un archivo Podfile, puede crearlo con el comando pod init.

target 'MiProyecto' do
  pod 'sdk_ios_v2', :path => <PATH_TO_SDK-IOS.v2>
end

Ahora instalara las dependecias en su proyecto con el comando pod install

Instalando con Carthage

Deberá tener instalado Carthage.

Una vez descargado y descomprimido el archivo zip, se debe generar la librería con el comando carthage update sobre la misma. Luego en su proyecto Xcode, debe agregar el archivo .framework generado desde la carpeta Carthage/Builds. Para más información consulte este enlace.

Instalando manualmente

Puede importar el proyecto Xcode desde sdk_ios_v2.xcworkspace y buildearlo manualente.

Volver a inicio

Versiones de IOS soportadas

La versión implementada de la SDK, está testeada para versiones desde IOS 8.0

Volver a inicio

Ambientes

La sdk IOS permite trabajar con los ambientes de Sandbox y Produccón de Decidir. El ambiente se debe instanciar indicando si se utiliza sandbox o producción.

import sdk_ios_v2

open class MiClase {
  var publicKey: "e9cdb99fff374b5f91da4480c8dca741"
  //Instancia para comunicar con ambiente Sandbox
  var decidirSandbox: PaymentsTokenAPI = PaymentsTokenAPI(publicKey: publicKey, isSandbox: true)
  //Instancia para comunicar con ambiente  de produccion
  var decidirProduccion: PaymentsTokenAPI = PaymentsTokenAPI(publicKey: publicKey) //Se puede omitir el parametro isSandbox o enviar el aEl ambiente se debe instanciar indicando su URL.rgumento false
// ...codigo...
}

Volver a inicio

Uso

Inicializar la clase correspondiente al conector.

Instanciación de la clase PaymentsTokenAPI

La misma recibe como parámetros la API Key pública provista por Decidir para el comercio y si trabajará con el ambiente de Sandbox.

La API Key será provista por el equipo de Soporte de DECIDIR (soporte@decidir.com.ar).

A partir de ahora y por el resto de la documentación, se ejemplificará utilizando una APIKey habilitada para operar en el ambiente Sandbox.

// ...codigo...
var publicKey: "e9cdb99fff374b5f91da4480c8dca741"
//Instancia para comunicar con ambiente Sandbox
var decidir: PaymentsTokenAPI = PaymentsTokenAPI(publicKey: publicKey, isSandbox: true)
// ...codigo...
}

Volver a inicio

Operatoria del Gateway

Generación de Token de Pago

El sdk IOS permite generar, desde el dispositivo, un token de pago con los datos de la tarjeta del cliente. Éste se deberá enviar luego al backend del comercio para realizar la transacción de pago correpondiente.

El token de pago puede ser generado de 2 formas como se muestra a continuación.

Volver a inicio

Con datos de tarjeta

Mediante este recurso, se genera un token de pago a partir de los datos de la tarjeta del cliente.

Campo Descripcion Oblig Restricciones Ejemplo
card_number numero de tc SI Mayor igual a 6 numeros "4507990000004905"
card_expiration_month mes de vto de tc SI No debe ser anterior a la fecha (mes/año) del dia actual 07
card_expiration_year año de vto de tc SI No debe ser anterior a la fecha (mes/año) del dia actual 17
security_code codigo de seguridad NO Sin validacion 234
card_holder_name titular (como figura en la tc) SI Mayor igual a 1 letra Valentin Santiago Gomez
type tipo de documento NO Sin validacion dni/DNI, cuil/CUIL
number nro de documento NO Sin validacion 23968498
device_unique_identifier identificador único del dispositivo NO Sin validacion 12345
// ...codigo...
var publicKey: "e9cdb99fff374b5f91da4480c8dca741"
//Instancia para comunicar con ambiente Sandbox
var decidir: PaymentsTokenAPI = PaymentsTokenAPI(publicKey: publicKey, isSandbox: true)
// ...codigo...
//Datos de tarjeta
let pt = PaymentToken()
pt.cardNumber = "4507990000004905" //Nro de tarjeta. MANDATORIO
pt.cardExpirationMonth = "03" //Mes de vencimiento [01-12]. MANDATORIO
pt.cardExpirationYear = "19" //Año de vencimiento[00-99]. MANDATORIO
pt.cardHolderName = "TITULAR" //Nombre del titular tal como aparece en la tarjeta. MANDATORIO
pt.securityCode = "123" // CVV. OPCIONAL

let holder = CardHolderIdentification() //Identificacion del titular de la tarjeta. Es opcional, pero debe estar completo si se agrega
holder.type = "dni" //MANDATORIO
holder.number = "12345678" //MANDATORIO

pt.cardHolderIdentification = holder //OPCIONAL

//generar token de pago
self.decidir.createPaymentToken(paymentToken: pt) { (paymentTokenResponse, error) in
   //Manejo de error general
  guard error == nil else {
      if case let ErrorResponse.Error(_, _, dec as ModelError) = error! {
        // Manejo de error especifico de Decidir
          //..codigo...
      }
      //...codigo...
      return
  }
  // Procesamiento de respuesta de la generacion de token de pago
  if let paymentTokenResponse = paymentTokenResponse {
    //...codigo...
    //Token de pago se encuentra en paymentTokenResponse.id
  }
}

Volver a inicio

Con tarjeta tokenizada

Mediante este recurso, se genera una token de pago a partir una tarjeta tokenizada previamente.

// ...codigo...
var publicKey: "e9cdb99fff374b5f91da4480c8dca741"
//Instancia para comunicar con ambiente Sandbox
var decidir: PaymentsTokenAPI = PaymentsTokenAPI(publicKey: publicKey, isSandbox: true)
// ...codigo...
//Datos de tarjeta
let pct = PaymentCardToken()
pct.token = "ae9fc3e5-ff41-4de2-9c91-81030be1c4a6" //Tarjeta tokenizada MANDATORIO
pct.securityCode = "123" // CVV. OPCIONAL

//generar token de pago
self.decidir.createPaymentCardToken(paymentCardToken: pct) { (paymentTokenResponse, error) in
   //Manejo de error general
  guard error == nil else {
      if case let ErrorResponse.Error(_, _, dec as ModelError) = error! {
        // Manejo de error especifico de Decidir
          //..codigo...
      }
      //...codigo...
      return
  }
  // Procesamiento de respuesta de la generacion de token de pago
  if let paymentTokenResponse = paymentTokenResponse {
    //...codigo...
    //Token de pago se encuentra en paymentTokenResponse.id
  }
}

Volver a inicio

Integración con Cybersource

IMPORTANTE: Para usar Cybersource es necesario modificar la configuración del proyecto. Seleccionar el/los target/s correspondiente/s y en Build Settings agregar a Framework Search Paths una nueva entrada con el texto $PODS_ROOT/sdk_ios_v2.

Para habilitar el Servicio de Control de Fraude Cybersource, la vista inicial de su aplicación deberá extenderla de CyberSourceDelegate. Luego al finalizar la carga de su vista, invocará a CyberSource con su public APIKey y se le devolverá un sessionId correspondiente al dispositivo. Este sessionId debe enviarse a Decidir al momento de generar un token de pago.

A continuación se ejemplifica la integración en la vista.

import UIKit
import sdk_ios_v2

class HomeViewController: UIViewController, CyberSourceDelegate {

    var cyberSource:CyberSource?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.cyberSource = CyberSource()
        self.cyberSource?.delegate = self
        self.cyberSource?.auth(publicKey: "e9cdb99fff374b5f91da4480c8dca741")
        // Do any additional setup after loading the view.
    }


    func authFinished(sessionId: String) {
      NSLog("Session id created: %s", sessionId)
      // Funcion callback que devuelve el sessionId
      // A continuacion debe almacenar este campo para enviarlo al generar un token de pago
      //...codigo...
    }
  //...codigo...
}

Luego debe agregar sessionId dentro de FraudDetection y generar el token de pago

// ...codigo...
var publicKey: "e9cdb99fff374b5f91da4480c8dca741"
var sessionId: String // debe asignarle el sessionId retornado por CyberSource
//Instancia para comunicar con ambiente Sandbox
var decidir: PaymentsTokenAPI = PaymentsTokenAPI(publicKey: publicKey, isSandbox: true)
// ...codigo...
//Datos de tarjeta
let pct = PaymentCardToken()
pct.token = "ae9fc3e5-ff41-4de2-9c91-81030be1c4a6" //Tarjeta tokenizada MANDATORIO
pct.securityCode = "123" // CVV. OPCIONAL
//SessionId para integracion con CyberSource
let fd = FraudDetection()
fd.deviceUniqueIdentifier = sessionId
pct.fraudDetection = fd

//generar token de pago
self.decidir.createPaymentCardToken(paymentCardToken: pct) { (paymentToken, error) in
   //Manejo de error general
  guard error == nil else {
      if case let ErrorResponse.Error(_, _, dec as ModelError) = error! {
        // Manejo de error especifico de Decidir
          //..codigo...
      }
      //...codigo...
      return
  }
  // Procesamiento de respuesta de la generacion de token de pago
  if let paymentTokenResponse = C {
    //...codigo...
    //Token de pago se encuentra en paymentTokenResponse.id
  }
}

Volver a inicio

Device FingerPrint

El Device Fingerprint (DF) es la huella digital del dispositivo que realiza la transacción. Es un dato muy importante que se tiene en cuenta en el proceso de validación Para acceder a la documentación: https://decidir.api-docs.io/1.0/prevencion-de-fraude-by-cybersource/cs_device_fingerprint

Volver a inicio

About

SDK de FrontEnd para Gateway de pago Decidir

License:MIT License


Languages

Language:Swift 68.6%Language:Objective-C 26.1%Language:C 3.0%Language:Shell 2.1%Language:Ruby 0.2%