SDK Ruby

Nuestro SDK te permite integrarte rapidamente con Culqi.


Nuestro SDK oficial Ruby, 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 Ruby 3.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.

Repositorio

Puedes descargar el código fuente del SDK desde:

Nombre Repositorio
Culqi Ruby https://github.com/culqi/culqi-ruby

Repositorio de paquetes

Puedes revisar las versiones disponibles desde el repositorio de paquetes de Ruby Gems e instalarlo en tu aplicativo:

Instalación

Instalación usando rubygems:

Ejecuta los siguientes comandos en una terminal.

BASH
gem install bundler
bundle install

Luego agregar la dependencia:

BASH
gem install culqi-ruby-oficial

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.

RUBY
require 'minitest/autorun'
require 'culqi-ruby'

Culqi.public_key = '{PUBLIC KEY}'
Culqi.secret_key = '{SECRET KEY}'
Culqi.rsa_id = '{rsa_id}'
Culqi.rsa_key = "{rsa_public_key}"

2. Encriptar payload

Para encriptar el payload necesitas pasar como parámetro el rsaPublicKey y rsaId.

Ejemplo

RUBY
def self.createTokenEncrypt
  rsa_key = Culqi.rsa_key
  rsa_id = Culqi.rsa_id
  params ={
    :card_number => '4111111111111111',
    :cvv => '111',
    :currency_code => 'PEN',
    :email => 'test1231@culqi.com',
    :expiration_month => 9,
    :expiration_year => 2025
  }
  token, statusCode = Culqi::Token.create(params,  rsa_key, rsa_id)
  #puts token
  return JSON.parse(token), statusCode
end

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.

RUBY
params = {
  :card_number => '4111111111111111',
  :cvv => '111',
  :currency_code => 'PEN',
  :email => 'test1231@culqi.com',
  :expiration_month => 9,
  :expiration_year => 2025
}
token, statusCode = Culqi::Token.create(params,  rsa_key, rsa_id)

jsonToken = JSON.parse(token)

puts jsonToken['id']

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.

RUBY
params = {
  :amount => 1000,
  :capture => false,
  :currency_code => 'PEN',
  :description => 'Venta de prueba',
  :email => 'test'+SecureRandom.uuid+'@culqi.com',
  :installments => 0,
  :metadata => ({
    :test => 'test123'
  }),
  :source_id => token_json['id']
}
charge, statusCode = Culqi::Charge.create(params)

jsonCharge = JSON.parse(charge)

Para realizar un cargo recurrente, puedes utilizar el siguiente código:

RUBY
params = {
  :amount => 1000,
  :capture => false,
  :currency_code => 'PEN',
  :description => 'Venta de prueba',
  :email => 'test'+SecureRandom.uuid+'@culqi.com',
  :installments => 0,
  :metadata => ({
    :test => 'test123'
  }),
  :source_id => token_json['id']
}

custom_headers  = {
  'X-Charge-Channel' => 'recurrent',
}

charge, statusCode = Culqi::Charge.create(params, '', '', custom_headers)

jsonCharge = JSON.parse(charge)

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.

RUBY
refund, statusCode = Culqi::Refund.create(
  :amount => 500,
  :charge_id => jsonCharge['id'],
  :reason => 'solicitud_comprador'
)

jsonRefund = JSON.parse(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.

RUBY
params = {
  :address => 'Avenida Lima 123213',
  :address_city => 'LIMA',
  :country_code => 'PE',
  :email => 'test'+SecureRandom.uuid+'@culqi.com',
  :first_name => 'William',
  :last_name => 'Muro',
  :metadata => ({
    :other_number => '789953655'
  }),
  :phone_number => 998989789
}
customer, statusCode = Culqi::Customer.create(params)

jsonCustomer = JSON.parse(customer)

Actualizar Cliente

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

RUBY
updatecustomer, statusCode = Culqi::Customer.update('cus_test_xxxxxxxxxxxxxxxx',
  :address => 'Av. Lima 123',
  :first_name => 'Will')

Obtener Cliente

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

RUBY
getcustomer = Culqi::Customer.get('cus_test_xxxxxxxxxxxxxxxx')

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.

RUBY
card, statusCode = Culqi::Card.create(
  :customer_id => jsonCustomer['id'],
  :token_id => jsonToken['id']
)

jsonCard = JSON.parse(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.

RUBY
params = {
  :amount => 1000,
  :currency_code => 'PEN',
  :interval => 'dias',
  :interval_count => 2,
  :limit => 10,
  :metadata => ({
    :alias => 'plan_test'
  }),
  :name => 'plan-test-'+SecureRandom.uuid,
  :trial_days => 50
}

plan, statusCode = Culqi::Plan.create(params)

jsonPlan = JSON.parse(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.

RUBY
subscription, statusCode = Culqi::Subscription.create(
  :card_id => jsonCard['id'],
  :plan_id => jsonPlan['id']
)

jsonSubscription = JSON.parse(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.

RUBY
params = {
  :amount => 10000,
  :currency_code => 'PEN',
  :description => 'Venta de prueba',
  :order_number => 'pedido-ruby-'+SecureRandom.random_number(50).to_s,
  :client_details => ({
    :first_name => 'Richard',
    :last_name => 'Hendricks',
    :email => 'richar3d@piedpiper.com',
    :phone_number => '+51945145280'
  }),
  :expiration_date => (Time.now + (2*7*24*60*60)).to_i,
  :confirm => false
}
order, statusCode = Culqi::Orden.create(params)

jsonSubscription = JSON.parse(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 carpeta /test encontraras ejemplos para crear un token, charge, plan, órdenes, card, suscripciones, etc.

Puedes ejecutar test unitarios independientemente

RUBY
rake test test_culqi-create.rb

Si queremos ejecutar un especifico método de un test

RUBY
rake test TEST=test/test_culqi-create.rb
rake test TEST=test/test_culqi-create.rb TESTOPTS="--name=test_create_token -v"

Ejemplo Prueba Token

RUBY
token_string =  CulqiCRUD.createToken
token_json = JSON.parse(JSON.generate(token_string[0]))
id_value = token_json['object']
assert_equal 'token', id_value

Ejemplo Prueba Cargo

RUBY
charge_string =  CulqiCRUD.createCharge
charge_json = JSON.parse(JSON.generate(charge_string[0]))
id_value = charge_json['object']
assert_equal 'charge',id_value