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
- Abrir el explorador de soluciones
- Dar click derecho en un proyecto de su solución
- Dar click en Administrar Paquetes Nuget (Imagen 1)
- Buscar SrPagoSDK
- Dar click en el paquete SrPagoSDK, seleccionar la versión que necesite y dar click en Instalar
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:
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
3. Deberá agregar una nueva referencia (Imagen 5)
4. Ingresar en Project/ Solution y seleccionar el archivo que fue descargado de nombre SrPago.
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ón | Tipo | Descripción |
---|---|---|
SrPago.ApiKey REQUERIDO | String | Llave de la aplicación |
SrPago.ApiSecret REQUERIDO | String | Secret de la aplicación |
SrPago.LiveMode | Boolean | Determina 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ón | Tipo | Descripción |
---|---|---|
amount REQUERIDO | Float | Monto a procesar |
description OPCIONAL | String | Descripción del cobro |
reference OPCIONAL | boolean | Referencia de cobro |
source REQUERIDO | string | Token generado por proceso de Tokenización, ver más librerías de tokenización |
metadata OPCIONAL | string | Es 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 | string | Usuario 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ón | Tipo | Descripción |
---|---|---|
transaction REQUERIDO | String | Transacció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ón | Tipo | Descripción |
---|---|---|
limit | int | Max items (100) |
offset | int | Start index |
start_date | Date | YYYY-MM-DD start date |
end_date | Date | YYYY-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ón | Tipo | Descripción |
---|---|---|
id | string | Id del cliente |
name | string | Nombre del cliente |
email | string | Correo del cliente |
active | bool | Indica si el cliente se encuentra activo |
date_create | string | Fecha de alta |
cards | List <Dictionary> | Lista de tarjetas registradas del cliente |
Clase CustomerCard
Definición | Tipo | Descripción |
---|---|---|
token | string | Token de la tarjeta |
holder_name | string | Nombre del tarjetahabiente |
type | string | Tipo de tarjeta |
number | string | Últimos 4 dígitos de la tarjeta |
expiration | string | Fecha de expiración de la tarjeta |
country_code | string | Código de país de la tarjeta |
bank_name | string | Institución que expidió la tarjeta |
funding | string | Fondos de la tarjeta |
Clase CustomerResult
Definición | Tipo | Descripción |
---|---|---|
total | int | Total de registo |
limit | int | Límite de número de registros que regresa CustomerService |
offset | int | Desplazamiento en la lista |
customers | list | Lista 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ón | Tipo | Descripción |
---|---|---|
amount REQUERIDO | Float | Monto a procesar |
description OPCIONAL | String | Descripción del cobro |
reference OPCIONAL | boolean | Referencia de cobro |
source REQUERIDO | string | Identificador de la tarjeta del cliente |
metadata OPCIONAL | string | Es 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
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:
Atributos | Tipo | Descripción |
---|---|---|
holder_name | string | Nombre del tarjetahabiente |
number | string | Últimos 4 dígitos de la tarjeta |
expiration | string | Fecha de expiración de la tarjeta (YYMM) |
cvv | string | CVV 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 number | Type |
---|---|
3411111111111111 | AMEX |
3411121111111119 | AMEX |
4711111111111115 | VISA |
4711121111111114 | VISA (Débito) |
5211111111111117 | MAST |
5211121111111116 | MAST (Débito) |
Respuesta específica o error
Card number | Code | Mensaje |
---|---|---|
4111111111111111 | 51 | Tarjeta declinada por el banco, fondos insuficientes |
4111111111111137 | 54 | Tarjeta expirada |
4111111111117894 | 57 | Transacción no permitida al portador de la tarjeta |
4242424242424241 | 14 | Número de tarjeta no válido |
Error codes
Codigo(s) | Tipo | Descripción |
---|---|---|
InvalidParamException | Parámetros requeridos no enviados | No ha enviado parámetros de transacción forma adecuada |
InvalidEncryptionException | Restricción por cifrado | La información enviada no fue cifrada de forma correcta, revisar los parámetros cifrados |
PaymentFilterException | Filtros antifraude | El sistema interno detectó elementos sospechosos para procesar una transacción |
SuspectedFraudException | Filtro 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 |
PaymentException | Transacción rechazada | La transacción no fue aceptada por el banco |
SwitchException | Problema con el switch bancario | El switch bancario no está procesando los pagos. |
InternalErrorException | Error del servicio Sr.Pago | El servicio Sr.Pago no está disponible para procesar transacciones |
InvalidCardException | Tarjeta ya existente | La tarjeta no se puede agregar porque ya existe. |
Payment filter Exception detail
Codigo(s) | Tipo | Descripció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