मुख्य सामग्री पर जाएं
Kotlin SDK Kotlin में लिखे गए अनुप्रयोगों से Dodo Payments REST API तक सुविधाजनक पहुंच प्रदान करता है। इसमें नल-संभाव्य मान, अनुक्रम, निलंबित कार्य और अन्य Kotlin-विशिष्ट सुविधाएँ शामिल हैं जो उपयोग में आरामदायक हैं।

स्थापना

ग्रेडल (Kotlin DSL)

अपनी build.gradle.kts में निर्भरता जोड़ें:
build.gradle.kts
implementation("com.dodopayments.api:dodo-payments-kotlin:1.61.5")

मेवेन

अपनी pom.xml में निर्भरता जोड़ें:
pom.xml
<dependency>
  <groupId>com.dodopayments.api</groupId>
  <artifactId>dodo-payments-kotlin</artifactId>
  <version>1.61.5</version>
</dependency>
हमेशा नवीनतम SDK संस्करण का उपयोग करें ताकि Dodo Payments की नवीनतम सुविधाओं तक पहुंच प्राप्त हो सके। नवीनतम संस्करण के लिए Maven Central की जांच करें।
SDK को Kotlin 1.6 या उच्चतर की आवश्यकता होती है और यह JVM और Android प्लेटफार्मों के साथ संगत है।

त्वरित प्रारंभ

क्लाइंट को प्रारंभ करें और एक चेकआउट सत्र बनाएं:
import com.dodopayments.api.client.DodoPaymentsClient
import com.dodopayments.api.client.okhttp.DodoPaymentsOkHttpClient
import com.dodopayments.api.models.checkoutsessions.CheckoutSessionRequest
import com.dodopayments.api.models.checkoutsessions.CheckoutSessionResponse

// Configure using environment variables (DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_BASE_URL)
// Or system properties (dodopayments.apiKey, dodopayments.baseUrl)
val client: DodoPaymentsClient = DodoPaymentsOkHttpClient.fromEnv()

val params: CheckoutSessionRequest = CheckoutSessionRequest.builder()
    .addProductCart(CheckoutSessionRequest.ProductCart.builder()
        .productId("product_id")
        .quantity(1)
        .build())
    .build()
    
val checkoutSessionResponse: CheckoutSessionResponse = client.checkoutSessions().create(params)
println(checkoutSessionResponse.sessionId())
हमेशा अपने API कुंजियों को सुरक्षित रूप से स्टोर करें, जैसे पर्यावरण चर या एन्क्रिप्टेड कॉन्फ़िगरेशन का उपयोग करके। उन्हें संस्करण नियंत्रण में कभी भी कमिट न करें।

मुख्य विशेषताएँ

कोरूटीन

असिंक्रोनस ऑपरेशनों के लिए Kotlin कोरूटीन का पूर्ण समर्थन

नल सुरक्षा

मजबूत त्रुटि हैंडलिंग के लिए Kotlin की नल सुरक्षा का लाभ उठाएं

विस्तार कार्य

बढ़ी हुई कार्यक्षमता के लिए आदर्श Kotlin एक्सटेंशन

डेटा क्लासेस

कॉपी और विघटन समर्थन के साथ प्रकार-सुरक्षित डेटा क्लासेस

कॉन्फ़िगरेशन

पर्यावरण चर से

पर्यावरण चर या सिस्टम प्रॉपर्टीज़ से प्रारंभ करें:
val client: DodoPaymentsClient = DodoPaymentsOkHttpClient.fromEnv()

मैनुअल कॉन्फ़िगरेशन

सभी विकल्पों के साथ मैन्युअल रूप से कॉन्फ़िगर करें:
import java.time.Duration

val client = DodoPaymentsOkHttpClient.builder()
    .bearerToken("your_api_key_here")
    .baseUrl("https://live.dodopayments.com")
    .maxRetries(3)
    .timeout(Duration.ofSeconds(30))
    .build()

परीक्षण मोड

परीक्षण/सैंडबॉक्स वातावरण के लिए कॉन्फ़िगर करें:
val testClient = DodoPaymentsOkHttpClient.builder()
    .fromEnv()
    .testMode()
    .build()

