.NET

Sr pago ofrece multiples soluciones para sus clientes, para simplificar las soluciones más comunes, sr pago ha hecho un SDK que facilita la implementación

Un SDK por sus siglas en inglés (Software Development Kit) facilitará las tareas de desarrollo. En el caso de Sr Pago hará más rápido el desarrollo, sin embargo, antes de empezar a usarlo es necesario configurarlo

Pre-requisitos

Haber registrado la aplicación en las plataformas de Sr Pago

Proceso

Opción 1 Usando NuGet

1.1 Desde la linea de comandos, adentro de la carpeta del proyecto usa el comando

Nuget install SrPagoSDK

1.2 Desde la consola de administrador de paquetes Nuget:

Install - Package SrPagoSDK

1.3 Desde Visual Studio

  1. Abrir el explorador de soluciones
  2. Dar click derecho en un proyecto de su solución
  3. Dar click en Administrar Paquetes Nuget (Imagen 1)
    Imagen 1. Administrar paquetes Nuget de un proyecto
    Imagen 1. Administrar paquetes Nuget de un proyecto

     

  4. Buscar SrPagoSDK
    Imagen 2. Búsqueda de paquete
    Imagen 2. Búsqueda de paquete

     

  5. Dar click en el paquete SrPagoSDK, seleccionar la versión que necesite y dar click en Instalar

    Imagen 3. Instalación de paquete
    Imagen 3. Instalación de paquete

Con la instalación del paquete SrPagoSDK, se instala la dependencia BouncyCastle.Cripto.

Opción 2 Instalación manual

Para iniciar con la instalación del SDK de .Net se requiere descargar desde el siguiente link:

Descargar SDK .NET

1. Los enlaces requieren la siguiente librería para funcionar correctamente:

  • BouncyCastle.Crypto.dll Incluida en el paquete SrPago_NET

Para Iniciar

2. Seleccionar la opción Agregar Proyecto Existente

Imagen 5 . Agregar Proyecto Existente
Imagen 4. Agregar Proyecto Existente

 

3. Deberá agregar una nueva referencia (Imagen 5)

Imagen 6. Agregar referencia
Imagen 5. Agregar referencia

 

4. Ingresar en Project/ Solution y seleccionar el archivo que fue descargado de nombre SrPago.

Imagen 6. Seleccionar referencia a instalar

Procesar pago

Antes de procesar un pago, es necesario contar con la llaves Privadas que puede obtener directamente en su cuenta Sr.Pago en la sección Aplicaciones.

Dependencias

using SrPagoApi;
using SrPagoApi.Response;

Configura tu Key + Secret

SrPago.ApiKey = "APPLICATION KEY";

SrPago.ApiSecret = "APPLICATION SECRET";

SrPago.LiveMode = false;
DefiniciónTipoDescripción
SrPago.ApiKey

REQUERIDO
StringLlave de la aplicación
SrPago.ApiSecret

REQUERIDO
StringSecret de la aplicación
SrPago.LiveModeBooleanDetermina si apunta a ambiente Sandbox o Productivo

FALSE : Ambiente Sandbox
TRUE : Ambiente productivo

 

Configurar pago

// Parámetros de cobro

Dictionary<string, object> chargeParams = new Dictionary<string, object>();

chargeParams.Add("amount", 10);

chargeParams.Add("description", "Ejemplo de cobro con tarjeta");

chargeParams.Add("reference", "ABC123");

chargeParams.Add("source", token);

chargeParams.Add("metadata","{JSON METADATA}");

chargeParams.Add("connect_account","[email protected]");

chargeParams.Add("connect_fees", new List<Dictionary<string, object>> { new Dictionary<string, object> {{ "account", "[email protected]" }, { "amount", 15 }, { "reference", "34" }, { "description", "Comisión por uso de plataforma" }} });


DefiniciónTipoDescripción
amount

REQUERIDO
FloatMonto a procesar
description

OPCIONAL
StringDescripción del cobro
reference

OPCIONAL
booleanReferencia de cobro

source

