Langsung ke konten utama
SDK C# menyediakan akses yang nyaman ke Dodo Payments REST API dari aplikasi yang ditulis dalam C#. Ini memiliki API berbasis Task async dengan pengetikan yang kuat dan saat ini dalam versi beta.
SDK C# saat ini dalam versi beta. Kami sedang aktif bekerja pada perbaikan dan menyambut umpan balik Anda.

Instalasi

Instal SDK menggunakan .NET CLI:
dotnet add package DodoPayments.Client
SDK memerlukan .NET Standard 2.0 atau yang lebih baru. Ini bekerja dengan ASP.NET Core, aplikasi Console, dan jenis proyek .NET lainnya.

Memulai dengan Cepat

Inisialisasi klien dan buat sesi checkout:
using System;
using DodoPayments.Client;
using DodoPayments.Client.Models.CheckoutSessions;

// Configured using the DODO_PAYMENTS_API_KEY and DODO_PAYMENTS_BASE_URL environment variables
DodoPaymentsClient client = new();

CheckoutSessionCreateParams parameters = new()
{
    ProductCart =
    [
        new()
        {
            ProductID = "product_id",
            Quantity = 1,
        },
    ],
};

var checkoutSessionResponse = await client.CheckoutSessions.Create(parameters);

Console.WriteLine(checkoutSessionResponse.SessionId);
Selalu simpan kunci API Anda dengan aman menggunakan variabel lingkungan, rahasia pengguna, atau Azure Key Vault. Jangan pernah mengkodekannya secara langsung dalam kode sumber Anda atau mengkomitnya ke kontrol versi.

Fitur Utama

Async/Await

API berbasis Task async penuh untuk operasi non-blokir

Strong Typing

Keamanan tipe yang komprehensif dengan tipe referensi nullable

Dependency Injection

Dukungan kelas satu untuk injeksi ketergantungan .NET

Configuration

Konfigurasi sederhana melalui variabel lingkungan atau appsettings.json

Konfigurasi

Variabel Lingkungan

Konfigurasi menggunakan variabel lingkungan:
.env
DODO_PAYMENTS_API_KEY=your_api_key_here
// Automatically reads from environment variables
DodoPaymentsClient client = new();
Lihat tabel ini untuk opsi yang tersedia:
PropertiVariabel lingkunganDiperlukanNilai default
BearerTokenDODO_PAYMENTS_API_KEYtrue-
WebhookKeyDODO_PAYMENTS_WEBHOOK_KEYfalse-
BaseUrlDODO_PAYMENTS_BASE_URLtrue"https://live.dodopayments.com"

Konfigurasi Manual

Konfigurasi secara manual dengan bearer token:
DodoPaymentsClient client = new() { BearerToken = "My Bearer Token" };

Operasi Umum

Buat Sesi Checkout

Hasilkan sesi checkout:
var parameters = new CheckoutSessionCreateParams
{
    ProductCart =
    [
        new()
        {
            ProductID = "prod_123",
            Quantity = 1
        }
    ],
    ReturnUrl = "https://yourdomain.com/return"
};

var session = await client.CheckoutSessions.Create(parameters);
Console.WriteLine($"Checkout URL: {session.Url}");

Kelola Pelanggan

Buat dan ambil informasi pelanggan:
// Create a customer
var createParams = new CustomerCreateParams
{
    Email = "customer@example.com",
    Name = "John Doe",
    Metadata = new Dictionary<string, string>
    {
        { "user_id", "12345" }
    }
};

var customer = await client.Customers.Create(createParams);

// Retrieve customer
var retrieved = await client.Customers.Retrieve("cus_123");
Console.WriteLine($"Customer: {retrieved.Name} ({retrieved.Email})");

Tangani Langganan

Buat dan kelola langganan berulang:
// Create a subscription
var subscriptionParams = new SubscriptionCreateParams
{
    CustomerID = "cus_123",
    ProductID = "prod_456",
    PriceID = "price_789"
};

var subscription = await client.Subscriptions.Create(subscriptionParams);

// Cancel subscription
await client.Subscriptions.Cancel(subscription.Id);

Paginasi

SDK mendefinisikan metode yang mengembalikan daftar hasil yang dipaginasi dengan cara yang nyaman untuk mengakses hasil baik satu halaman pada satu waktu atau item demi item di seluruh halaman.

Auto-Paginasi

Untuk mengiterasi melalui semua hasil di seluruh halaman, gunakan metode Paginate:
using System;

var page = await client.Payments.List(parameters);
await foreach (var item in page.Paginate())
{
    Console.WriteLine(item);
}

Paginasi Manual

Untuk mengakses item halaman individu dan meminta halaman berikutnya secara manual:
using System;

