SDK NetCore

Nuestro SDK te permite integrarte rapidamente con Culqi

Nuestro SDK oficial NetCore, es compatible con la V2.0 del Culqi API, con el cual tendrás la posibilidad de integrarte con el API de tokens, cargos, devoluciones, clientes, tarjetas, planes, suscripciones y órdenes

El SDK te da la posibilidad de capturar el status_code de la solicitud HTTP que se realiza al API de Culqi, así como el response.

Requisitos

  • Nuestro SDK es compatible con NET Core 4.0+.
  • Debes tener tus llaves de producción o integración.
  • Si aun no te afilias a Culqi, lo puedes hacer desde aquí.
  • Para encriptar el payload debes generar un id y llave RSA ingresando a tu CulqiPanel > Desarrollo > RSA Keys.

Recuerda que para obtener tu llave pública, debes ingresar a la sección “Desarrollo” y luego a “API Keys” en tu CulqiPanel, para generar tu id y llave RSA debes ingresar a “RSA Keys”.

Repositorio

Puedes descargar el código fuente del SDK desde:

Repositorio

Culqi NetCore

repositorio

Repositorio de paquetes

Puedes revisar las versiones disponibles desde el repositorio, descargar la ddl e instalarlo en tu aplicativo desde:

Repositorio

Culqi NetCore dll

repositorio

Instalación

Ejecuta los siguientes comandos usando la consola de comandos NuGet:

Install-Package RestSharp
Install-Package Newtonsoft.Json

Configuración

1. Configurar llaves

Para empezar a enviar peticiones al API de Culqi debes configurar tu llave pública (pk), llave privada (sk). Para habilitar encriptación de payload debes configurar tu rsa_id y rsa_public_key.

security = new Security();
security.public_key = "{PUBLIC KEY}";
security.secret_key = "{SECRET KEY}";
security.rsa_id = "{rsa_id}";
security.rsa_key = "{rsa_public_key}";

Recuerda que las llaves de integración se identifican como “test” y las de producción como “live”.

2. Encriptar payload

Para encriptar el payload necesitas crear un id RSA y llave RSA. Luego declara en variables el id RSA y llave RSA en tu backend, y envialo en las funciones de la librería.

Ejemplo

public HttpResponseMessage CreateTokenEncrypt()
{
	return new Token(security).Create(jsonData.JsonToken(), security.rsa_id, security.rsa_key);
}

Servicios

Crear token

Para no poner en riesgo los datos sensibles de la tarjeta de crédito/débito es recomendable es generar los ‘tokens’ con el Custom Checkout debido a que es muy importante que los datos de la tarjeta sean enviados directamente desde el dispositivo de tus clientes a los servidores de Culqi.

Recuerda que cuando interactúas directamente con el API Token necesitas cumplir la normativa de PCI DSS 3.2. Por ello, te pedimos que llenes el formulario SAQ-D y lo envíes al buzón de riesgos Culqi.

Dictionary<string, object> token = new Dictionary<string, object>
{
	{"card_number", "4111111111111111"},
	{"cvv", "123"},
	{"expiration_month", 9},
	{"expiration_year", 2025},
	{"email", "pruebas123@me.com"}
};
HttpResponseMessage token_created = new Token(security).Create(token);

Crear cargo

Crear un cargo significa cobrar una venta a una tarjeta. Para esto previamente deberías generar el token y enviarlo en el parámetro source_id.

Los cargos son creados a través del API de cargo.

var json_token = JObject.Parse(token_created);

Dictionary<string, object> metadata = new Dictionary<string, object>
{
	{"order_id", "777"}
};

Dictionary<string, object> charge = new Dictionary<string, object>
{
	{"amount", 1000},
	{"capture", true},
	{"currency_code", "PEN"},
	{"description", "Venta de prueba"},
	{"email", "wmuro@me.com"},
	{"installments", 0},
	{"metadata", metadata},
	{"source_id", (string)json_token["id"]}
};

HttpResponseMessage charge_created = new Charge(security).Create(charge);

Crear Cargo con Configuración Adicional

¿Cómo funciona la configuración adicional?

Puedes agregar campos configurables en la sección custom_headers para personalizar las solicitudes de cobro. Es importante tener en cuenta que no se permiten campos con valores false, null, o cadenas vacías (). Solo habilitado para métodos POST.

Explicación:

  • params: Contiene la información necesaria para crear el cargo, como el monto, la moneda, y el correo del cliente.
  • custom_headers: Define los encabezados personalizados para la solicitud. Recuerda que solo se permiten valores válidos.
  • Filtrado de encabezados: Antes de realizar la solicitud, se eliminan los encabezados con valores no permitidos (false, null, o vacíos) para garantizar que la solicitud sea aceptada por la API.

¿Quieres realizar cobros a una lista de comercios en un tiempo y monto determinado?

Para realizar un cobro recurrente, puedes utilizar el siguiente código (Configuración Adicional -> custom_headers):

var json_token = JObject.Parse(token_created);

Dictionary<string, object> metadata = new Dictionary<string, object>
{
	{"order_id", "777"}
};

