Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Gema Ruby para utilizar los servicios de Khipu.com
Versión API Khipu: 1.3 Versión API de notificación: 1.2
La documentación de Khipu.com se puede ver desde aquí: https://khipu.com/page/api
Primero instalar la gema ruby
$ gem install khipu
Luego debes incluir la gema desde tus scripts Ruby usando require 'khipu'
Esta biblioteca implementa los siguientes servicios de khipu:
Este servicio entrega un mapa con el listado de los bancos disponibles para efectuar un pago a un cobrador determinado. Cada banco tiene su identificador, un nombre, el monto mínimo que se puede transferir desde él y un mensaje con información importante.
begin
banks = Khipu.create_khipu_api(ID_DEL_COBRADOR, 'SECRET_DEL_COBRADOR').receiver_banks
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
Este servicio entrega un mapa que contiene el identificador del cobro generado así como una lista de los pagos asociados a este cobro. Por cada pago se tiene el ID, el correo asociado y la URL en khipu para pagar.
begin
service = Khipu.create_khipu_api(ID_DEL_COBRADOR, SECRET_DEL_COBRADOR)
map = service.create_email({subject: 'Un cobro desde Ruby', destinataries: [ {name: "John Doe", email: "john.doe@gmail.com", amount: "1000"}, {name: "Jane Dow", email: "jane.dow@gmail.com", amount: "1000"}], pay_directly: true, send_emails: true})
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
Importante: El parámetro destinataries es un mapa Ruby y no un string. Internamente es convertido a un string JSON
Este ejemplo genera un archivo .html con un formulario de pago en khipu.
File.open('form.html', 'w') { |file|
service = Khipu.create_html_helper(2, 'e40ac9591200b2ec9277cd1c795af82d618cf78e')
form = service.create_payment_form({subject: 'Un cobro desde Ruby', body: 'El cuerpo del cobro', amount: "1000", email: 'john.doe@gmail.com'})
file.write(form)
}
Para crear una página de pago que solo permita pagar usando una cuenta asociada a un RUT en particular debes usar el mismo servicio del punto anterior indicando el RUT en el parámetro payer_username
File.open('form.html', 'w') { |file|
service = Khipu.create_html_helper(2, 'e40ac9591200b2ec9277cd1c795af82d618cf78e')
form = service.create_payment_form({subject: 'Un cobro desde Ruby', body: 'El cuerpo del cobro', amount: "1000", email: 'john.doe@gmail.com', payer_username: '128723463'})
file.write(form)
}
Este servicio entrega un mapa que contiene el identificador de un pago generado, su URL en khipu y la URL para iniciar el pago desde un dispositivo móvil.
begin
service = Khipu.create_khipu_api(ID_DEL_COBRADOR, SECRET_DEL_COBRADOR)
map = service.create_payment_url({subject: 'Un cobro desde Ruby', body: 'El cuerpo del cobro', amount: "1000", email: 'john.doe@gmail.com'})
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
Este servicio es idéntico al anterior pero usando el parámetro payer_username se fuerza que la cuenta corriente usada para pagar debe estar asociada al RUT indicado.
begin
service = Khipu.create_khipu_api(ID_DEL_COBRADOR, SECRET_DEL_COBRADOR)
map = service.create_authenticated_payment_url({subject: 'Un cobro desde Ruby', body: 'El cuerpo del cobro', amount: "1000", email: 'john.doe@gmail.com', payer_username: '128723463'})
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
Este ejemplo contacta a khipu para obtener la notificación de un pago a partir de un token de notificación. El resultado contiene el receiver_id, transaction_id, amount, currency, etc con lo que se debe el pago contra el backend. En este ejemplo los parámetros se configuran a mano, pero en producción los datos deben obtenerse desde el request request html.
begin
service = Khipu.create_khipu_api(ID_DEL_COBRADOR, SECRET_DEL_COBRADOR)
params = {notification_token: 'j8kPBHaPNy3PkCh...hhLvQbenpGjA'}
map = service.get_payment_notification(params)
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
En map queda un hash con los valores de la notificación:
{
"notification_token"=>"j8kPBHaPNy3PkCh...hhLvQbenpGjA",
"receiver_id"=>ID_DEL_COBRADOR,
"subject"=>"Motivo del cobro",
"amount"=>"100",
"custom"=>"",
"transaction_id"=>"MTX_123123",
"payment_id"=>"qpclzun1nlej",
"currency"=>"CLP",
"payer_email"=>"ejemplo@gmail.com"
}
Este ejemplo contacta a khipu para validar los datos de una transacción. Para usar este servicio no es necesario configurar el SECRET del cobrador. Se retorna true si la información del la notificación es válida. En este ejemplo los parámetros se configuran a mano, pero en producción los datos deben obtenerse desde el request html.
begin
service = Khipu.create_khipu_api(ID_DEL_COBRADOR, SECRET_DEL_COBRADOR)
params = {api_version: '1.2',
notification_id: 'aq1td2jl2uen',
subject: 'Motivo de prueba',
amount: 12575,
currency: 'CLP',
transaction_id: 'FTEEE5SWWO',
payer_email: 'john.doe@gmail.com',
custom: 'Custom info',
notification_signature: 'j8kPBHaPNy3PkCh...hhLvQbenpGjA=='
}
valid = service.verify_payment_notification(params)
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
Este servicio permite consultar el estado de una cuenta khipu. Se devuelve un mapa que indica si esta cuenta está habilitada para cobrar y el tipo de cuenta (desarrollo o producción).
begin
service = Khipu.create_khipu_api(ID_DEL_COBRADOR, SECRET_DEL_COBRADOR)
map = service.receiver_status;
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
Este servició sirve para verificar el estado de un pago.
begin
service = Khipu.create_khipu_api(ID_DEL_COBRADOR, SECRET_DEL_COBRADOR)
map = service.payment_status({payment_id: '9fnsggqqi8ho'})
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
Este servicio permite marcar un cobro como pagado. Si el pagador paga por un método alternativo a khipu, el cobrador puede marcar este cobro como saldado.
begin
service = Khipu.create_khipu_api(ID_DEL_COBRADOR, SECRET_DEL_COBRADOR)
service.set_paid_by_receiver({payment_id: '54dhfsch6avd'});
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
Este servicio permite adelantar la expiración del cobro. Se puede adjuntar un texto que será desplegado a la gente que trate de ir a pagar.
begin
service = Khipu.create_khipu_api(ID_DEL_COBRADOR, SECRET_DEL_COBRADOR)
service.set_bill_expired({bill_id: 'udmEe', text: 'Plazo vencido'})
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
Este servicio permite rechazar pago con el fin de inhabilitarlo. Permite indicar la razón por la que el pagador rechaza saldar este pago:
begin
service = Khipu.create_khipu_api(ID_DEL_COBRADOR, SECRET_DEL_COBRADOR)
service.set_rejected_by_payer({payment_id: '0pk7xfgocry4', text: 'El pago no corresponde'});
rescue Khipu::ApiError => error
puts error.type
puts error.message
end
FAQs
Unknown package
We found that khipu demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.