apibrasil 1.0.0

SDK oficial Rust da plataforma APIBrasil: WhatsApp, SMS, consultas de CPF/CNPJ, veiculos, CEP, correios, pagamentos PIX/boleto e mais.
Documentation
use crate::core::{IntoBody, Json, Result};

/// Provedor de pagamento Santander.
pub const PROVIDER_SANTANDER: &str = "santander";
/// Provedor de pagamento Inter.
pub const PROVIDER_INTER: &str = "inter";
/// Provedor de pagamento Mercado Pago.
pub const PROVIDER_MERCADO_PAGO: &str = "mercadopago";
/// Provedor de pagamento Sicoob.
pub const PROVIDER_SICOOB: &str = "sicoob";

platform_service! {
    /// Pagamentos e recargas (PIX, boleto e cartão): `/recharge`,
    /// `/{provider}/pix/*`, `/{provider}/boleto/*`,
    /// `/mercadopago/card/*`.
    ///
    /// ```no_run
    /// # use apibrasil::ApiBrasil;
    /// # use serde_json::json;
    /// # async fn exemplo(api: ApiBrasil) -> apibrasil::Result<()> {
    /// api.payments().recharge(json!({ "amount": 50, "type": "pix" })).await?;
    /// api.payments().pix_generate("santander", json!({ "amount": 50 })).await?;
    ///
    /// let pdf = api.payments().boleto_pdf("inter", "ID").await?;
    /// std::fs::write("boleto.pdf", pdf).expect("gravar o boleto");
    /// # Ok(())
    /// # }
    /// ```
    PaymentsService
}

impl PaymentsService {
    /// Detalha uma recarga: `GET /recharge/{identifier}`.
    pub async fn recharge_show(&self, identifier: &str) -> Result<Json> {
        self.base.get(&format!("recharge/{identifier}")).await
    }

    /// Gera uma cobrança PIX: `POST /{provider}/pix/generate`.
    pub async fn pix_generate(&self, provider: &str, body: impl IntoBody) -> Result<Json> {
        self.base
            .post(&format!("{provider}/pix/generate"), body)
            .await
    }

    /// Consulta uma cobrança PIX: `GET /{provider}/pix/{tx_id}`.
    pub async fn pix_status(&self, provider: &str, tx_id: &str) -> Result<Json> {
        self.base.get(&format!("{provider}/pix/{tx_id}")).await
    }

    /// Gera um boleto: `POST /{provider}/boleto/generate`.
    pub async fn boleto_generate(&self, provider: &str, body: impl IntoBody) -> Result<Json> {
        self.base
            .post(&format!("{provider}/boleto/generate"), body)
            .await
    }

    /// Consulta um boleto: `GET /{provider}/boleto/{id}`.
    pub async fn boleto_status(&self, provider: &str, id: &str) -> Result<Json> {
        self.base.get(&format!("{provider}/boleto/{id}")).await
    }

    /// Baixa o PDF de um boleto: `GET /{provider}/boleto/{id}/pdf`.
    pub async fn boleto_pdf(&self, provider: &str, id: &str) -> Result<Vec<u8>> {
        self.base
            .download(&format!("{provider}/boleto/{id}/pdf"))
            .await
    }

    /// Consulta um pagamento de cartão: `GET /mercadopago/card/{id}`.
    pub async fn card_status(&self, id: &str) -> Result<Json> {
        self.base.get(&format!("mercadopago/card/{id}")).await
    }
}

json_get! {
    PaymentsService {
        /// Lista as recargas: `GET /recharges`.
        recharges => "recharges",
        /// Métodos de pagamento do checkout:
        /// `GET /checkout/payment-methods`.
        checkout_payment_methods => "checkout/payment-methods",
        /// Períodos do checkout: `GET /checkout/periods`.
        checkout_periods => "checkout/periods",
    }
}

json_body! {
    PaymentsService {
        /// Cria uma recarga (`pix` | `boleto`): `POST /recharge`.
        recharge => post "recharge",
        /// Processa um pagamento com cartão (Mercado Pago):
        /// `POST /mercadopago/card/process`.
        card_process => post "mercadopago/card/process",
        /// Consulta as parcelas do cartão:
        /// `POST /mercadopago/card/installments`.
        card_installments => post "mercadopago/card/installments",
        /// Valida um cupom: `POST /checkout/validate-coupon`.
        validate_coupon => post "checkout/validate-coupon",
        /// Finaliza o checkout: `POST /checkout/finalize`.
        checkout_finalize => post "checkout/finalize",
    }
}