Dictionary<string, object> charge = new Dictionary<string, object>
{
	{"amount", 1000},
	{"capture", true},
	{"currency_code", "PEN"},
	{"description", "Venta de prueba"},
	{"email", "wmuro@me.com"},
	{"installments", 0},
	{"metadata", metadata},
	{"source_id", (string)json_token["id"]}
};

Dictionary<string, object> custom_header = new Dictionary<string, object>
	{
	    {"X-Charge-Channel", "recurrent"}
	};

HttpResponseMessage charge_created = new Charge(security).Create(charge, custom_header);

Crear devolución

Solicita la devolución de las compras de tus clientes (parcial o total) a través del API y CulqiPanel.

Las devoluciones son creadas a través del API de devolución.

var json_charge = JObject.Parse(charge_created);

Dictionary<string, object> refund = new Dictionary<string, object>
{
	{"amount", 500},
	{"charge_id", (string)json_charge["id"]},
	{"reason", "solicitud_comprador"}
};

HttpResponseMessage refund_created = new Refund(security).Create(refund);

Crear Cliente

El cliente es un servicio que te permite guardar la información de tus clientes. Es un paso necesario para generar una tarjeta.

Los clientes son creados a través del API de cliente.

Dictionary<string, object> customer = new Dictionary<string, object>
{
	{"address", "Av Lima 123"},
	{"address_city", "Lima"},
	{"country_code", "PE"},
	{"email", "test"+GetRandomString()+"@culqi.com"},
	{"first_name", "Test"},
	{"last_name", "Culqi"},
	{"phone_number", 99004356}
};

HttpResponseMessage customer_created = new Customer(security).Create(customer);

Crear Card

La tarjeta es un servicio que te permite guardar la información de las tarjetas de crédito o débito de tus clientes para luego realizarles cargos one click o recurrentes (cargos posteriores sin que tus clientes vuelvan a ingresar los datos de su tarjeta).

Las tarjetas son creadas a través del API de tarjeta.

Dictionary<string, object> card = new Dictionary<string, object>
{
	{"customer_id", (string)json_customer["id"]},
	{"token_id", (string)json_token["id"]}
};

HttpResponseMessage card_created = new Card(security).Create(card);

Crear Plan

El plan es un servicio que te permite definir con qué frecuencia deseas realizar cobros a tus clientes.

Un plan define el comportamiento de las suscripciones. Los planes son creados a través del API de Plan o desde el CulqiPanel.

Dictionary<string, object> metadata = new Dictionary<string, object>
{
	{"alias", "plan-test"}
};

Dictionary<string, object> plan = new Dictionary<string, object>
{
	{"amount", 10000},
	{"currency_code", "PEN"},
	{"interval", "dias"},
	{"interval_count", 15},
	{"limit", 2},
	{"metadata", metadata},
	{"name", "plan-culqi-"+GetRandomString()},
	{"trial_days", 15}
};

HttpResponseMessage plan_created = new Plan(security).Create(plan);

Crear Suscripción a un plan

La suscripción es un servicio que asocia la tarjeta de un cliente con un plan establecido por el comercio.

Las suscripciones son creadas a través del API de suscripción.

var json_plan = JObject.Parse(plan_created);
var json_card = JObject.Parse(card_created);

Dictionary<string, object> subscription = new Dictionary<string, object>
{
	{"card_id", (string)json_card["id"]},
	{"plan_id", (string)json_plan["id"]}
};

HttpResponseMessage subscription_created = new Subscription(security).Create(subscription);

Crear Orden

Es un servicio que te permite generar una orden de pago para una compra potencial. La orden contiene la información necesaria para la venta y es usado por el sistema de PagoEfectivo para realizar los pagos diferidos.

Las órdenes son creadas a través del API de orden.

 Dictionary<string, object> client_details = new Dictionary<string, object>
	{
		{"first_name", "Juan"},
		{"last_name", "Diaz"},
		{"email", "juan.diaz@culqi.com"},
		{"phone_number", "+51948747421"},

	};

Dictionary<string, object> order = new Dictionary<string, object>
	{
		{"amount", 1000},
		{"currency_code", "PEN"},
		{"description", "Venta de prueba"},
		{"order_number", "pedido"+Convert.ToString(order)},
		{"client_details", client_details},
		{"expiration_date", secondsSinceEpoch},
		{"confirm", true}

	};

HttpResponseMessage order_created = new Order(security).Create(order);

Pruebas

Antes de activar tu tienda en producción, te recomendamos realizar pruebas de integración. Así garantizarás un correcto despliegue.

Si vas a empezar a vender desde tu tienda virtual, deberás seleccionar el ambiente de producción e ingresar tus llaves.

En la caperta /Pruebas encontraras ejemplos para crear un token, charge, plan, órdenes, card, suscripciones, etc.

Recuerda que si quieres probar tu integración, puedes utilizar nuestras tarjetas de prueba.

Descarga los ejemplos desde:

Ejemplo Prueba Token

HttpResponseMessage data = culqiCRUD.CreateToken();
var json_object = JObject.Parse(data.Content.ReadAsStringAsync().Result);
Assert.AreEqual("token",(string)json_object["object"]);

Ejemplo Prueba Cargo

 HttpResponseMessage data = culqiCRUD.CreateCharge();
var json_object = JObject.Parse(data.Content.ReadAsStringAsync().Result);
Assert.AreEqual("charge", (string)json_object["object"]);