PAGO INAPP - iOS

En esta sección vamos a explicar como realizar la integración inApp y cuales funcionalidades disponibles del framework SDKInApp para el sistema operativo iOS.

Configuración

Para realizar este tipo de integración, es necesario tener una configuración previa:

  1. En primer lugar, integrar la libreria en el proyecto:



    Marcar la opción de "Copy items if needed".


  2. Añadir los binarios al proyecto: En el apartado de "Frameworks, Libraries, and Embedded Content" del Target seleccionar "Embed & Sign”.

  3. Importar TPVVInLibrary al proyecto.
    • En SWIFT:
      import TPVVInLibrary
    • En Objective:
      #import <TPVVInLibrary/TPVVInLibrary-Swift.h>
  4. Opción Enable Bitcode: Para un correcto “Build” y ejecución de la App, es recomendable acceder a la opción de “Enable Bitcode” y ponerla a "NO". Esta opción podrá encontrarla en Build Settings del correspondiente Target.
  5. Publicar en el App Store: Para poder realizar la subida de la aplicación en el App Store debe tener la librería integrada del framework para dispositivos móviles físicos. Además son necesarios 2 requisitos:
    • Utilizar una versión de xcode 11.1 o superior para el desarrollo de la app.
    • Utilizar como SDK de base la versión de iOS 13.
  6. Configuración de parámetros:


Pago Directo

Para realizar un pago directo es necesario haber configurado previamente los parámetros obligatorios en el objeto TPVVConfiguration. Tras fijar éstos parámetros, en cada pago es necesario indicar los siguientes campos:

  • orderNumber: Código alfanumérico identificativo de la operación que tiene que ser único. [OBLIGATORIO]
  • amount: Importe de la operación. [OBLIGATORIO]
  • identifier: En caso de no indicar nada realiza un pago normal, en caso de introducir una referencia valida se realiza un pago con referencia, y por último, para realizar un pago con solicitud de referencia hay que utilizar el valor de la constante TPVVConfiguration.shared.REQUEST_REFERENCE. [OPCIONAL]
  • productDescription: Descripción del pago. [OPCIONAL]
  • transactionType: Utilizando las constantes definidas en TPVVConstants. [OBLIGATORIO]
    • Normal: TPVVConstants.PAYMENT_TYPE_NORMAL
    • Preautorización: TPVVConstants.PAYMENT_TYPE_PREAUTHORIZATION
    • Tradicional: TPVVConstants.PAYMENT_TYPE_TRADITIONAL
    • Autenticación: TPVVConstants.PAYMENT_TYPE_AUTHENTICATION
    • Normal: TransactionTypeNormal;
    • Preautorización:TransactionTypePreauthorization;
    • Tradicional:TransactionTypeTraditional;
    • Autenticación:TransactionTypePaymentTypeAuthentication;
  • extraParams: Diccionario de variables con clave-valor. En caso de querer utilizar parámetros adicionales en la operación se deben introducir tantas como se desee; en caso contrario, dejar vacío. [OPCIONAL]
  • uiViewConfig:Personalización de la vista del pago directo. [OBLIGATORIO]

Personalización

Es posible personalizar algunos aspectos de la pantalla del pago directo tales como el logo, fondo de pantalla, colores y literales.

Para llevar a cabo la configuración de la pantalla del pago directo se hace uso del objeto del tipo TPVInAppUIConfig.:

  • Logo (logo)
  • Color de fondo de pantalla (setBackgroundViewColor)
  • Imagen de fondo de pantalla (setBackgroundImageView)
  • Texto de botón cancelar (setCancelButtonText)
  • Texto de botón Continuar (setContinueButtonText)
  • Texto, color y fuente de número de tarjeta (setNumberCardLabel)
  • Texto color y fuente de fecha de caducidad (setExpireDateLabel)
  • Texto color y fuente de código de seguridad (setCVVLabel)
  • Texto color y fuente de texto descriptivo (setInfoPaymentLabel)

Ejemplo de personalización:

				 			
//Se instancia la personalización 

let labelCardNumber: PaymentUILabelConfig = PaymentUILabel.create(text: "N.º de tarjeta", textColor:
.black, textFont: .systemFont(ofSize: 16, weight: .semibold))

let labelExpiredDate: PaymentUILabelConfig = PaymentUILabel.create(text: "Caducidad", textColor:
.black, textFont: .systemFont(ofSize: 16, weight: .semibold))

let labelCVC: PaymentUILabelConfig = PaymentUILabel.create(text: "Cód. seguridad", textColor: .black,
textFont: .systemFont(ofSize: 16, weight: .semibold))

let infoPayment: PaymentUILabelConfig = PaymentUILabel.create(text: "Por favor, compruebe que el
número de tarjeta y el resto de datos son exactamente los mismos que aparecen en la tarjeta.",

textColor: .black, textFont: .systemFont(ofSize: 16, weight: .semibold))

