अपनी Rust एप्लिकेशनों में Dodo Payments को एकीकृत करें एक async-प्रथम, सख्ती से टाइप किए गए SDK के साथ जो Tokio और reqwest पर आधारित है।
Rust SDK Rust में लिखी गई एप्लिकेशनों से Dodo Payments REST API तक सुविधाजनक, async-प्रथम पहुँच प्रदान करता है। यह सख्ती से टाइप की गई अनुरोध और प्रतिक्रियाएँ, निर्मित पृष्ठांकन हेल्पर्स, और कॉन्फ़िगरेबल टाइमआउट्स और पर्यावरण प्रदान करता है।
डिफ़ॉल्ट रूप से, Client::from_env() आपके API कुंजी को DODO_PAYMENTS_API_KEY परिवेश वेरिएबल से पढ़ता है और डिफ़ॉल्ट बेस URL का उपयोग करता है जब तक कि आप DODO_PAYMENTS_BASE_URL सेट नहीं करते:
आप क्लाइंट को स्पष्ट रूप से भी कॉन्फ़िगर कर सकते हैं। Client::new एक Result लौटाता है, इसलिए इसे ? के साथ अनलॉक करें जो एक dodopayments::Result लौटाता है:
use dodopayments::{Client, ClientConfig};#[tokio::main]async fn main() -> dodopayments::Result<()> { let client = Client::new( ClientConfig::new("https://live.dodopayments.com").with_api_key("My API Key"), )?; println!("{}", client.base_url()); Ok(())}
डिफ़ॉल्ट आधार URL https://live.dodopayments.com है। URLs को हार्ड-कोड करने के बजाय, Environment एनम का उपयोग करके किसी और पर्यावरण का चयन करें:
use dodopayments::{Client, ClientConfig, Environment};let client = Client::new( ClientConfig::from_environment(Environment::TestMode).with_api_key("My API Key"),)?;
एक गैर-डिफ़ॉल्ट पर्यावरण को लक्ष्य करने के दौरान DODO_PAYMENTS_API_KEY से API कुंजी की रीडिंग जारी रखने के लिए, इसे विन्यास में ओवरराइड करें:
use dodopayments::{Client, ClientConfig, Environment};let client = Client::new(ClientConfig::from_env()?.with_environment(Environment::TestMode))?;
billing के लिए कम से कम दो-अक्षर का ISO country कोड जरूरी है। customer एक CustomerRequest एनम है - एक मौजूदा ग्राहक के लिए AttachExisting पास करें या एक नए के लिए New। राशि क्षेत्रों, जैसे product_price को न्यूनतम मुद्रा विभाजन में रखें (उदाहरण: 2500 = $25.00 USD)।
सूची अंत बिंदु एक टाइप की गई पृष्ठ लौटाते हैं जिसकी items फ़ील्ड वर्तमान परिणामों के पृष्ठ को रखती है। हर पृष्ठ के पार प्रत्येक आइटम को स्ट्रीम करें into_stream के साथ:
use futures::StreamExt;let mut items = Box::pin( client .payments() .list() .query(serde_json::json!({})) .await? .into_stream(),);while let Some(item) = items.next().await { let item = item?; println!("{item:?}");}
या एक समय में एक पृष्ठ आगे बढ़ाएं get_next_page के साथ:
let mut page = client .payments() .list() .query(serde_json::json!({})) .await?;loop { for item in &page.items { println!("{item:?}"); } match page.get_next_page().await? { Some(next) => page = next, None => break, }}
प्रत्येक विधि एक dodopayments::Result<T> लौटाती है। असफलताओं का प्रतिनिधित्व dodopayments::Error एनम द्वारा किया जाता है। इसे हैंडल करने के लिए API त्रुटियों को ट्रांसपोर्ट त्रुटियों से अलग से मिलाएँ:
किसी अंत बिंदु को कॉल करने के लिए जो अभी तक टाइप की गई विधि के रूप में उजागर नहीं किया गया है, निम्न-स्तरीय request बिल्डर का उपयोग करें, जो प्रमाणीकरण और आधार URL लागू करता है:
let response = client .request(reqwest::Method::GET, "/some/path") .send() .await?;