يوفر SDK الخاص بـ C# وصولاً ميسراً إلى واجهة برمجة تطبيقات Dodo Payments REST من التطبيقات المكتوبة بـ C#. يتميز بواجهة برمجة تطبيقات تعتمد على async Task مع كتابة قوية.
التثبيت
ثبّت SDK باستخدام .NET CLI:
dotnet add package DodoPayments.Client
يتطلب SDK .NET Standard 2.0 أو أحدث. يعمل مع ASP.NET Core والتطبيقات الطرفية وأنواع مشاريع .NET الأخرى.
بداية سريعة
قم بتهيئة العميل وإنشاء جلسة تسجيل الخروج:
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 );
قم دائمًا بتخزين مفاتيح API الخاصة بك بأمان باستخدام متغيرات البيئة أو أسرار المستخدم أو Azure Key Vault. لا تقم أبدًا بتضمينها مباشرة في رمز المصدر أو الالتزام بها في نظام التحكم في الإصدارات.
الميزات الأساسية
Async/Await واجهة برمجة تطبيقات كاملة تعتمد على async Task للعمليات غير الحظرية
Strong Typing أمان نوع شامل مع أنواع الإشارة القابلة لأن تكون فارغة
Dependency Injection دعم من الدرجة الأولى لحقن التبعيات في .NET
Configuration تكوين بسيط عبر متغيرات البيئة أو appsettings.json
التكوين
متغيرات البيئة
قم بالتكوين باستخدام متغيرات البيئة:
DODO_PAYMENTS_API_KEY = your_api_key_here
// Automatically reads from environment variables
DodoPaymentsClient client = new ();
راجع هذا الجدول للخيارات المتاحة:
الخاصية متغير البيئة مطلوب القيمة الافتراضية BearerTokenDODO_PAYMENTS_API_KEYtrue - WebhookKeyDODO_PAYMENTS_WEBHOOK_KEYfalse - BaseUrlDODO_PAYMENTS_BASE_URLtrue "https://live.dodopayments.com"
التكوين اليدوي
قم بالتكوين يدويًا باستخدام رمز حامل:
DodoPaymentsClient client = new () { BearerToken = "My Bearer Token" };
العمليات الشائعة
إنشاء جلسة تسجيل خروج
أنشئ جلسة تسجيل خروج:
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 } " );
إدارة العملاء
إنشاء معلومات العميل واسترجاعها:
// 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 } )" );
معالجة الاشتراكات
إنشاء وإدارة الاشتراكات المتكررة:
// 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 );
التنقل عبر الصفحات
يحدد SDK طرقًا تُرجع قوائم مُرقمة من النتائج مع طرق مريحة للوصول إلى النتائج صفحة تلو الأخرى أو عنصرًا بعنصر عبر جميع الصفحات.
الترقيم التلقائي للصفحات
للتكرار عبر جميع النتائج عبر كل الصفحات، استخدم الطريقة Paginate:
using System ;
var page = await client . Payments . List ( parameters );
await foreach ( var item in page . Paginate ())
{
Console . WriteLine ( item );
}
الترقيم اليدوي للصفحات
للوصول إلى عناصر صفحة فردية وطلب الصفحة التالية يدويًا:
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 ();
}
تكامل ASP.NET Core
تسجيل الخدمة
سجّل العميل في 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 ();
التكوين
أضف التكوين في appsettings.json:
{
"DodoPayments" : {
"ApiKey" : "your_api_key_here"
}
}
متحكم API
أنشئ متحكمًا باستخدام حقن التبعيات:
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 );
نمط طبقة الخدمة
أنشئ خدمة للمنطق التجاري:
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 ;
}
}
}
أسرار المستخدم (للتطوير)
للتطوير، استخدم أسرار المستخدم لتخزين مفاتيح API:
dotnet user-secrets init
dotnet user-secrets set "DodoPayments:ApiKey" "your_api_key_here"
الاختبار
مثال على اختبار وحدة باستخدام 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 );
}
}
الموارد
الدعم
هل تحتاج مساعدة مع SDK الخاص بـ C#؟
المساهمة
نرحب بالمساهمات! راجع إرشادات المساهمة للبدء.