3 releases

0.1.2 Oct 6, 2023
0.1.1 Oct 1, 2023
0.1.0 Oct 1, 2023

#213 in Finance

Custom license

59KB
1K SLoC

Zarinpal payment gateway api

This's a rust implementation of zarinpal payment gateway api client.

Installation

cargo add zarinpal

Usage example

Here's how you can get started with the crate

Initialize client

use zarinpal::prelude::*;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // Default merchant_id to be used in every request.
    let zarinpal = Zarinpal::new("merchant_id")?;

    Ok(())
}

Request a basic payment

    // ~~~ sniff ~~~

    let request = zarinpal
        .request_payment(10000, "example.com".parse()?, "Test payment")
        .build()
        .await?;

Verify a payment

    // ~~~ sniff ~~~

    let verified = zarinpal
        .verify_payment(request.authority(), 10000)
        .build()
        .await?;

Request payment with metadata

    // ~~~ sniff ~~~

    let request_2 = zarinpal
        .request_payment(10000, "example.com".parse()?, "Test payment")
        .metadata(
            Metadata::builder()
                .mobile("98912345678")
                .email("test@example.com")
                .build(),
        )
        .build()
        .await?;

Change currency in a payment

    // ~~~ sniff ~~~

    let request_3 = zarinpal
        .request_payment(10000, "example.com".parse()?, "Test payment")
        .currency(Currency::IRT) // Tomans
        .build()
        .await?;

Payment request with wages

    // ~~~ sniff ~~~

    let request_4 = zarinpal
        .request_payment(10000, "example.com".parse()?, "Test payment")
        .wages([
            Wage::builder()
                .iban("...")
                .amount(5000)
                .description("To my first friend")
                .build(),
            Wage::builder()
                .iban("...")
                .amount(5000)
                .description("To my second friend")
                .build(),
        ])
        .build()
        .await?;

Unverified payments

Revert a list of 100 recent unverified payments.

    // ~~~ sniff ~~~

    let unverified_payments = zarinpal.unverified_requests().build().await?;

    for unverified in unverified_payments.authorities() {
        println!("{}", unverified.authority())
    }

Happy making money 🔥

Dependencies

~4–16MB
~222K SLoC