var page = await client.Payments.List();
while (true)
{
    foreach (var item in page.Items)
    {
        Console.WriteLine(item);
    }
    if (!page.HasNext())
    {
        break;
    }
    page = await page.Next();
}

Integrasi ASP.NET Core

Pendaftaran Layanan

Daftarkan klien di Program.cs:
Program.cs
using DodoPayments.Client;

var builder = WebApplication.CreateBuilder(args);

// Register DodoPayments client
builder.Services.AddSingleton<DodoPaymentsClient>(sp =>
{
    var configuration = sp.GetRequiredService<IConfiguration>();
    return new DodoPaymentsClient
    {
        BearerToken = configuration["DodoPayments:ApiKey"]
    };
});

builder.Services.AddControllers();

var app = builder.Build();
app.MapControllers();
app.Run();

Konfigurasi

Tambahkan konfigurasi di appsettings.json:
appsettings.json
{
  "DodoPayments": {
    "ApiKey": "your_api_key_here"
  }
}

Kontroler API

Buat kontroler menggunakan injeksi ketergantungan:
using Microsoft.AspNetCore.Mvc;
using DodoPayments.Client;
using DodoPayments.Client.Models.CheckoutSessions;

[ApiController]
[Route("api/[controller]")]
public class PaymentsController : ControllerBase
{
    private readonly DodoPaymentsClient _client;
    private readonly ILogger<PaymentsController> _logger;

    public PaymentsController(DodoPaymentsClient client, ILogger<PaymentsController> logger)
    {
        _client = client;
        _logger = logger;
    }

    [HttpPost("checkout")]
    public async Task<IActionResult> CreateCheckout([FromBody] CheckoutRequest request)
    {
        try
        {
            var parameters = new CheckoutSessionCreateParams
            {
                ProductCart = request.Items,
                ReturnUrl = Url.Action("Return", "Checkout", null, Request.Scheme)
            };

            var session = await _client.CheckoutSessions.Create(parameters);

            return Ok(new { checkoutUrl = session.Url });
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Failed to create checkout");
            return BadRequest(new { error = ex.Message });
        }
    }
}

public record CheckoutRequest(List<ProductCartItem> Items);

Pola Lapisan Layanan

Buat layanan untuk logika bisnis:
public interface IPaymentService
{
    Task<CheckoutSessionResponse> CreateCheckoutAsync(List<ProductCartItem> items);
    Task<PaymentResponse> ProcessPaymentAsync(decimal amount, string currency, string customerId);
}

public class PaymentService : IPaymentService
{
    private readonly DodoPaymentsClient _client;
    private readonly ILogger<PaymentService> _logger;

    public PaymentService(DodoPaymentsClient client, ILogger<PaymentService> logger)
    {
        _client = client;
        _logger = logger;
    }

    public async Task<CheckoutSessionResponse> CreateCheckoutAsync(List<ProductCartItem> items)
    {
        var parameters = new CheckoutSessionCreateParams
        {
            ProductCart = items,
            ReturnUrl = "https://yourdomain.com/return"
        };

        return await _client.CheckoutSessions.Create(parameters);
    }

    public async Task<PaymentResponse> ProcessPaymentAsync(
        decimal amount,
        string currency,
        string customerId)
    {
        try
        {
            var parameters = new PaymentCreateParams
            {
                Amount = (long)(amount * 100), // Convert to cents
                Currency = currency,
                CustomerID = customerId
            };

            return await _client.Payments.Create(parameters);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Failed to process payment");
            throw;
        }
    }
}

Rahasia Pengguna (Pengembangan)

Untuk pengembangan, gunakan rahasia pengguna untuk menyimpan kunci API:
dotnet user-secrets init
dotnet user-secrets set "DodoPayments:ApiKey" "your_api_key_here"

Pengujian

Contoh pengujian unit menggunakan xUnit:
using Xunit;
using DodoPayments.Client;
using DodoPayments.Client.Models.CheckoutSessions;

public class PaymentServiceTests
{
    private readonly DodoPaymentsClient _client;

    public PaymentServiceTests()
    {
        _client = new DodoPaymentsClient
        {
            BearerToken = "test_key"
        };
    }

    [Fact]
    public async Task CreateCheckout_ShouldReturnSession()
    {
        // Arrange
        var parameters = new CheckoutSessionCreateParams
        {
            ProductCart =
            [
                new()
                {
                    ProductID = "prod_test",
                    Quantity = 1
                }
            ]
        };

        // Act
        var session = await _client.CheckoutSessions.Create(parameters);

        // Assert
        Assert.NotNull(session);
        Assert.NotNull(session.SessionId);
    }
}

Sumber Daya

Dukungan

Butuh bantuan dengan SDK C#?

Kontribusi

Karena SDK ini dalam versi beta, umpan balik dan kontribusi Anda sangat berharga! Periksa pedoman kontribusi untuk memulai.