culqi

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2023 License: MIT Imports: 10 Imported by: 0

README

Culqi-Go

license Code Climate

Nuestra Biblioteca Go oficial, es compatible con la v2.0 del Culqi API, con el cual tendrás la posibilidad de realizar cobros con tarjetas de débito y crédito, Yape, PagoEfectivo, billeteras móviles y Cuotéalo con solo unos simples pasos de configuración.

Nuestra biblioteca te da la posibilidad de capturar el status_code de la solicitud HTTP que se realiza al API de Culqi, así como el response que contiene el cuerpo de la respuesta obtenida.

Versión actual Culqi API
1.0.0 (15-08-2023) v2 Referencia de API

Requisitos

  • Go 1.6+
  • Afiliate aquí.
  • Si vas a realizar pruebas obtén tus llaves desde aquí, si vas a realizar transacciones reales obtén tus llaves desde aquí.

Recuerda que para obtener tus llaves debes ingresar a tu CulqiPanel > Desarrollo > API Keys.

alt tag

Recuerda que las credenciales son enviadas al correo que registraste en el proceso de afiliación.

  • Para encriptar el payload debes generar un id y llave RSA ingresando a CulqiPanel > Desarrollo > RSA Keys.

Instalación

Vía "go get"

Ejecuta los siguientes comandos:

go get github.com/culqi/culqi-go
go get "github.com/google/uuid"
Manualmente

Clonar el repositorio o descargarse el código fuente.

$ git clone git@github.com:culqi/culqi-go.git

Inicio rápido

Importando culqi-go:

import (    
    culqi "github.com/culqi/culqi-go"
)

Configuración

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.

func main() {
  // 1. llaves
  culqi.Key("pk_test_xxx", "sk_test_xxx")

  encryptiondData = []byte(`{		
		"rsa_public_key": "` + rsa_public_key + `",
		"rsa_id":  "` + rsa_id + `"
	}`)
}

Encriptar payload

Para encriptar el payload necesitas crear un id RSA y llave RSA, para esto debes ingresa a tu panel y hacer click en la sección “Desarrollo / RSA Keys” de la barra de navegación a la mano izquierda.

Luego declara en variables el id RSA y llave RSA en tu backend, y envialo en las funciones de la librería.

Ejemplo

rsa_public_key := "la llave pública RSA";
rsa_id := "el id de tu llave"

_, res, err := culqi.CreateToken(jsonData, encryptiondData...)

Servicios

Crear un token

Antes de crear un Cargo o Card es necesario crear un token de tarjeta. Lo recomendable es generar los 'tokens' con Culqi Checkout v4 o Culqi JS v4 debido a que es muy importante que los datos de tarjeta sean enviados desde el dispositivo de tus clientes directamente a los servidores de Culqi, para no poner en riesgo los datos sensibles de la tarjeta de crédito/débito.

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.

statusCode, res, err := culqi.CreateToken(jsonData)
Crear un cargo

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

Los cargos pueden ser creados vía API de devolución.

statusCode, res, err := culqi.CreateCharge(json)
Crear devolución

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

Las devoluciones pueden ser creados vía API de devolución.

statusCode, res, err := culqi.CreateRefund(json)
Crear un Cliente (customer)

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 pueden ser creados vía API de cliente.