REQUERIDO
stringToken generado por proceso de Tokenización, ver más librerías de tokenización

metadata

OPCIONAL
stringEs un string en formato JSON que permite conocer más información del tarjetahabiente para prevenir fraude


Ver más en sección “Metadata”

connect_account

OPCIONAL
stringUsuario de connect al que se asignará el pago
connect_fees

REQUERIDO SI EXISTE PARÁMETRO connect_account
List <Dictionary<string,object>>
Lista con los usuarios que obtendrán una comisión sobre el cobro, en caso de utilizar connect.

Los usuarios y el monto a recibir serán puestos en un diccionario con las siguientes claves:

account: Cuenta Sr. Pago que recibirá la comisión


amount: Monto de la comisión

reference: Referencia de la comisión

description: Descripción de la comisión

 

Generar el cobro

Para generar el cobro es necesario crear una instancia de ChargesService e invocar el método ChargesService.Create con los parámetros previamente configurados

ChargesService charges = new ChargesService();
ChargesResponse charge = await charges.Create(chargeParams);

if (charge.success)
{
    //Exito
    Operation result = charge.result;
}
else
{
    //Error
    string code = charge.error.code;
    string message = charge.error.message;
}

 

Generar cancelación

Para generar el cobro es necesario crear una instancia de ChargesService e invocar el método ChargesService.Reversal, para este método solo es requerido el identificador de la transacción.

DefiniciónTipoDescripción
transaction

REQUERIDO
StringTransacción a cancelar
ChargesService charges = new ChargesService();
ChargesResponse charge = await charges.Reversal(transaction);
if (charge.success)
{
    //Exito
    Operation result = charge.result;
}
else
{
    //Error
    string code = charge.error.code;
    string message = charge.error.message;
}

 

Obtener transacciones

Para obtener el listado de transacciones es necesario crear una instancia de ChargesService e invocar el método ChargesService.List, este método recibe un diccionario de clave valor tipo string donde los filtros para obtener el listado pueden obtener los siguientes valores:

DefiniciónTipoDescripción
limitintMax items (100)
offsetintStart index
start_dateDateYYYY-MM-DD start date
end_dateDateYYYY-MM-DD end date
payment_method String (3)Method ('OXX', 'POS', 'TRA')

OXX = Cobro en tienda de autoservicio

POS = PAGO CON TARJETA

TRA = TRANSFERENCIA A CUENTA
card_type String (4)
'VISA'
'MAST'
'AMEX'
'CRNT'
'OXXO'
'CIE'
'SEVE'
'EXTR'
'CHED'
'ELEK'
'COPP'
'FBEN'
'FESQ'
'TELE'
'SORI'

 

Una vez aplicados los filtros obtendremos la respuesta de la siguiente manera:

var parameters = new Dictionary<string, string>();
parameters.Add("start_date", DateTime.Now.ToString("yyyy-MM-dd"));
parameters.Add("end_date", DateTime.Now.ToString("yyyy-MM-dd"));
ChargesListResponse response = await service.List(parameters);
if (response.result.operations.Any())
{
    //Exito
    transaction = response.result.operations.First().transaction;
}
else
{
    //Error
    string message = “Operations not found”;
}

 

Clientes

Clase CustomerResponse

DefiniciónTipoDescripción
idstringId del cliente
namestringNombre del cliente
emailstringCorreo del cliente
activeboolIndica si el cliente se encuentra activo
date_createstringFecha de alta
cards
List <Dictionary>
Lista de tarjetas registradas del cliente

 

Clase CustomerCard

DefiniciónTipoDescripción
tokenstringToken de la tarjeta
holder_namestringNombre del tarjetahabiente
typestringTipo de tarjeta
numberstringÚltimos 4 dígitos de la tarjeta
expirationstringFecha de expiración de la tarjeta
country_codestringCódigo de país de la tarjeta
bank_namestringInstitución que expidió la tarjeta
fundingstringFondos de la tarjeta

Clase CustomerResult

