Skip to content

SDK Ruby

La bibliothèque officielle HayBTech pour Ruby, disponible sur RubyGems.

Intégration par IA (Prompt pour Marchands)

Si vous utilisez un assistant IA (comme Cursor, GitHub Copilot, ChatGPT, Claude, etc.), vous pouvez copier-coller le prompt suivant pour intégrer ce SDK de A à Z dans votre projet :

text
Agis en tant qu'expert en développement Ruby on Rails. Je souhaite intégrer le SDK Ruby officiel de HayBTech (`haybtech-sdk`) pour accepter des paiements sur mon application Rails de A à Z.

Voici ma stack technique actuelle :
- Base de données : [ex: PostgreSQL avec ActiveRecord]
- Modèle de commande : [décrivez brièvement votre modèle Order]

Tâches à accomplir dans le code généré :
1. **Initialisation** : Configurer le client HayBTech dans un initializer Rails (`config/initializers/haybtech.rb`) à partir des variables d'environnement (`HAYBTECH_SECRET_KEY`).
2. **Checkout Controller** : Créer une action dans un contrôleur (ex: `payments_controller.rb`) pour lancer la transaction via `HayBTech.payments.create(...)` en lui passant les paramètres requis (merchant_ref, amount, currency='XOF', success_url, failed_url, callback_url) et rediriger l'utilisateur vers le guichet de paiement.
3. **Webhook Controller** : Créer une action de webhook (ex: `/webhooks/haybtech`). Elle doit :
   - Récupérer le payload brut (`request.raw_post`) et la signature (`request.headers['X-HayBTech-Signature']` ou `X-HayB-Signature`).
   - Valider la signature à l'aide de `HayBTech.webhook.construct_event(payload, signature, secret)` avec le secret de webhook (`HAYBTECH_WEBHOOK_SECRET`).
   - Modifier le statut de la commande de manière idempotente à la réception de `payment.success` (marquer comme payée) ou `payment.failed` (marquer comme échouée) en base de données.
   - Renvoyer un statut de succès HTTP `head :ok`.
4. **Sécurité & Gestion d'erreurs** : Gérer proprement les exceptions, désactiver la vérification CSRF de Rails uniquement sur la route du webhook, et sécuriser le traitement contre les attaques par rejeu.

Génère le code complet, propre, commenté et conforme aux conventions Rails.

Installation

Ajoutez cette ligne au Gemfile de votre application :

ruby
gem 'haybtech-sdk'

Puis exécutez :

bash
bundle install

Configuration

ruby
require 'haybtech'

HayBTech.configure(ENV['HAYBTECH_SECRET_KEY'])

Paiements

Créer un paiement

ruby
response = HayBTech.payments.create({
  merchant_ref: 'ORDER-123',
  amount:       2500,
  currency:     'XOF',
  success_url:  'https://monsite.sn/merci',
  failed_url:   'https://monsite.sn/echec',
  callback_url: 'https://monsite.sn/webhook'
})

# Redirection Rails
# redirect_to response.payment_url

Webhooks (Rails)

ruby
class WebhooksController < ApplicationController
  skip_before_action :verify_authenticity_token

  def receive
    payload = request.raw_post
    signature = request.headers['X-HayB-Signature']
    secret = ENV['HAYBTECH_WEBHOOK_SECRET']

    begin
      event = HayBTech::Webhook.construct_event(payload, signature, secret)
      case event.type
      when 'payment.success'
        # Logique succès
      end
      head :ok
    rescue HayBTech::SignatureError
      render json: { error: 'Invalid signature' }, status: :bad_request
    end
  end
end

Webhooks (Sinatra)

ruby
require 'sinatra'
require 'haybtech'

post '/webhooks' do
  payload = request.body.read
  signature = request.env['HTTP_X_HAYB_SIGNATURE']
  secret = ENV['HAYBTECH_WEBHOOK_SECRET']

  begin
    event = HayBTech::Webhook.construct_event(payload, signature, secret)
    status 200
  rescue HayBTech::SignatureError
    status 400
  end
end

Sécurité

  • Timing attack : Utilise OpenSSL.fixed_length_secure_compare.
  • Zéro dépendance : Utilise uniquement net/http et openssl.
  • Masquage : Clés masquées dans inspect et marshal_dump.

Documentation de l'API de paiement HayBTech.