let extraParams: [String:String] = [“Extra1”:”valor1”,”Extra2”:”valor2”]

let uiConfig = TPVInAppUIConfig()
	.setCancelButtonText("Cancelar")
	.setContinueButtonText("Continuar")
	.setNumberCardLabel(labelCardNumber)
	.setExpireDateLabel(labelExpiredDate)
	.setCVVLabel(labelCVC)
	.setInfoPaymentLabel(infoPayment)
	.setLogo(logo: UIImage(named:"logoEntidad"))
	.setBackgroundImageView(image: UIImage(named:"background"))
	.setBackgorundViewColor(color: .lightGray)
	
//Se crea el objeto de pago 

let dpView = DirectPaymentViewController(orderNumber: order, amount: amount.floatValue,
productDescription: productDescription, transactionType: operationTypeValue, identifier:
paymentIdentifier, extraParams: extraParams, uiViewConfig: uiConfig)

dpView.delegate = self

present(dpView, animated: true, completion: nil)
							
						
				 	
//Se instancia la personalización 

PaymentUILabelConfig *labelCardNumber = [[PaymentUILabelConfig alloc]
initWithText:@"Número Card" textColor:UIColor.blackColor textFont:[UIFont
fontWithName:@"HelveticaNeue" size:16]];

PaymentUILabelConfig *labelExpiredDate = [[PaymentUILabelConfig alloc]
initWithText:@"Expiry date" textColor:UIColor.blackColor textFont:[UIFont
fontWithName:@"HelveticaNeue" size:16]];

PaymentUILabelConfig *labelCVC = [[PaymentUILabelConfig alloc]
initWithText:@"Security code"
textColor:UIColor.blackColor textFont:[UIFont fontWithName:@"HelveticaNeue" size:16]];

PaymentUILabelConfig *infoPayment = [[PaymentUILabelConfig alloc]
initWithText:@"Payment info"
textColor:UIColor.blackColor textFont:[UIFont fontWithName:@"HelveticaNeue" size:16]];

