Modulo para conexión con gateway de pago DECIDIR2
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:
- Generación de un token de pago. Se utiliza alguna de las siguentes sdks front-end :
- Procesamiento de pago. Se utiliza alguna de las siguentes sdks back-end :
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:
_1 - Las API Keys serán provistas por el equipo de Soporte de DECIDIR (soporte@decidir.com.ar). _
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:
- 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
El flujo de una transacción a través de las sdks consta de dos pasos, a saber:
-
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.
-
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.
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
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
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.
Puede importar el proyecto Xcode desde sdk_ios_v2.xcworkspace
y buildearlo manualente.
La versión implementada de la SDK, está testeada para versiones desde IOS 8.0
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...
}
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...
}
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.
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
}
}
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
}
}
IMPORTANTE: Para usar
Cybersource
es necesario modificar la configuración del proyecto. Seleccionar el/los target/s correspondiente/s y enBuild Settings
agregar aFramework 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
}
}
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