टाइमआउट और पुनः प्रयास

वैश्विक या प्रति-निवेदन कॉन्फ़िगर करें:
import com.dodopayments.api.core.RequestOptions

// Global configuration
val client = DodoPaymentsOkHttpClient.builder()
    .fromEnv()
    .timeout(Duration.ofSeconds(45))
    .maxRetries(3)
    .build()

// Per-request timeout override
val product = client.products().retrieve(
    "prod_123",
    RequestOptions.builder()
        .timeout(Duration.ofSeconds(10))
        .build()
)

सामान्य संचालन

चेकआउट सत्र बनाएं

एक चेकआउट सत्र उत्पन्न करें:
val params = CheckoutSessionRequest.builder()
    .addProductCart(CheckoutSessionRequest.ProductCart.builder()
        .productId("prod_123")
        .quantity(1)
        .build())
    .returnUrl("https://yourdomain.com/return")
    .build()

val session = client.checkoutSessions().create(params)
println("Checkout URL: ${session.url()}")

उत्पाद बनाएं

विस्तृत कॉन्फ़िगरेशन के साथ उत्पाद बनाएं:
import com.dodopayments.api.models.products.Product
import com.dodopayments.api.models.products.ProductCreateParams
import com.dodopayments.api.models.misc.Currency
import com.dodopayments.api.models.misc.TaxCategory

val createParams = ProductCreateParams.builder()
    .name("Premium Subscription")
    .description("Monthly subscription with all features")
    .price(
        ProductCreateParams.RecurringPrice.builder()
            .currency(Currency.USD)
            .preTaxAmount(2999) // $29.99 in cents
            .paymentFrequencyInterval(ProductCreateParams.RecurringPrice.TimeInterval.MONTH)
            .paymentFrequencyCount(1)
            .build()
    )
    .taxCategory(TaxCategory.DIGITAL_GOODS)
    .build()

val product: Product = client.products().create(createParams)
println("Created product ID: ${product.productId()}")

लाइसेंस कुंजी सक्रिय करें

ग्राहकों के लिए लाइसेंस कुंजी सक्रिय करें:
import com.dodopayments.api.models.licenses.LicenseActivateParams
import com.dodopayments.api.models.licenses.LicenseActivateResponse

val activateParams = LicenseActivateParams.builder()
    .licenseKey("XXXX-XXXX-XXXX-XXXX")
    .instanceName("user-laptop-01")
    .build()

try {
    val activationResult: LicenseActivateResponse = client.licenses()
        .activate(activateParams)

    println("License activated successfully")
    println("Instance ID: ${activationResult.instanceId()}")
    println("Expires at: ${activationResult.expiresAt()}")
} catch (e: UnprocessableEntityException) {
    println("License activation failed: ${e.message}")
}

उपयोग-आधारित बिलिंग

उपयोग घटनाओं को रिकॉर्ड करें

मीटर के लिए उपयोग को ट्रैक करें:
import com.dodopayments.api.models.usageevents.UsageEventCreateParams
import java.time.OffsetDateTime

val usageParams = UsageEventCreateParams.builder()
    .meterId("meter_123")
    .customerId("cust_456")
    .value(150)
    .timestamp(OffsetDateTime.now())
    .build()

client.usageEvents().create(usageParams)
println("Usage event recorded")

असिंक्रोनस संचालन

असिंक्रोनस क्लाइंट

कोरूटीन-आधारित संचालन के लिए असिंक्रोनस क्लाइंट का उपयोग करें:
import com.dodopayments.api.client.DodoPaymentsClientAsync
import com.dodopayments.api.client.okhttp.DodoPaymentsOkHttpClientAsync
import kotlinx.coroutines.runBlocking

val asyncClient: DodoPaymentsClientAsync = DodoPaymentsOkHttpClientAsync.fromEnv()

runBlocking {
    val customer = asyncClient.customers().retrieve("cust_123")
    println("Customer email: ${customer.email()}")
}

त्रुटि हैंडलिंग

