Integración inApp para dispositivos iOS

En esta sección, se explicará como realizar la integración vía inApp en un desarrollo para dispositivos Android. Para realizar esta integración, puedes valerte de la SDK inApp que encontrarás en la página de detalles de la integración.

Configuración

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

  1. En primer lugar, integrar la librería en el proyecto.
    • Marcar la opción «Copy items if needed».
  1. Añadir los binarios al proyecto: En el apartado de «Frameworks, Libraries and Embedded Content’ del Taget, seleccionar «Embed & Sign».
  1. Importar TPVVInLibrary al proyecto.
    • En SWIFT: import TVVLibrary
    • En Objective: #import <TPVVInLibrary/TPVVInLibrary-Swift.h>
  2. Opción Enable Bitcode: Para una correcta compilación y ejecución de la App, es recomendable acceder a la opción de «Enable Bitcode» y ponerle a «NO». Esta opción podrá encontrarla en el Build Settings del correspondiente Target.
  3. Publicar en el App Store: Para poder realizar la subida de la aplicación en el App Store, debes tener la librería integrada en el framework para dispositivos móviles físicos. Además son necesarios dos requisitos:
    • Utilizar una versión de XCode igual o superior a la 11.1 para el desarrollo.
    • Utilizar como base el SDK de iOS 13.
  4. 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 estos 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. Este parámetro es obligatorio.
  • amount: Importe de la operación. Este parámetro es obligatorio.
  • transactionType: Tipo de transacción a realizar, se debe especificar usando las definidas en TPVVConstants (véase la tabla más adelante). Este parámetro es obligatorio.
  • uiViewConfig: Personalización de la vista de pago directo. Este parámetro es obligatorio.
  • identifier: Referencia de pago. En caso de no indicar nada, realiza un pago normal. En caso de introducir una referencia válida, se realiza un pago por referencia (ver documentación en el apartado de Tokenización, Pagos 1-clic y Operativa COF). Si se quiere solicitar la creación de una referencia, se debe usar el valor de la constante TPVVConfiguration.shared.REQUEST_REFERENCE.
  • productDescription: Descripción del pago.
  • extraParams: Diccionario de valores clave-valor: En caso de querer utilizar parámetros adicionales en la operación, se pueden introducir aquí.

El parámetro TPVVConstants puede tener los siguientes valores:

  • 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;

Personalización

Es posible personalizar algunos aspectos de la pantalla de pago directo. Para ello, hay que llevar a cabo la configuración usando el objeto TPVInAppUIConfig:

  • logo: Logo mostrado.
  • setBackgroundViewColor: Color de fondo de la pantalla.
  • setBackgroundImageView: Imagen de fondo de la pantalla.
  • setCancelButtonText: Texto del botón de cancelar.
  • setContinueButtonText: Texto del botón de continuar.
  • setNumberCardLabel: Texto, color y fuente del campo de número de tarjeta.
  • setExpireDateLabel: Texto, color y fuente del campo de fecha de caducida.
  • setCVVLabel: Texto, color y fuente del campo del código de CVV.
  • setInfoPaymentLabel: Texto, color y fuente del texto descriptivo.

Un ejemplo de personalización se puede ver a continuació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

Para realizar un pago directo, es necesario haber configurado previamente los parámetros obligatorios en el objeto TPVVConfiguration. Tras fijar estos 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. Este parámetro es obligatorio.
  • amount: Importe de la operación. Este parámetro es obligatorio.
  • transactionType: Tipo de transacción a realizar, se debe especificar usando las definidas en TPVV Constants. Este parámetro es obligatorio.
  • uiViewConfig: Personalización de la vista de pago directo. Este parámetro es obligatorio.
  • identifier: Referencia de pago. En caso de no indicar nada, realiza un pago normal. En caso de introducir una referencia válida, se realiza un pago por referencia (ver documentación en el apartado de Tokenización, Pagos 1-clic y Operativa COF). Si se quiere solicitar la creación de una referencia, se debe usar el valor de la constante TPVVConfiguration.shared.REQUEST_REFERENCE.
  • productDescription: Descripción del pago.
  • extraParams: Diccionario de valores clave-valor: En caso de querer utilizar parámetros adicionales en la operación, se pueden introducir aquí.
  • Idioma: Para los lenguajes, hay que indicar un código de idioma válido. En caso de no indicar ninguno, se utiliza por defecto el espaol.
  • Redirección a las URL de resultado: Existe la posibilidad de redireccionar a una URL definida por el desarrollador tras realizar una operación. Una para el caso en el que la operación se realice correctamente y otra para cuando se produzca un error.

El parámetro TPVVConstants puede tener los siguientes valores:

  • 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;

A continuacióon se presenta un ejemplo en Swift y 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 de tipo Error Response 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;