statusCode, res, err := culqi.CreateCustomer(json)
Crear una tarjeta (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 pueden ser creadas vía API de tarjeta.

statusCode, res, err := culqi.CreateCard(json)
Crear un 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 pueden ser creados vía el API de Plan o desde el CulqiPanel.

statusCode, res, err := culqi.CreatePlan(jsonDataPlan)
Crear una suscripción (suscription)

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

Las suscripciones pueden ser creadas vía API de suscripción.

statusCode, res, err := culqi.CreateSubscription(jsonData)
Crear una 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 pueden ser creadas vía API de orden.

statusCode, res, err := culqi.CreateOrder(jsonData)

Pruebas

$ go test -v ./test/ -public_key=pk_test_xxx -secret_key=sk_test_xxx

Documentación

Changelog

Todos los cambios en las versiones de esta biblioteca están listados en CHANGELOG.

Autor

Team Culqi

Licencia

El código fuente de culqi-python está distribuido bajo MIT License, revisar el archivo LICENSE.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidRequest = errors.New("La petición tiene una sintaxis inválida")
	ErrAuthentication = errors.New("La petición no pudo ser procesada debido a problemas con las llaves")
	ErrParameter      = errors.New("Algún parámetro de la petición es inválido")
	ErrCard           = errors.New("No se pudo realizar el cargo a una tarjeta")
	ErrLimitAPI       = errors.New("Estás haciendo muchas peticiones rápidamente al API o superaste tu límite designado")
	ErrResource       = errors.New("El recurso no puede ser encontrado, es inválido o tiene un estado diferente al permitido")
	ErrAPI            = errors.New("Error interno del servidor de Culqi")
	ErrUnexpected     = errors.New("Error inesperado, el código de respuesta no se encuentra controlado")
	ErrorGenerico     = 502
)

Errors API

Functions

func ConfirmOrder

func ConfirmOrder(id string, body []byte, encryptionData ...byte) (int, string, error)

Confirm método para confirmar una orden

func ConfirmTipoOrder

func ConfirmTipoOrder(body []byte, encryptionData ...byte) (int, string, error)

Confirm método para confirmar una orden por tipo

func Create

func Create(URL string, body []byte, encryptionData ...byte) (int, string, error)

func CreateCard

func CreateCard(body []byte, encryptionData ...byte) (int, string, error)

Create método para crear una tarjeta

func CreateCharge

func CreateCharge(body []byte, encryptionData ...byte) (int, string, error)

Create método para crear un cargo

func CreateCustomer

func CreateCustomer(body []byte, encryptionData ...byte) (int, string, error)

Create método para crear un cliente

func CreateOrder

func CreateOrder(body []byte, encryptionData ...byte) (int, string, error)

Create método para crear una orden

func CreatePlan

func CreatePlan(body []byte, encryptionData ...byte) (int, string, error)

Create método para crear un plan

func CreateRefund

func CreateRefund(body []byte, encryptionData ...byte) (int, string, error)

Create método para crear una devolucion

func CreateSubscription

func CreateSubscription(body []byte, encryptionData ...byte) (int, string, error)

Create método para crear una Subscripción

func CreateToken

func CreateToken(body []byte, encryptionData ...byte) (int, string, error)

Create método para crear un token

func CreateYape

func CreateYape(body []byte, encryptionData ...byte) (int, string, error)

CreateYape Create método para crear un token yape

func Delete

func Delete(URL string, id string, body []byte) (int, string, error)

func DeleteCard

func DeleteCard(id string, body []byte) (int, string, error)

Delete método para eliminar una tarjeta por id

func DeleteCustomer

func DeleteCustomer(id string, body []byte) (int, string, error)

Delete método para eliminar un cliente por id

func DeleteOrder

func DeleteOrder(id string, body []byte) (int, string, error)

Delete método para eliminar una orden

func DeletePlan

func DeletePlan(id string, body []byte) (int, string, error)

Delete método para eliminar un plan por id

func DeleteSubscriptions

func DeleteSubscriptions(id string, body []byte) (int, string, error)

Delete método para eliminar una Subscripción por id

func GetAll

func GetAll(URL string, queryParams url.Values, body []byte) (int, string, error)

func GetAllCard

func GetAllCard(queryParams url.Values, body []byte) (int, string, error)

GetAll método para obtener la lista de las tarjetas

func GetAllCharge

func GetAllCharge(queryParams url.Values, body []byte) (int, string, error)

GetAll método para obtener la lista de Cargos

func GetAllCustomer

func GetAllCustomer(queryParams url.Values, body []byte) (int, string, error)

GetAll método para obtener la lista de clientes

func GetAllOrder

func GetAllOrder(queryParams url.Values, body []byte) (int, string, error)