Kotlin की अपवाद हैंडलिंग के साथ त्रुटियों को संभालें:
import com.dodopayments.api.errors.*

try {
    val payment = client.payments().create(params)
    println("Success: ${payment.id()}")
} catch (e: AuthenticationException) {
    println("Authentication failed: ${e.message}")
} catch (e: InvalidRequestException) {
    println("Invalid request: ${e.message}")
    e.parameter?.let { println("Parameter: $it") }
} catch (e: RateLimitException) {
    println("Rate limit exceeded, retry after: ${e.retryAfter}")
} catch (e: DodoPaymentsServiceException) {
    println("API error: ${e.statusCode()} - ${e.message}")
}

कार्यात्मक त्रुटि हैंडलिंग

कार्यात्मक त्रुटि हैंडलिंग के लिए Result का उपयोग करें:
fun safeCreatePayment(client: DodoPaymentsClient): Result<Payment> = runCatching {
    client.payments().create(params)
}

// Usage
safe CreatePayment(client)
    .onSuccess { payment -> println("Created: ${payment.id()}") }
    .onFailure { error -> println("Error: ${error.message}") }
त्रुटि हैंडलिंग के लिए परिणाम प्रकारों के साथ अधिक कार्यात्मक दृष्टिकोण के लिए Kotlin का runCatching का उपयोग करें।

एंड्रॉइड एकीकरण

एंड्रॉइड अनुप्रयोगों के साथ उपयोग करें:
import android.app.Application
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.dodopayments.api.client.DodoPaymentsClient
import kotlinx.coroutines.launch

class PaymentViewModel(application: Application) : ViewModel() {
    private val client = DodoPaymentsOkHttpClient.builder()
        .bearerToken(BuildConfig.DODO_API_KEY)
        .build()
    
    fun createCheckout(productId: String) {
        viewModelScope.launch {
            try {
                val session = client.async().checkoutSessions().create(params)
                // Open checkout URL in browser or WebView
                openUrl(session.url())
            } catch (e: Exception) {
                handleError(e)
            }
        }
    }
}

प्रतिक्रिया सत्यापन

प्रतिक्रिया सत्यापन सक्षम करें:
import com.dodopayments.api.core.RequestOptions

// Per-request validation
val product = client.products().retrieve(
    "prod_123",
    RequestOptions.builder()
        .responseValidation(true)
        .build()
)

// Or validate explicitly
val validatedProduct = product.validate()

उन्नत विशेषताएँ

प्रॉक्सी कॉन्फ़िगरेशन

प्रॉक्सी सेटिंग्स कॉन्फ़िगर करें:
import java.net.InetSocketAddress
import java.net.Proxy

val client = DodoPaymentsOkHttpClient.builder()
    .fromEnv()
    .proxy(
        Proxy(
            Proxy.Type.HTTP,
            InetSocketAddress("proxy.example.com", 8080)
        )
    )
    .build()

अस्थायी कॉन्फ़िगरेशन

क्लाइंट कॉन्फ़िगरेशन को अस्थायी रूप से संशोधित करें:
val customClient = client.withOptions {
    it.baseUrl("https://example.com")
    it.maxRetries(5)
}

Ktor एकीकरण

Ktor सर्वर अनुप्रयोगों के साथ एकीकृत करें:
import io.ktor.server.application.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*

fun Application.configureRouting() {
    val client = DodoPaymentsOkHttpClient.builder()
        .bearerToken(environment.config.property("dodo.apiKey").getString())
        .build()
    
    routing {
        post("/create-checkout") {
            try {
                val request = call.receive<CheckoutRequest>()
                val session = client.checkoutSessions().create(params)
                call.respond(mapOf("checkout_url" to session.url()))
            } catch (e: DodoPaymentsServiceException) {
                call.respond(HttpStatusCode.BadRequest, mapOf("error" to e.message))
            }
        }
    }
}

संसाधन

समर्थन

Kotlin SDK के साथ मदद चाहिए?

योगदान

हम योगदान का स्वागत करते हैं! प्रारंभ करने के लिए योगदान दिशानिर्देशों की जांच करें.