Giter Site home page Giter Site logo

sdk-ios-v2's Introduction

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 ([email protected]). _

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

Instalacion

CocoaPods

CocoaPods es un manejador de dependencias para proyectos Cocoa. Puedes instalarlo con los siguientes comandos:

$ gem install cocoapods

CocoaPods 1.5.3+ es requerido para construir sdk-ios 2.1.0

Para integrar sdk-ios-v2 en tu proyecto Xcode usando CocoaPods, especificalo en tu Podfile:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!

target '<Your Target Name>' do
    pod 'sdk_ios_v2', :git => 'https://github.com/decidir/sdk-ios-v2.git'
end

Luego, corre el siguiente comando:

$ pod install

Instalando manualmente

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

Cybersource version

Fingerprinting Mobile SDK v5.0.32.

Versiones de IOS soportadas

La versión implementada de la SDK, está testeada para versiones desde IOS 9.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 ([email protected]).

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

sdk-ios-v2's People

Contributors

britez avatar ignaciovalek avatar biandratti avatar dcorbatta avatar pavlo88 avatar llinardos avatar francotesei avatar nicovillanueva avatar ptonkli avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.