NSMutableDictionary *extraParams = [[NSMutableDictionary alloc]
initWithObjectsAndKeys:@{ @”Extra1” : “valor1”, @”Extra2” : “valor2”};

TPVInAppUIConfig *config = [TPVInAppUIConfig new];
[config setCancelButtonText:@"Cancel"];
[config setContinueButtonText:@"Continue"];
[config setNumberCardLabel:labelCardNumber];
[config setExpireDateLabel:labelExpiredDate];
[config setCVVLabel:labelCVC];
[config setInfoPaymentLabel:infoPayment];
[config setLogoWithLogo:[UIImage imageNamed:@"appleIcon"]];
[config setBackgroundImageViewWithImage:[UIImage imageNamed:@"background"]];
[config setBackgorundViewColorWithColor:UIColor.lightGrayColor];

//Se crea el objeto de pago 

DirectPaymentViewController *pay = [[DirectPaymentViewController alloc]
initWithOrderNumber:@"" amount: amount productDescription:@""
transactionType:TransactionTypeNormal identifier:@"" extraParams: extraParams
uiViewConfig:config];

pay.delegate = self;

[self presentViewController:pay animated:true completion:nil];
				 	
				

Pago WebView

Las operaciones de pago WebView, se realizan mediante la propia web del comercio, con la única diferencia de que la vista se encuentra adaptada para dispositivos móviles. Este tipo de pago soporta tanto pagos normales como pagos por referencia.

  • orderNumber: Código alfanumérico identificativo de la operación que tiene que ser único. [OBLIGATORIO]
  • amount: Importe de la operación.
  • identifier: En caso de no indicar nada realiza un pago normal, en caso de introducir una referencia valida se realiza un pago con referencia, y por último, para realizar un pago con solicitud de referencia hay que utilizar el valor de la constante TPVVConfiguration.shared.REQUEST_REFERENCE. [OPCIONAL]
  • productDescription: Descripción del pago. [OPCIONAL]
  • transactionType: Utilizando las constantes definidas en TPVVConstants. [OBLIGATORIO]
    • Normal: TPVVConstants.PAYMENT_TYPE_NORMAL
    • Preautorización: TPVVConstants.PAYMENT_TYPE_PREAUTHORIZATION
    • Tradicional: TPVVConstants.PAYMENT_TYPE_TRADITIONAL
    • Autenticación: TPVVConstants.PAYMENT_TYPE_AUTHENTICATION
    • Normal: TransactionTypeNormal;
    • Preautorización:TransactionTypePreauthorization;
    • Tradicional:TransactionTypeTraditional;
    • Autenticación:TransactionTypePaymentTypeAuthentication;
  • extraParams: Diccionario de variables con clave-valor. En caso de querer utilizar parámetros adicionales en la operación se deben introducir tantas como se desee; en caso contrario, dejar vacío. [OPCIONAL]
  • Idioma: Para los lenguajes hay que indicar un código de idioma válido, en caso de no indicar nada se configura por defecto en español.
    									
    TPVVConfiguration.shared.appMerchantConsumerLanguage = "X"
    
    TPVVConfiguration.shared.appMerchantConsumerLanguage = @"X";
  • Redirección a las URl de resultado: Existe la posibilidad de redireccionar a una URL definida por el desarrollador tras realizar la operación. Una para el caso en que la operación se realice correctamente y otra en caso de error.
    									
    TPVVConfiguration.shared.appURLOK = "XXX"
    TPVVConfiguration.shared.appURLKO = "XXX"
    
    TPVVConfiguration.shared.appURLKO = @"XXX"; TPVVConfiguration.shared.appURLOK = @"XXX";

A continuación se presenta un ejemplo en Swift y en Objective.
				 			
let wpView = WebViewPaymentController(orderNumber: order, amount: amount.floatValue,
productDescription: productDescription, transactionType: operationTypeValue, identifier:””,
extraParams: extraParams)

wpView.delegate = self

present(wpView, animated: true, completion: nil)
							
						

Para poder obtener la respuesta de la operación deberá implementar el siguiente delegado WebViewPaymentResponseDelegate

				 			
extension WebViewPaymentTableViewController: WebViewPaymentResponseDelegate {

func responsePaymentKO(response: (WebViewPaymentResponseKO)) {
	}

func responsePaymentOK(response: (WebViewPaymentResponseOK)) {
	}
}
							
						
				 	
WebViewPaymentController *pay = [[WebViewPaymentController alloc] initWithOrderNumber:@"" amount:
amount productDescription:@"" transactionType:TransactionTypeNormal identifier:@"" extraParams:
extraParams];

pay.delegate = self;

[self presentViewController:pay animated:true completion:nil];


				 	
				

Para poder obtener la respuesta de la operación deberá implementar el siguiente delegado WebViewPaymentResponseDelegate

				 			
@interface ViewController () <WebViewPaymentResponseDelegate>
@end
- (void)responsePaymentKOWithResponse:(WebViewPaymentResponseKO *)response{
	}

- (void)responsePaymentOKWithResponse:(WebViewPaymentResponseOK *)response {
	}
							
						

Respuesta de la operación

En función del resultado de la operación recibiremos un objeto ResultResponse con los datos de la operación o un objeto del tipo ErrorResponse con el código de error y la descripción.

ResultResponse

						
public var code: Int
public var desc: String
public var Ds_Card_Country: String
public var Ds_Amount:String
public var Ds_MerchantData:String
public var Ds_Currency:String
public var Ds_Order:String
public var Ds_MerchantCode:String
public var Ds_Card_Type:String
public var Ds_Card_Brand:String
public var Ds_AuthorisationCode:String
public var Ds_Language:String
public var Ds_SecurePayment:String
public var Ds_Response:String
public var Ds_TransactionType:String
public var Ds_Terminal:String
public var Ds_ExpiryDate:String
public var Ds_Merchant_Identifier:String
public var Ds_Extra_Params:[String:String]

						
					
				 	
@interface DirectPaymentResponseOK : NSObject
@property (nonatomic) NSInteger code;
@property (nonatomic, copy) NSString * _Nonnull desc;
@property (nonatomic, copy) NSString * _Nonnull Ds_Card_Country;
@property (nonatomic, copy) NSString * _Nonnull Ds_Amount;
@property (nonatomic, copy) NSString * _Nonnull Ds_MerchantData;
@property (nonatomic, copy) NSString * _Nonnull Ds_Currency;
@property (nonatomic, copy) NSString * _Nonnull Ds_Order;
@property (nonatomic, copy) NSString * _Nonnull Ds_MerchantCode;
@property (nonatomic, copy) NSString * _Nonnull Ds_Card_Type;
@property (nonatomic, copy) NSString * _Nonnull Ds_Card_Brand;
@property (nonatomic, copy) NSString * _Nonnull Ds_AuthorisationCode;
@property (nonatomic, copy) NSString * _Nonnull Ds_Language;
@property (nonatomic, copy) NSString * _Nonnull Ds_SecurePayment;
@property (nonatomic, copy) NSString * _Nonnull Ds_Response;
@property (nonatomic, copy) NSString * _Nonnull Ds_TransactionType;
@property (nonatomic, copy) NSString * _Nonnull Ds_Terminal;
@property (nonatomic, copy) NSString * _Nonnull Ds_ExpiryDate;
@property (nonatomic, copy) NSString * _Nonnull Ds_Merchant_Identifier;
@property (nonatomic, copy) NSMutableDictionary * _Nonnull Ds_Extra_Params;
				 	
				

ErrorResponse

						
public var code:Int
public var desc:String
						
					
				 	
@interface DirectPaymentResponseKO : NSObject
@property (nonatomic) NSInteger code;
@property (nonatomic, copy) NSString * _Nonnull desc;