DefiniciónTipoDescripción
totalintTotal de registo
limitintLímite de número de registros que regresa CustomerService
offsetintDesplazamiento en la lista
customerslistLista de clientes.

 

Alta


Los parámetros que se necesitan para dar de alta a un cliente son los siguientes,

Dictionary<string, object> customerParams = new Dictionary<string, object>

{

   { "name", name },

   { "email", email }

};

 

La función se invoca de la siguiente manera:

CustomerService customerService = new CustomerService();

CustomerResponse customer = await customerService.Create(customerParams);

 

Actualización

Los parámetros que se necesitan para actualizar un cliente son los siguientes,

string customerId = customerToken;

Dictionary<string, object> customerParams = new Dictionary<string, object>

{

   { "name", name },

   { "email", email }

};

La función se invoca de la siguiente manera:

CustomerService customerService = new CustomerService();

CustomerResponse customer = await customerService.Update(customerParams, customerId);

 

Consulta de cliente

Para consultar la información de un cliente es necesario crear una instancia de CustomerService e invocar la función CustomerService.Retrieve con el identificador de usuario como parámetro.

CustomerService customerService = new CustomerService();

CustomerResponse customer = await customerService.Retreive(id);

Consulta de lista de clientes

Para consultar la lista de clientes asociados a la cuenta del usuario, es necesario crear una instancia de CustomerService e invocar la función CustomerService.List.

Consulta de la lista completa

CustomerService customerService = new CustomerService();

CustomerListResponse customers = await customerService.List();

Consulta de la lista con límite de registros y offset

Para consultar la lista de clientes con un límite de registros y con offset, de deben configurar los parámetros de la siguiente forma:

var parameters = new Dictionary<string, string>
{

  {"limit", "20"},{"offset","60"}
};

Al invocar la función CustomerService.List, se deberán enviar los parámetros previamente configurados de la siguiente forma:

CustomerService customerService = new CustomerService();
CustomerListResponse customers = await customerService.List(parameters);

 

Tarjetas

Alta

Para dar de alta la tarjeta de un cliente es necesario crear una instancia de CustomerService e invocar la función CustomerService.PostCustomerCard con el token de la tarjeta para dar de alta y el identificador de usuario como parámetros.

CustomerService customerService = new CustomerService();

CustomerCardResponse customerCard = await customerService.PostCustomerCard(token, id);

Eliminar

Para eliminar la tarjeta de un cliente es necesario crear una instancia de CustomerService e invocar la función CustomerService.DeleteCustomerCard con el id del cliente y el id (campo token) de la tarjeta.

CustomerService customerService = new CustomerService();

CustomerCardResponse card = await customerService.DeleteCustomerCard(customerId, cardToken);

Consultar Tarjetas

Para consultar la lista de tarjetas guardadas de un cliente es necesario crear una instancia de CustomerService e invocar la función CustomerService.CardList con el id del cliente.

CustomerService customerService = new CustomerService();

CustomerCardResponse card = await customerService.CardList(customerId);

Cobro

Configuración de parámetros para el cobro

Dictionary<string, object> chargeParams = new Dictionary<string, object>

{

    { "amount", decAmount },

    { "description", description },

    { "reference", "ABC123" },

    { "source", token },

    { "metadata", mapToMetadata() }

};
DefiniciónTipoDescripción
amount

REQUERIDO
FloatMonto a procesar
description

OPCIONAL
StringDescripción del cobro
reference

OPCIONAL
booleanReferencia de cobro

source

REQUERIDO
stringIdentificador de la tarjeta del cliente
metadata

OPCIONAL
stringEs un string en formato JSON que permite conocer más información del tarjetahabiente para prevenir fraude


Ver más en sección “Metadata”

ChargesService charges = new ChargesService();

ChargesResponse charge = await charges.Create(chargeParams);


 

Tokenización

 

Librería Javascript

En su archivo aspx agregar la referencia a las librerías de SrPago (Imagen 8). Para obtener mayor detalle consulte la siguiente guía

Imagen 8. Tokenización
Imagen 8. Tokenización

Función de tokenización en servidor

