Integra Dodo Payments en tus aplicaciones Rust con un SDK fuertemente tipado y orientado a asincronía, construido sobre Tokio y reqwest
El SDK de Rust proporciona acceso conveniente y orientado a asincronía a la API REST de Dodo Payments desde aplicaciones escritas en Rust. Ofrece solicitudes y respuestas fuertemente tipadas, auxiliares de paginación integrados, y límites de tiempo y entornos configurables.
Por defecto, Client::from_env() lee tu clave API de la variable de entorno DODO_PAYMENTS_API_KEY y utiliza la URL base predeterminada a menos que configures DODO_PAYMENTS_BASE_URL:
También puedes configurar el cliente explícitamente. Client::new devuelve un Result, así que desenvuélvelo con ? dentro de una función que devuelva 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(())}
La URL base predeterminada es https://live.dodopayments.com. Selecciona otro entorno con la enumeración Environment en lugar de codificar URLs directamente:
use dodopayments::{Client, ClientConfig, Environment};let client = Client::new( ClientConfig::from_environment(Environment::TestMode).with_api_key("My API Key"),)?;
Para seguir leyendo la clave API de DODO_PAYMENTS_API_KEY a través de from_env() mientras apuntas a un entorno diferente al predeterminado, sobrescríbelo en la configuración:
use dodopayments::{Client, ClientConfig, Environment};let client = Client::new(ClientConfig::from_env()?.with_environment(Environment::TestMode))?;
billing requiere al menos el código ISO country de dos letras. customer es una enumeración CustomerRequest — pasa AttachExisting para un cliente existente o New para uno nuevo. Los campos de cantidad como product_price están en la denominación de moneda más baja (por ejemplo, 2500 = $25.00 USD).
Las funciones de listado devuelven una página tipada cuyo campo items contiene la página actual de resultados. Recorre cada elemento a través de todas las páginas con 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:?}");}
O avanza una página a la vez con 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, }}
Cada método devuelve un dodopayments::Result<T>. Los fallos se representan mediante la enumeración dodopayments::Error. Haz un match en él para manejar los errores de API de manera distinta a los errores de transporte:
Para llamar a un endpoint que aún no está expuesto como un método tipado, utiliza el constructor de bajo nivel request, que aplica autenticación y la URL base:
let response = client .request(reqwest::Method::GET, "/some/path") .send() .await?;