GetAll método para obtener la lista de Ordenes

func GetAllPlan

func GetAllPlan(queryParams url.Values, body []byte) (int, string, error)

GetAll método para obtener la lista de los planes

func GetAllRefund

func GetAllRefund(queryParams url.Values, body []byte) (int, string, error)

GetAll método para obtener la lista de devoluciones

func GetAllSubscription

func GetAllSubscription(queryParams url.Values, body []byte) (int, string, error)

GetAll método para obtener la lista de las subscripciones

func GetAllToken

func GetAllToken(queryParams url.Values, body []byte) (int, string, error)

GetAll método para obtener la lista de tokens

func GetByIDCard

func GetByIDCard(id string, body []byte) (int, string, error)

GetByID método para obtener una tarjeta por id

func GetByIDCustomer

func GetByIDCustomer(id string, body []byte) (int, string, error)

GetByID método para obtener un cliente por id

func GetByIDOrder

func GetByIDOrder(id string, body []byte) (int, string, error)

GetByID método para obtener una orden por id

func GetByIDPlan

func GetByIDPlan(id string, body []byte) (int, string, error)

GetByID método para obtener un plan por id

func GetByIDRefund

func GetByIDRefund(id string, body []byte) (int, string, error)

GetByID método para obtener una devolucion por id

func GetByIDSubscription

func GetByIDSubscription(id string, body []byte) (int, string, error)

GetByID método para obtener una Subscripción por id

func GetByIDToken

func GetByIDToken(id string, body []byte) (int, string, error)

GetByID método para obtener un token por id

func GetById

func GetById(URL string, id string, body []byte) (int, string, error)

func GetByIdCharge

func GetByIdCharge(id string, body []byte) (int, string, error)

GetByID método para obtener un cargo por id

func GetKey

func GetKey() *key
func Key(key string) {
	keyInstance.Key = key
}

GetKey retorna la instancia de key

func Key

func Key(publicKey string, secretKey string)

Key crea una única instancia de key

func Update

func Update(URL string, id string, body []byte, encryptionData ...byte) (int, string, error)

Update método para agregar o remplazar información a los valores de la metadata de un cargo

func UpdateCard

func UpdateCard(id string, body []byte, encryptionData ...byte) (int, string, error)

Update método para agregar o remplazar información a los valores de la metadata de una tarjeta

func UpdateCharge

func UpdateCharge(id string, body []byte, encryptionData ...byte) (int, string, error)

Update método para agregar o remplazar información a los valores de la metadata de un cargo

func UpdateCustomer

func UpdateCustomer(id string, body []byte, encryptionData ...byte) (int, string, error)

Update método para agregar o remplazar información a los valores de la metadata de un cliente

func UpdateOrder

func UpdateOrder(id string, body []byte, encryptionData ...byte) (int, string, error)

Update método para agregar o remplazar información a los valores de la metadata de una orden

func UpdatePlan

func UpdatePlan(id string, body []byte, encryptionData ...byte) (int, string, error)

Update método para agregar o remplazar información a los valores de la metadata de un plan

func UpdateRefund

func UpdateRefund(id string, body []byte, encryptionData ...byte) (int, string, error)

Update método para agregar o remplazar información a los valores de la metadata de una devolucion

func UpdateSubscription

func UpdateSubscription(id string, body []byte, encryptionData ...byte) (int, string, error)

Update método para agregar o remplazar información a los valores de la metadata de una Subscripción

func UpdateToken

func UpdateToken(id string, body []byte, encryptionData ...byte) (int, string, error)

Update método para agregar o remplazar información a los valores de la metadata de un token

Types

type WrapperResponse

type WrapperResponse struct {
	Paging struct {
		Previous string `json:"previous"`
		Next     string `json:"next"`
		Cursors  struct {
			Before string `json:"before"`
			After  string `json:"after"`
		} `json:"cursors"`
	} `json:"paging"`
}

WrapperResponse respuesta generica para respuestas GetAll

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL