Retour aux SDKs
R

Ruby SDK

v1.0.0

SDK officiel pour Ruby 3.0+ avec support Rails

GitHub

Installation

gem install simiz

Ou ajoutez dans votre Gemfile :

gem 'simiz', '~> 1.0'

Configuration

require 'simiz'

# Configurer le client
Simiz.api_key = ENV['SIMIZ_SECRET_KEY']

# Ou avec des options
client = Simiz::Client.new(
  api_key: ENV['SIMIZ_SECRET_KEY'],
  api_version: '2024-01',
  timeout: 30
)

Utilisation

Creer une transaction

transaction = Simiz::Transaction.create(
  amount: 5000,
  currency: 'XAF',
  payment_method: 'ORANGE_MONEY',
  payer: {
    phone: '237690000000',
    name: 'John Doe',
    email: 'john@example.com'
  },
  description: t('public.docs.sdks.ruby.achatSurMaBoutique'),
  reference: 'ORDER-123',
  metadata: {
    order_id: '123',
    customer_id: 'cust_456'
  },
  callback_url: 'https://votre-site.com/webhooks/simiz',
  return_url: 'https://votre-site.com/payment/success'
)

puts transaction.id        # tx_xxx
puts transaction.status    # PENDING
puts transaction.payment_url

Recuperer une transaction

transaction = Simiz::Transaction.retrieve('tx_xxx')

if transaction.status == 'COMPLETED'
  puts 'Paiement reussi!'
end

Lister les transactions

transactions = Simiz::Transaction.list(
  limit: 20,
  status: 'COMPLETED',
  created_after: '2024-01-01'
)

transactions.data.each do |tx|
  puts "#{tx.id} - #{tx.amount}"
end

# Pagination automatique
Simiz::Transaction.auto_paging_each do |tx|
  puts tx.id
end

Integration Rails

Le SDK s'integre facilement avec Rails.

Initializer (config/initializers/simiz.rb)

Simiz.api_key = Rails.application.credentials.simiz[:secret_key]

Controller

class PaymentsController < ApplicationController
  def create
    transaction = Simiz::Transaction.create(
      amount: params[:amount],
      currency: 'XAF',
      payment_method: 'ORANGE_MONEY',
      payer: { phone: params[:phone] },
      callback_url: webhooks_simiz_url,
      return_url: payment_success_url
    )

    render json: {
      transaction_id: transaction.id,
      payment_url: transaction.payment_url
    }
  end
end

Webhooks

class WebhooksController < ApplicationController
  skip_before_action :verify_authenticity_token

  def simiz
    payload = request.body.read
    signature = request.headers['X-Simiz-Signature']

    begin
      event = Simiz::Webhook.construct_event(
        payload,
        signature,
        Rails.application.credentials.simiz[:webhook_secret]
      )
    rescue Simiz::SignatureVerificationError
      return head :bad_request
    end

    case event.type
    when 'transaction.completed'
      transaction = event.data
      Order.find_by(payment_id: transaction.id)
           &.update!(status: 'paid')
    when 'transaction.failed'
      # Gerer l'echec
    end

    head :ok
  end
end

Gestion des erreurs

begin
  transaction = Simiz::Transaction.create(...)
rescue Simiz::AuthenticationError => e
  # Cle API invalide
  Rails.logger.error "Verifiez votre cle API"
rescue Simiz::InvalidRequestError => e
  # Parametres invalides
  Rails.logger.error "Erreur: #{e.message}"
  Rails.logger.error "Parametre: #{e.param}"
rescue Simiz::APIError => e
  # Erreur serveur
  Rails.logger.error "Erreur API: #{e.message}"
end