En caso de integraciones que no sean web, como Xamarin, la tokenización se hace desde la aplicación utilizando la clase TokenService() de la siguiente manera:

var tokenService = new TokenService();
var tokenResponse = await tokenService.Create(card);

El parámetro card en TokenService.Create es una instancia de la clase Card, que tiene los siguientes atributos:

AtributosTipoDescripción
holder_namestringNombre del tarjetahabiente
number stringÚltimos 4 dígitos de la tarjeta
expiration stringFecha de expiración de la tarjeta (YYMM)
cvvstringCVV de la tarjeta

Metadata

El objeto metadata es un JSON que incluye temas relacionados a prevención de fraude, todos los elementos son opcionales, dependen del tipo de integración y la prevención que se requiera

{

    "salesTax": "160.00",

    "browserCookie": "session=743663;",

    "orderMessage": "No tocar el timbre, esperare afuera",

    "billing": {

        "billingEmailAddress": "[email protected]",

        "billingFirstName-D": "Juan",

        "billingMiddleName-D": "Antonio",

        "billingLastName-D": "Perez",

        "billingAddress-D": "Arkansas 16",

        "billingAddress2-D": "Insurgentes",

        "billingCity-D": "CDMX",

        "billingState-D": "DF",

        "billingPostalCode-D": "03810",

        "billingCountry-D": "MEX",

        "billingPhoneNumber-D": "87654321",

        "creditCardAuthorizedAmount-D": "2000.00"

    },

    "giftCards": {"giftCard": [

        {

            "giftCardNumber": "ABC1234567890",

            "giftCardAmount": "10.95"

        },

        {

            "giftCardNumber": "JKL09876543231",

            "giftCardAmount": "15.30"

        }

    ]},

    "coupons": {"coupon": [

        {

            "couponCode": "011293674310",

            "couponAmount": "50.00"

        },

        {

            "couponCode": "704757305096",

            "couponAmount": "70.00"

        }

    ]},

    "promotions": {"promotion": [

        {

            "promotionCode": "P0001",

            "promotionAmount": "100.00"

        },

        {

            "promotionCode": "P0002",

            "promotionAmount": "50.00"

        }

    ]},

    "certificates": {"certificate": [{

        "certificateUsedValue": "76",

        "certificatePromoCode": "07689",

        "certificatePinCode": "65588",

        "certificateLoyaltyMemberId": "88766445",

        "certificateLoyaltyProgramCode": "867e548",

        "certificateIssueReasonCode": "asdfg",

        "certificateIssueLocation": "web",

        "certificateIssueDate": "2015-07-03",

        "certificateInitialValue": "100",

        "certificateExpirationDate": "2016-01-01",

        "certificateId": "66769",

        "certificateCurrentValue": "24"

    }]},

    "member": {

        "memberLoggedIn": "Si/No",

        "memberId": "TBI23457",

        "membershipDate": "2010-02-12",

        "memberFullName": "Berenice Garcia Toral",

        "memberFirstName": "Berenice",

        "memberMiddleName": "Garcia",

        "memberLastName": "Toral",

        "memberEmailAddress": "[email protected]",

        "memberAddressLine1": "123 Main St",

        "memberAddressLine2": "main",

        "memberCity": "Chicago",

        "memberState": "IL",

        "memberCountry": "US",

        "memberPostalCode": "60601",

        "membershipLevel": "3",

        "membershipStatus": "activo",

        "latitude": "19",

        "longitude": "19",

        "memberPhone": "312-555-5555"

    },

    "shipping": {

        "shippingCharges": "100.50",

        "shippingFirstName": "Juan",

        "shippingMiddleName": "Pablo",

        "shippingLastName": "Perez",

        "shippingEmailAddress": "[email protected]",

        "shippingAddress": "a",

        "shippingAddress2": "b",

        "shippingCity": "s",

        "shippingState": "Chicago",

        "shippingPostalCode": "12345",

        "shippingCountry": "MEX",

        "shippingPhoneNumber": "87654321",

        "shippingMethod": "mail",

        "shippingDeadline": "2015-08-01"

    },

    "items": {"item": [

        {

            "itemNumber": "193487654",

            "itemDescription": "iPhone 6 32gb",

            "itemPrice": "599.00",

            "itemQuantity": "1",

            "itemMeasurementUnit": "Pza",

            "itemBrandName": "Apple",

            "itemCategory": "Electronics",

            "itemTax": "12.95"

        },

        {

            "itemNumber": "193487654",

            "itemDescription": "iPhone 6 64gb",

            "itemPrice": "599.00",

            "itemQuantity": "2",

            "itemMeasurementUnit": "Pza",

            "itemBrandName": "Samsung",

            "itemCategory": "Electronics",

            "itemTax": "12.95"

        }

    ]},

    "dispatchers": {"dispatcher": [{

        "dispatcherId": "193487654",

        "dispatcherName": "Jose",

        "dispatcherLastName": "Mtz"

    }]},

    "retail": {

        "initialSalesRep": "Jaime Mtz",

        "initialSalesRepDeviceId": "43r2e02dkewf2",

        "initialSalesRepId": "1314",

        "finalSalesRep": "Jaime Mtz",

        "finalSalesRepDeviceId": "43r2e02dkewf2",

        "finalSalesRepId": "1314",

        "salesChannel": "Abarrotes, Vinos, Licores, ",

        "referralCode": "CFB2010"

    },

    "inauth": {"inauthTransactionId": "<ESTA INFORMACIÓN TENDRÁ AL INTEGRAR SERVICIO ADICIONAL>"}

}

 

