Hoppa till huvudinnehåll

Documentation Index

Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt

Use this file to discover all available pages before exploring further.

Ruby SDK:n erbjuder ett enkelt och intuitivt sätt att integrera Dodo Payments i dina Ruby-applikationer. Den följer Ruby-konventioner och bästa praxis, och erbjuder omfattande felhantering, paginering och middleware-stöd.

Installation

Lägg till gem:en i din Gemfile:
Gemfile
gem "dodopayments", "~> 2.9"
Använd alltid den senaste SDK-versionen för att få tillgång till de nyaste funktionerna i Dodo Payments. Kör bundle update dodopayments regelbundet för att hålla dig uppdaterad.
Kör sedan:
bundle install
SDK:en stöder Ruby 3.2.0 och senare versioner, med omfattande typer, felhantering och återförsöksmekanismer.

Snabbstart

Initiera klienten och skapa en checkout-session:
require "bundler/setup"
require "dodopayments"

dodo_payments = Dodopayments::Client.new(
  bearer_token: ENV["DODO_PAYMENTS_API_KEY"], # This is the default and can be omitted
  environment: "test_mode" # defaults to "live_mode"
)

checkout_session_response = dodo_payments.checkout_sessions.create(
  product_cart: [{product_id: "product_id", quantity: 1}]
)

puts(checkout_session_response.session_id)
Lagra dina API-nycklar säkert med hjälp av miljövariabler. Släpp dem aldrig till versionshantering eller exponera dem i din kod.

Kärnfunktioner

Ruby Conventions

Följer Rubys namngivningskonventioner och idiomatiska mönster

Elegant Syntax

Ren, läsbar API som känns naturligt för Ruby-utvecklare

Auto-Pagination

Inbyggda iteratörer för automatisk paginering av listresponser

Type Safety

Valfria Sorbet-typer för förbättrad typesäkerhet

Konfiguration

Timeout-konfiguration

Konfigurera begärningstidsgränser:
# Configure default for all requests (default is 60 seconds)
dodo_payments = Dodopayments::Client.new(
  timeout: nil # disable timeout
)

# Or, configure per-request
dodo_payments.checkout_sessions.create(
  product_cart: [{product_id: "product_id", quantity: 1}],
  request_options: {timeout: 5}
)

Återförsökskonfiguration

Konfigurera automatisk återförsöksbeteende:
# Configure default for all requests (default is 2)
dodo_payments = Dodopayments::Client.new(
  max_retries: 0 # disable retries
)

# Or, configure per-request
dodo_payments.checkout_sessions.create(
  product_cart: [{product_id: "product_id", quantity: 1}],
  request_options: {max_retries: 5}
)

Vanliga operationer

Skapa en checkout-session

Generera en checkout-session:
session = dodo_payments.checkout_sessions.create(
  product_cart: [
    {
      product_id: "prod_123",
      quantity: 1
    }
  ],
  return_url: "https://yourdomain.com/return"
)

# Redirect to checkout
redirect_to session.url

Hantera kunder

Skapa och hämta kundinformation:
# Create a customer
customer = dodo_payments.customers.create(
  email: "customer@example.com",
  name: "John Doe",
  metadata: {
    user_id: "12345"
  }
)

# Retrieve customer
customer = dodo_payments.customers.retrieve("cus_123")
puts "Customer: #{customer.name} (#{customer.email})"

Hantera prenumerationer

Skapa och hantera återkommande prenumerationer:
# Create a subscription
subscription = dodo_payments.subscriptions.create(
  billing: {
    country: "US",
    city: "San Francisco",
    state: "CA",
    street: "1 Market St",
    zipcode: "94105"
  },
  customer: { customer_id: "cus_123" }, # or { email: "...", name: "..." } for a new customer
  product_id: "pdt_456",
  quantity: 1
)

# Charge an on-demand subscription
# product_price is in the lowest currency denomination (e.g., 2500 = $25.00 USD)
charge = dodo_payments.subscriptions.charge(
  subscription.subscription_id,
  product_price: 2500
)

# Update subscription metadata
updated = dodo_payments.subscriptions.update(
  subscription.subscription_id,
  metadata: { plan_type: "premium" }
)
billing kräver minst den två bokstäver långa ISO country koden. customer accepterar antingen { customer_id: "..." } för att bifoga en befintlig kund eller { email: "...", name: "..." } för att skapa en ny. product_price är i den lägsta valutadenomineringen.

Paginering

Automatisk Paginering

Iterera automatiskt genom alla sidor:
page = dodo_payments.payments.list

# Fetch single item from page
payment = page.items[0]
puts(payment.brand_id)

# Automatically fetches more pages as needed
page.auto_paging_each do |payment|
  puts(payment.brand_id)
end

Manuell Paginering

För mer kontroll över pagineringen:
page = dodo_payments.payments.list

