La tokenización asegura que ningún dato
sensible de la tarjeta necesite estar en su servidor para que su
integración pueda operar de manera compatible con PCI. Si
alguna información de la tarjeta pasara por, o se
llegase a almacenar en su servidor, usted sería
responsable de cualquier penalidad o auditoría que
imponga PCI DSS.
Github Repository
===================
Afirme ShieldGate JS es una biblioteca que permite a los
desarrolladores conectar fácilmente con el API de
TARJETAS DE CRÉDITO de Afirme ShieldGate.
Revise el ejemplo funcionando
Instalación
Primero necesitas incluir jQuery y los archivos
payment_stable.min.js
y
payment_stable.min.css
dentro de tu página
web especificando "UTF-8" como charset.
<script src="https://code.jquery.com/jquery-1.11.3.min.js" charset="UTF-8"></script>
<link href="https://cdn.shieldgate.mx/ccapi/sdk/payment_stable.min.css" rel="stylesheet" type="text/css" />
<script src="https://cdn.shieldgate.mx/ccapi/sdk/payment_stable.min.js" charset="UTF-8"></script>
Uso
Utilizando el Form de Afirme ShieldGate
Cualquier elemento con la clase
payment-form
será automáticamente
convertido en una entrada de tarjeta de crédito
básica con fecha de vencimiento y el check de CVC.
La manera más fácil de comenzar con la
AfirmeShieldGateForm es insertando el siguiente pedazo de
código:
<div class="payment-form" id="my-card" data-capture-name="true"></div>
Para obtener el objeto Card
de la instancia
PaymentForm
, pregunte al formulario por su
tarjeta.
let myCard = $('#my-card');
let cardToSave = myCard.PaymentForm('card');
if(cardToSave == null){
alert("Invalid Card Data");
}
Si la tarjeta (Card
) regresada es null, el estado
de error mostrará los campos que necesitan ser
arreglados.
Una vez que obtengas un objeto no null de la tarjeta
(Card
) del widget, podrás llamar
addCard.
Biblioteca Init
Siempre debes inicializar la biblioteca.
/**
* Init library
*
* @param env_mode `prod`, `stg`, `local` para cambiar ambiente. Por defecto es `stg`
* @param client_app_code proporcionado por Afirme ShieldGate.
* @param client_app_key proporcionado por Afirme ShieldGate.
*/
Payment.init('stg', 'CLIENT_APP_CODE', 'CLIENT_APP_KEY');
addCard Agregar una Tarjeta
La función addCard convierte los datos confidenciales
de una tarjeta, en un token que puede pasar de forma segura a
su servidor, para realizar el cobro al usuario.
Esta funcionalidad consume el servicio de nuestro API pero de
manera segura para comercios que no cuentan con
certificación PCI.
Aquí
podras encontrar la descripción de cada campo en la
respuesta.
/*
* @param uid Identificador del usuario. Este es el id que usas del lado de tu aplicativo.
* @param email Email del usuario para iniciar la compra. Usar el formato válido para e-mail.
* @param card La tarjeta que se desea tokenizar.
* @param success_callback Funcionalidad a ejecutar cuando el servicio de la pasarela responde correctamente. (Incluso si se recibe un estado diferente a "valid")
* @param failure_callback Funcionalidad a ejecutar cuando el servicio de la pasarela responde con un error.
*/
Payment.addCard(uid, email, cardToSave, successHandler, errorHandler);
let successHandler = function(cardResponse) {
console.log(cardResponse.card);
if(cardResponse.card.status === 'valid'){
$('#messages').html('Tarjeta correctamente agregada<br>'+
'Estado: ' + cardResponse.card.status + '<br>' +
"Token: " + cardResponse.card.token + "<br>" +
"Referencia de transacción: " + cardResponse.card.transaction_reference
);
}else if(cardResponse.card.status === 'review'){
$('#messages').html('Tarjeta en revisión<br>'+
'Estado: ' + cardResponse.card.status + '<br>' +
"Token: " + cardResponse.card.token + "<br>" +
"Referencia de transacción: " + cardResponse.card.transaction_reference
);
}else if(cardResponse.card.status === 'pending'){
$('#messages').html('Tarjeta pendiente de aprobar<br>'+
'Estado: ' + cardResponse.card.status + '<br>' +
"Token: " + cardResponse.card.token + "<br>" +
"Referencia de transacción: " + cardResponse.card.transaction_reference
);
}else{
$('#messages').html('Error<br>'+
'Estado: ' + cardResponse.card.status + '<br>' +
"Mensaje: " + cardResponse.card.message + "<br>"
);
}
submitButton.removeAttr("disabled");
submitButton.text(submitInitialText);
};
let errorHandler = function(err) {
console.log(err.error);
$('#messages').html(err.error.type);
submitButton.removeAttr("disabled");
submitButton.text(submitInitialText);
};
El tercer argumento para el addCard es un objeto Card que
contiene los campos requeridos para realizar la
tokenización.
getSessionId
El Session ID es un parámetro que Afirme ShieldGate
utiliza para fines del antifraude. Llame este método si
usted desea recolectar la información del dispositivo
del usuario.
let session_id = Payment.getSessionId();
Una vez que tenga el Session ID, puedes pasarlo a tu servidor
para realizar el cargo al usuario.
PaymentForm Referencia Completa
Inserción Manual
Si desea alterar manualmente los campos utilizados por
PaymentForm para añadir clases adicionales, el
placeholder o id. Puedes rellenar previamente los campos del
formulario como se muestra a continuación.
Esto podría ser útil en caso de que desees
procesar el formulario en otro idioma (de forma
predeterminada, el formulario se representa en
español), o para hacer referencia a alguna entrada por
nombre o id.
Por ejemplo si desea mostrar el formulario en Inglés y
añadir una clase personalizada para el
card_number
<div class="payment-form">
<input class="card-number my-custom-class" name="card-number" placeholder="Card number">
<input class="name" id="the-card-name-id" placeholder="Card Holders Name">
<input class="expiry-month" name="expiry-month">
<input class="expiry-year" name="expiry-year">
<input class="cvc" name="cvc">
</div>
Seleccionar Campos
Puedes determinar los campos que mostrará el
formulario.
Field |
Description |
data-capture-name |
Input para nombre del Tarjetahabiente, requerido para
tokenizar
|
data-capture-email |
Input para email del usuario |
data-capture-cellphone |
Input para teléfono celular del usuario
|
data-icon-colour |
Color de los íconos |
data-use-dropdowns |
Utiliza una lista desplegable para establecer la fecha
de expiración de la tarjeta
|
data-exclusive-types |
Define los tipos de tarjetas permitidos
|
data-invalid-card-type-message |
Define un mensaje personalizado para mostrar cuando se
registre una tarjeta no permitida
|
El campo 'data-use-dropdowns' puede resolver el problema que
se presenta con la mascara de expiración en
dispositivos móviles antiguos.
Se integra en el form de manera simple, como se muestra a
continuación:
<div class="payment-form"
id="my-card"
data-capture-name="true"
data-capture-email="true"
data-capture-cellphone="true"
data-icon-colour="#569B29"
data-use-dropdowns="true">
Tipos de tarjetas específicos
Si deseas especificar los tipos de tarjetas permitidos en el
formulario, como Exito o Alkosto. Puedes configurarlo como en
el siguiente ejemplo: Cuando una tarjeta de un tipo no
permitido es capturado, el formulario se reinicia, bloqueando
las entradas y mostrando un mensaje
Tipo de tarjeta invalida para está
operación.
<div class="payment-form"
id="my-card"
data-capture-name="true"
data-exclusive-types="ex,ak"
data-invalid-card-type-message="Tarjeta invalida. Por favor ingresa una tarjeta Exito / Alkosto."
>
Revisa todos los
tipos de tarjetas
permitidos por Afirme ShieldGate.
Leyendo los Valores
PaymentForm proporciona funcionalidad que le permite leer los
valores del campo de formulario directamente con JavaScript.
Genera un elemento de PaymentForm y asigne un id único
(en este ejemplo my-card
)
<div class="payment-form" id="my-card" data-capture-name="true"></div>
El siguiente javascript muestra cómo leer cada valor
del formulario en variables locales.
let myCard = $('#my-card');
let cardType = myCard.PaymentForm('cardType');
let name = myCard.PaymentForm('name');
let expiryMonth = myCard.PaymentForm('expiryMonth');
let expiryYear = myCard.PaymentForm('expiryYear');
let fiscalNumber = myCard.PaymentForm('fiscalNumber');
Funciones
Para llamar a una función en un elemento PaymentForm,
sigue el patrón a continuación. Remplace el
texto 'function' con el nombre de la función que desea
llamar.
$('#my-card').PaymentForm('function')
Las funciones disponibles se enumeran a continuación
Function |
Description |
card |
Obtiene la tarjeta del objeto |
cardType |
Obtiene el tipo de tarjeta que se capturó
|
name |
Obtiene el nombre capturado |
expiryMonth |
Obtiene el mes de expiración de la tarjeta
|
expiryYear |
Obtiene el año de expiración de la tarjeta
|
fiscalNumber |
Obtiene el número fiscal del usuario /
cédula
|
Función CardType
La función cardType
devolverá una
cadena según el número de tarjeta ingresado. Si
no se puede determinar el tipo de tarjeta, se le dará
una cadena vacía.
Marcas permitidas
Github Repository
Instalación
Android Studio (o Gradle)
Agregue lo siguiente en build.gradle al final de repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Agregue esta linea a sus app's build.gradle
en la
seccion dependencies
implementation 'com.github.afirme-shieldgate:afirme-shieldgate-android:1.2.9'
ProGuard
Si usted está planeando optimiar su aplicación
con ProGuard, asegúrese de excluir los enlaces de
Afirme. Usted puede realizarlo añadiendo lo siguiente
al archivo proguard.cfg
de su app:
-keep class com.afirme.payment.** { *; }
Uso
Utilizando el CardMultilineWidget
Puede agregar un widget a sus aplicaciones que maneje
fácilmente los estados de la interfaz de usuario para
recopilar datos de la tarjeta.
Primero, añada el CardMultilineWidget a su layout.
<com.afirme.payment.view.CardMultilineWidget
android:id="@+id/card_multiline_widget"
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Ustede puede personalizar la vista con las siguientes
etiquetas:
app:shouldShowPostalCode="true"
app:shouldShowLogo="true"
app:shouldShowCardHolderName="true"
app:shouldShowScanCard="true"
Para usar cualquiera de estas etiquetas, deberá
habilitar el espacio de nombres XML de la aplicación en
algún lugar del layout.
xmlns:app="http://schemas.android.com/apk/res-auto"
Para obtener un objeto
Card
delCardMultilineWidget
, pidale
al widget su tarjeta.
Card cardToSave = cardWidget.getCard();
if (cardToSave == null) {
Alert.show(mContext,
"Error",
"Invalid Card Data");
return;
}
Si la Card
devuelta es null , se mostrarán
estados de error en los campos que deben corregirse.
Una vez que tenga un objeto Card
no null
regresado desde el widget, puede llamar a
addCard.
Inicializar Biblioteca
Usted debe inicializar la biblioteca en su Aplicación
en su primera actividad. You should initialize the library on
your Application or in your first Activity.
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import com.afirme.payment.Payment;
import com.afirme.payment.example.utils.Constants;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* Init library
*
* @param test_mode false to use production environment
* @param client_app_code provided by Afirme.
* @param client_app_key provided by Afirme.
*/
Payment.setEnvironment(Constants.IS_TEST_MODE, Constants.CLIENT_APP_CODE, Constants.CLIENT_APP_KEY);
// In case you have your own Fraud Risk Merchant Id
//Payment.setRiskMerchantId(1000);
// Note: for most of the devs, that's not necessary.
}
}
addCard
addCard convierte datos confidenciales de la tarjeta en un
token de un solo uso que puede pasar de forma segura a su
servidor para realizar el cobro al usuario.
Payment.addCard(mContext, uid, email, cardToSave, new TokenCallback() {
public void onSuccess(Card card) {
if(card != null){
if(card.getStatus().equals("valid")){
Alert.show(mContext,
"Card Successfully Added",
"status: " + card.getStatus() + "\n" +
"Card Token: " + card.getToken() + "\n" +
"transaction_reference: " + card.getTransactionReference());
} else if (card.getStatus().equals("review")) {
Alert.show(mContext,
"Card Under Review",
"status: " + card.getStatus() + "\n" +
"Card Token: " + card.getToken() + "\n" +
"transaction_reference: " + card.getTransactionReference());
} else {
Alert.show(mContext,
"Error",
"status: " + card.getStatus() + "\n" +
"message: " + card.getMessage());
}
}
//TODO: Create charge or Save Token to your backend
}
public void onError(PaymentError error) {
Alert.show(mContext,
"Error",
"Type: " + error.getType() + "\n" +
"Help: " + error.getHelp() + "\n" +
"Description: " + error.getDescription());
//TODO: Handle error
}
});
El primer argumento del addCard es mContext (Context). +
mContext. Context de la Actividad actual.
El segundo argumento del addCard es uid (Cadena). + uid
Identificador de comprador. Este es el identificador que usa
dentro de su aplicación; lo recibirá en las
notificaciones.
El tercer argumento del addCard es el email (Cadena). + email
Email del comprador
El cuarto argumento del addCard es un objeto de tipo Card. Un
objeto Card contiene los siguientes campos:
-
number: número de tarjeta como cadena sin
ningún separador, por ejemplo '4242424242424242'.
- holderName: nombre del tarjehabiente.
-
expMonth: entero que representa el mes de expiración
de la tarjeta, por ejemplo 12.
-
expYear: entero que represetna el año de
expiración de la tarjeta, por ejemplo 2019.
-
cvc: código de seguridad de la tarjeta, como cadena,
por ejemplo '123'.
- type: el tipo de tarjeta.
El quinto argumento tokenCallBack es un callback que usted
provee para manejar las respuestas recibidas de Afirme.
Deberá enviar el token a su servidor para procesar
onSuccess y notificar al usuario onError.
Aquí se muestra un ejemplo de implementación de
callback del token:
Payment.addCard(
mContext, uid, email, cardToSave,
new TokenCallback() {
public void onSuccess(Card card) {
// Send token to your own web service
MyServer.chargeToken(card.getToken());
}
public void onError(PaymentError error) {
Toast.makeText(getContext(),
error.getDescription(),
Toast.LENGTH_LONG).show();
}
}
);
addCard
es una llamada asíncrona - regresa
inmediatamente e invoca el callback en el hilo de la interfaz,
cuando recibe una respuesta de los servidores de Afirme.
getSessionId
El Session ID es un parámetro que Afirme utiliza para
fines de antifraude. Llave esté método cuando
quiera recabar la información del dispositivo.
String session_id = Payment.getSessionId(mContext);
Una vez que tenga el Session ID, usted podrá pasarlo a
su servidor para realizar el cobro a su usuario.
Herramientas de validación del lado del Cliente
El objeto Card permite validar la información capturada
por el usuario antes de enviarla a Afirme.
validateNumber
Verifica que el número tenga el formato correcto y pase
el algoritmo de
Luhn.
validateExpiryDate
Comprueba que la fecha de expiración representa una
fecha real futura.
validateCVC
Comprueba si el número proporcionado podría ser
un código de verificación válido o no.
validateCard
Método que valida el número de tarjeta, la fecha
de expiración y el CVC.
Introducción a la aplicación de ejemplo de
Android
Nota: la aplicación requiere
Android SDK
y Gradle para coinstruir y
ejecutar.
Construyendo y Ejecutando la PaymentStore
Antes de que pueda pueda correr la aplicación
PaymentStore, ested necesita proveerla con las credenciales de
Afirme y un backend de muestra.
-
Si aún no cuenta con credenciales, pídalas a
su contancto en el equipo de Afirme.
-
Dirígase a
https://github.com/afirme-shieldgate/example-java-backend y
haga click en "Deploy to Heroku" (es posible que tengas que
registrarte para obtener una cuenta de Heroku como parte de
este proceso). Proporcione sus credenciales de servidor de
Afirme
SERVER_APP_CODE
y
SERVER_APP_KEY
en los campos "Env". Haga click
en "Deploy for Free".
- Abra el proyecto en Android Studio.
-
Reemplace las constantes
CLIENT_APP_CODE
y
CLIENT_APP_KEY
en Constants.java con sus
propias credenciales de Afirme.
-
Reemplace la variable
BACKEND_URL
en el archivo
Constants.java con la URL de la aplicación que Heroku
le proporciona (por ejemplo,"
https://my-example-app.herokuapp.com ")
- Ejecute el proyecto.
Nota importante: si solo tiene un APP_CODE, suponga que es su
SERVER_APP_CODE
. Por lo tanto, debe solicitar a
su contacto en el equipo de Afirme su
CLIENT_APP_CODE
.
Github Repository
Requerimientos
Version <= 1.4.x - iOS 9.0 or Later - Xcode 9
Version >= 1.5.x - iOS 9.0 or Later - Xcode 10
Dependencias:
Accelerate AudioToolbox AVFoundation CoreGraphics CoreMedia
CoreVideo Foundation MobileCoreServices OpenGLES QuartzCore
Security UIKit CommonCrypto (Just for version 1.4)
Project Configuration - ObjC in other linker
flags in target - lc++ in target other linker flags - Disable
Bitcode
INSTALACIÓN
Carthage
Si no tienes instalado, Instala la última
versión de
Carthage
Agrega esta línea en Cartfile:
git
"https://github.com/afirme-shieldgate/afirme-shieldgate-ios"
Beta Version:
git
"https://github.com/afirme-shieldgate/afirme-shieldgate-ios"
"master"
ObjC configuración
Set ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
In Build Phases -> Embed Frameworks Uncheck "Copy Only When
Installing"
Instalación manual(Recomendada)
Este SDK es un framework dinámico (Información). Debes genera una versión para el target deseado
(simulator and device). Sigue estos pasos para crear una
versión universal .framework file.
- Compila el SDK & crea .framework files
Esto creara un folder /build donde estarán los archivos
.framework necesarios (simulator, iphoneos & universal)
-
Con el Target PaymentSDK seleccionado, compila el proyecto
para cualquier simulador iOS.
-
Con el Target PaymentSDK seleccionado, compila el proyecto
para Any iOS device
-
Cont el Target PaymentSDK-Universal, compila el proyecto en
any iOS device.
-
Ingresa a la carpeta Products -> PaymentSDK.framework
-> Show in finder
- Ingresa al directorio de PaymentSDK.framework, CMD+up
-
Se visualizarán 3 grupos, dentro del grupo
Release-iosuniversal, estará el PaymentSDK.framework
O si prefieres puedes descargar un compilado .framework desde
Releases
-
Arrastra el PaymentSDK.framework a tu proyecto check "Copy
Files if needed".
En Target->General : Agrega PaymentSDK.framework a
Frameworks, Libraries, and Embedded Content
En Target->Build Settings : Validate Workspace debe ser YES
- Actualiza el Build Settings with
Set ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
En Build Phases -> Embed Frameworks Uncheck "Copy Only When
Installing"
-
Si usas la versión Universal y quieres subir a la
appstore. Agrega Run Script Phase: Target->Build Phases
-> + ->New Run Script Phase. Agrega lo
siguiente.Asegurate que el build phase esta agregado
después Embed Frameworks phase.
bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/PaymentSDK.framework/install_dynamic.sh"
Uso
Importing Swift
import PaymentSDK
Configura tu app inside
AppDelegate->didFinishLaunchingWithOptions. Debes usar el
Payment Client Credentials (Just ADD enabled)
PaymentSDKClient.setEnvironment("AbiColApp", secretKey:
"2PmoFfjZJzjKTnuSYCFySMfHlOIBz7", testMode: true)
Tipos de implementacion
Hay tres formas de presentar el Add Card Form:
- Como un Widget en un Custom View
-
Como un Viewcontroller Pushed a tu UINavigationController
- Como un ViewController presentado en Modal
El AddCard Form incluye: Card io scan, y validación de
tarjeta.
Show AddCard Widget - Agregar Tarjeta
Para crear un widget, debe crear un PaymentAddNativeController
desde PaymentSDKClient. Luego agréguelo a la UIView que
será el contenedor del Formulario de Pago. La altura
mínima debe ser de 300 px y la pantalla completa como
ancho (270 px sin el logotipo de pago)
Nota:
Cuando está utilizando el Formulario de Pago como
Widget. El ViewController personalizado del Cliente
será responsable del diseño y la
sincronización (también conocido como Spinner
o loader).)
El widget puede escanear con la cámara de su
teléfono los datos de la tarjeta de crédito
usando card.io.
let paymentAddVC = self.addPaymentWidget(toView: self.addView, delegate: nil, uid:UserModel.uid, email:UserModel.email)
Objc
[self addPaymentWidgetToView:self. addView delegate:self uid:@"myuid" email:@"myemail"];
Recupere la tarjeta de crédito válida de
PaymentAddNativeController (Widget):
if let validCard = paymentAddVC.getValidCard() // CHECK IF THE CARD IS VALID, IF THERE IS A VALIDATION ERROR NIL VALUE WILL BE RETURNED
{
sender?.isEnabled = false
PaymentSDKClient.createToken(validCard, uid: UserModel.uid, email: UserModel.email, callback: { (error, cardAdded) in
if cardAdded != nil // handle the card status
{
}
else if error != nil //handle the error
{
}
})
}
Objc
PaymentCard *validCard = [self.paymentAddVC getValidCard];
if (validCard != nil) // Check if it is avalid card
{
[PaymentSDKClient add:validCard uid:USERMODEL_UID email:USERMODEL_EMAIL callback:^(PaymentSDKError *error, PaymentCard *cardAdded) {
[sender setEnabled:YES];
if(cardAdded != nil) // handle the card status
{
}
else //handle the error
{
}
}];
}
Pushed to your NavigationController
self.navigationController?.pushPaymentViewController(delegate: self, uid: UserModel.uid, email: UserModel.email)
Objc
[self.navigationController pushPaymentViewControllerWithDelegate:self uid:@"myuid" email:@"mymail@mail.com"]`;
Present as Modal
self.presentPaymentViewController(delegate: self, uid: "myuid", email: "myemail@email.com")
Objc
[self presentPaymentViewControllerWithDelegate:self uid:@"myuid" email:@"myemail@email.com"];
PaymentCardAddedDelegate Protocol
Si presenta el formulario como un controlador de vista (push y
modal), debe implementar el protocolo
PaymetnezCardAddedDelegate para manejar los estados o acciones
dentro del controlador de vista. Si está utilizando la
implementación de Widget, puede manejar las acciones
como se describe anteriormente.
protocol PaymentCardAddedDelegate
{
func cardAdded(_ error:PaymentSDKError?, _ cardAdded:PaymentCard?)
func viewClosed()
}
func cardAdded(_ error:PaymentSDKError?, _
cardAdded:PaymentCard?)
is called whenever there is an error or a card is added.
func viewClosed()
Whenever the modal is closed
Scan Card
Si quieres hacer el escaneo tú mismo, usa card.io
PaymentSDKClient.scanCard(self) { (closed, number, expiry, cvv, card) in
if !closed // user did not closed the scan card dialog
{
if card != nil // paymentcard object to handle the data
{
}
})
-ObjC
[PaymentSDKClient scanCard:self callback:^(BOOL userClosed, NSString *cardNumber, NSString *expiryDate, NSString *cvv, PaymentCard *card) {
if (!userClosed) //user did not close the scan card dialog
{
if (card != nil) // Handle card
{
}
}
}];
Add Card (Only PCI Integrations)
Para integraciones de formularios personalizados Campos
obligatorios + cardNumber: número de tarjeta como una
cadena sin separadores, p. 4111111111111111. + titular de la
tarjeta: nombre del titular de la tarjeta. + expuryMonth:
número entero que representa el mes de vencimiento de
la tarjeta, 01-12. + expirationYear: número entero que
representa el año de vencimiento de la tarjeta, p.
2020. + cvc: código de seguridad de la tarjeta en forma
de cadena, p. '123'.
let card = PaymentCard.createCard(cardHolder:"Gustavo Sotelo", cardNumber:"4111111111111111", expiryMonth:10, expiryYear:2020, cvc:"123")
if card != nil // A valid card was created
{
PaymentSDKClient.add(card, uid: "69123", email: "test@shielgate.mx", callback: { (error, cardAdded) in
if cardAdded != nil
{
//the request was succesfully sent, you should check the cardAdded status
}
})
}
else
{
//handle invalid card
}
ObjC
PaymentCard *validCard = [PaymentCard createCardWithCardHolder:@"Gustavo Sotelo" cardNumber:@"4111111111111111" expiryMonth:10 expiryYear:2020 cvc:@"123"];
if (validCard != nil) // Check if it is avalid card
{
[PaymentSDKClient add:validCard uid:USERMODEL_UID email:USERMODEL_EMAIL callback:^(PaymentSDKError *error, PaymentCard *cardAdded) {
[sender setEnabled:YES];
if(cardAdded != nil) // handle the card status
{
}
else //handle the error
{
}
}];
}
Secure Session Id
Las acciones de débito deben implementarse en su propio
backend. Por razones de seguridad, proporcionamos una
generación de identificación de sesión
segura, para sistemas de fraude de cuentas. Esto
recopilará la información del dispositivo en
segundo plano.
let sessionId = PaymentSDKClient.getSecureSessionId()
Objc
NSString *sessionId = [PaymentSDKClient getSecureSessionId];
Utils
Get Card Assets
let card = PaymentCard.createCard(cardHolder:"Gustavo Sotelo", cardNumber:"4111111111111111", expiryMonth:10, expiryYear:2020, cvc:"123")
if card != nil // A valid card was created
{
let image = card.getCardTypeAsset()
}
Get Card Type (Just Amex, Mastercard, Visa, Diners)
let card = PaymentCard.createCard(cardHolder:"Gustavo Sotelo", cardNumber:"4111111111111111", expiryMonth:10, expiryYear:2020, cvc:"123")
if card != nil // A valid card was created
{
switch(card.cardType)
{
case .amex:
case .masterCard:
case .visa:
case .diners:
default:
//not supported action
}
}
Customize Look & Feel
You can customize widget colors sample
paymentAddVC.baseFontColor = .white
paymentAddVC.baseColor = .green
paymentAddVC.backgroundColor = .white
paymentAddVC.showLogo = false
paymentAddVC.baseFont = UIFont(name: "Your Font", size: 12) ?? UIFont.systemFont(ofSize: 12)
Los elementos personalizables del formulario son los
siguientes:
-
baseFontColor
: El color de la fuente de los
campos
-
baseColor
: Color de las líneas y
títulos de los campos
-
backgroundColor
: color de fondo del widget
-
showLogo
: habilitar o deshabilitar el logotipo
de pago
baseFont
: Fuente de todo el formulario
-
nameTitle
: cadena para el marcador de
posición personalizado para el campo de nombre
-
cardTitle
: cadena para el marcador de
posición personalizado para el campo de la tarjeta
-
invalidCardTitle
para el mensaje de error
cuando un número de tarjeta no es válido
Building and Running the PaymentSwift
Antes de poder ejecutar la aplicación PaymentStore,
debe proporcionarle su APP_CODE, APP_SECRET_KEY y un backend
de muestra.
-
Si aún no lo ha hecho y APP_CODE y APP_SECRET_KEY,
solicítelo a su contacto en el Equipo de pagos.
-
Reemplace
PAYMENT_APP_CODE
y
PAYMENT_APP_SECRET_KEY
en su AppDelegate como
se muestra en la sección Uso
-
Diríjase a
https://github.com/afirme-shieldgate/example-java-backend y
haga clic en "Implementar en Heroku" (es posible que deba
registrarse para obtener una cuenta de Heroku como parte de
este proceso). Proporcione los campos APP_CODE y
APP_SECRET_KEY de sus credenciales de servidor de Paymentz
en 'Env'. Haga clic en "Implementar gratis".
-
Reemplace la variable
BACKEND_URL
en
MyBackendLib.swift (dentro de la variable myBackendUrl) con
la URL de la aplicación que Heroku le proporciona
(por ejemplo, "https://my-example-app.herokuapp.com")
-
Reemplace las variables (uid y correo electrónico) en
UserModel.swift con su propia referencia de
identificación de usuario