Pruebas

Valid Cards

Puede realizar pruebas con las siguientes tarjetas válidas

Card numberType
3411111111111111AMEX
3411121111111119AMEX
4711111111111115VISA
4711121111111114VISA (Débito)
5211111111111117MAST
5211121111111116MAST (Débito)

 

Respuesta específica o error

Card numberCodeMensaje
411111111111111151Tarjeta declinada por el banco, fondos insuficientes
411111111111113754Tarjeta expirada
411111111111789457Transacción no permitida al portador de la tarjeta
424242424242424114Número de tarjeta no válido

 

Error codes

Codigo(s)TipoDescripción
InvalidParamExceptionParámetros requeridos no enviados

No ha enviado parámetros de transacción forma adecuada

InvalidEncryptionExceptionRestricción por cifrado

La información enviada no fue cifrada de forma correcta, revisar los parámetros cifrados

PaymentFilterExceptionFiltros antifraude

El sistema interno detectó elementos sospechosos para procesar una transacción

SuspectedFraudExceptionFiltro anti fraude

El sistema antifraude detectó como fraude la transacción

InvalidTransactionException

Problema en la transacción

Se inicia una transacción pero no es procesada por reglas internas

PaymentExceptionTransacción rechazada

La transacción no fue aceptada por el banco

SwitchExceptionProblema con el switch bancario

El switch bancario no está procesando los pagos.

InternalErrorExceptionError del servicio Sr.Pago

El servicio Sr.Pago no está disponible para procesar transacciones

InvalidCardExceptionTarjeta ya existente

La tarjeta no se puede agregar porque ya existe.

 

Payment filter Exception detail

Codigo(s)TipoDescripción
IpRestrictionException,
LKDECOM1
Restricción por IP
El cliente ha intentado realizar múltiples transacciones desde la misma IP


CardAttempsException, LKDECOM2
Restricción por tarjeta



El cliente ha intentado múltiples cobros con la misma tarjeta en Sr.Pago

InvalidEcommerceException,
LKDECOM3,
LKDECOM4
Bloqueo de acceso

Su cuenta en Sr.Pago no tiene acceso a cobros E-commerce


InvalidCardException,
LKDECOM5
Tarjeta no válida
Número de tarjeta no válido o restringido para su uso.

 

 

Recursos adicionales

También puedes descargar nuestro Demo SDK.Net 

srpagosdk.dll

Descargar SDK
Descargar SDK
Más Información
Más Información
¿Te resultó útil este artículo? Si 4 No 1