if page.next_page?
  new_page = page.next_page
  puts(new_page.items[0].brand_id)
end

Felfunktion

Hanterar olika Dodo Payments API-fel:
begin
  checkout_session = dodo_payments.checkout_sessions.create(
product_cart: [{product_id: "product_id", quantity: 1}]
  )
rescue Dodopayments::Errors::APIConnectionError => e
  puts("The server could not be reached")
  puts(e.cause)  # an underlying Exception, likely raised within `net/http`
rescue Dodopayments::Errors::RateLimitError => e
  puts("A 429 status code was received; we should back off a bit.")
rescue Dodopayments::Errors::APIStatusError => e
  puts("Another non-200-range status code was received")
  puts(e.status)
end
Implementera logik för omförsök med exponentiell backoff för att hantera begränsningsfel och säkerställa att din applikation hanterar högvolymscenarier smidigt.

Typsäkerhet med Sorbet

Använd Sorbet för typsäkra förfrågningsparametrar:
# Type-safe using Sorbet RBI definitions
dodo_payments.checkout_sessions.create(
  product_cart: [
    Dodopayments::ProductItemReq.new(
      product_id: "product_id",
      quantity: 1
    )
  ]
)

# Hashes work, but are not typesafe
dodo_payments.checkout_sessions.create(
  product_cart: [{product_id: "product_id", quantity: 1}]
)

# You can also splat a full Params class
params = Dodopayments::CheckoutSessionCreateParams.new(
  product_cart: [
    Dodopayments::ProductItemReq.new(
      product_id: "product_id",
      quantity: 1
    )
  ]
)
dodo_payments.checkout_sessions.create(**params)

Avancerad Användning

Odokumenterade Endpoints

Gör förfrågningar till odokumenterade endpoints:
response = dodo_payments.request(
  method: :post,
  path: '/undocumented/endpoint',
  query: {"dog": "woof"},
  headers: {"useful-header": "interesting-value"},
  body: {"hello": "world"}
)

Odokumenterade Parametrar

Skicka odokumenterade parametrar:
checkout_session_response = dodo_payments.checkout_sessions.create(
  product_cart: [{product_id: "product_id", quantity: 1}],
  request_options: {
    extra_query: {my_query_parameter: value},
    extra_body: {my_body_parameter: value},
    extra_headers: {"my-header": value}
  }
)

# Access undocumented response properties
puts(checkout_session_response[:my_undocumented_property])

Rails Integration

Skapa en Initializer

Skapa config/initializers/dodo_payments.rb:
require "dodopayments"

DODO_CLIENT = Dodopayments::Client.new(
  bearer_token: Rails.application.credentials.dodo_api_key,
  environment: Rails.env.production? ? "live_mode" : "test_mode"
)

Service Object Pattern

Skapa en betaltjänst:
# app/services/payment_service.rb
class PaymentService
  def initialize
    @client = DODO_CLIENT
  end

  def create_checkout(items)
    @client.checkout_sessions.create(
      product_cart: items,
      return_url: Rails.application.routes.url_helpers.checkout_return_url
    )
  end

  def process_payment(amount:, currency:, customer_id:)
    @client.payments.create(
      amount: amount,
      currency: currency,
      customer_id: customer_id
    )
  end
end

Controller Integration

Använd i dina Rails-kontroller:
# app/controllers/checkouts_controller.rb
class CheckoutsController < ApplicationController
  def create
    service = PaymentService.new
    session = service.create_checkout(checkout_params[:items])
    
    redirect_to session.url, allow_other_host: true
  rescue Dodopayments::Errors::APIError => e
    flash[:error] = "Payment error: #{e.message}"
    redirect_to cart_path
  end

  private

  def checkout_params
    params.require(:checkout).permit(items: [:product_id, :quantity])
  end
end

Sinatra Integration

Använd med Sinatra-applikationer:
require "sinatra"
require "dodopayments"

configure do
  set :dodo_client, Dodopayments::Client.new(
    bearer_token: ENV["DODO_API_KEY"]
  )
end

post "/create-checkout" do
  content_type :json
  
  begin
    session = settings.dodo_client.checkout_sessions.create(
      product_cart: JSON.parse(request.body.read)["items"],
      return_url: "#{request.base_url}/return"
    )
    
    { checkout_url: session.url }.to_json
  rescue Dodopayments::Errors::APIError => e
    status 400
    { error: e.message }.to_json
  end
end

Resurser

GitHub Repository

Visa källkod och bidra

API Reference

Komplett API-dokumentation

Discord Community

Få hjälp och anslut med utvecklare

Report Issues

Rapportera buggar eller begär funktioner

Support

Behöver du hjälp med Ruby SDK?

Bidra

Vi välkomnar bidrag! Kolla riktlinjer för bidrag för att komma igång.
Last modified on May 14, 2026