#payment #api #api-bindings #http-client #paystack

paystack-rs

A unofficial client library for the Paystack API

10 releases

0.2.2 Nov 11, 2023
0.2.1 Sep 21, 2023
0.1.6 Jul 15, 2023

#40 in Finance

MIT license

89KB
1.5K SLoC

paystack-rs

Rust paystack-rs on crates.io paystack-rs  on docs.rs License: MIT

Convenient Async rust bindings and types for the Paystack HTTP API aiming to support the entire API surface. Not the case? Please open an issue. I update the definitions on a weekly basis.

The client aims to make receiving payments for African business or business with African clients building with Rust as hassle-free as possible.

The client currently covers the following section of the API, and the sections to be implemented in order are left unchecked:

  • Transaction
  • Transaction Split
  • Terminal
  • Customers
  • Dedicated Virtual Account
  • Apple Pay
  • Subaccounts
  • Plans
  • Subscriptions
  • Transfer Recipients
  • Transfers
  • Transfers Control
  • Bulk Charges
  • Integration
  • Charge
  • Disputes
  • Refunds
  • Verifications
  • Miscellaneous

Documentation

See the Rust API docs or the examples.

Installation

paystack-rs uses the reqwest HTTP client under the hood and the tokio runtime for async operations.

[dependencies]
paystack-rs = "0.X.X"

You can also download the source code and use in your code base directly if you prefer.

Usage

Initializing an instance of the Paystack client and creating a transaction.

use std::env; 
use dotenv::dotenv; 
use paystack::{PaystackClient, InitializeTransactionBodyBuilder, Error, Currency, Channel};

#[tokio::main]
async fn main() -> Result<(), Error>{
    dotenv().ok();
    let api_key = env::var("PAYSTACK_API_KEY").unwrap();
    let client = PaystackClient::new(api_key);

    let body = InitializeTransactionBodyBuilder::default()
                .amount("10000".to_string())
                .email("email@example.com".to_string())
                .currency(Some(Currency::NGN))
                .channels(Some(vec![
                    Channel::ApplePay,
                    Channel::Bank,
                    Channel::BankTransfer
                ]))
                .build()
                .unwrap();

    let transaction = client
        .transaction
        .initialize_transaction(body)
        .await
        .expect("Unable to create transaction");
         
    Ok(())
}

Contributing

See CONTRIBUTING.md for information on contributing to paystack-rs.

License

Licensed under MIT license (LICENSE-MIT).

Dependencies

~7–21MB
~312K SLoC