| Crates.io | async-mpesa |
| lib.rs | async-mpesa |
| version | 0.2.1 |
| created_at | 2023-08-12 18:59:38.502897+00 |
| updated_at | 2025-03-25 15:48:11.221967+00 |
| description | A rust library for accessing mpesa apis |
| homepage | |
| repository | https://github.com/VicStew/async-mpesa |
| max_upload_size | |
| id | 942942 |
| size | 82,803 |
This is an async rust library for accessing the mpesa apis.
use serde::{Serialize, Deserialize};
use base64::{Engine as _, engine::general_purpose};
#[derive(Debug. Serialize, Deserialize)]
struct Response {
access_token: String,
expires_in: String,
}
#[tokio::main]
async fn main() {
let consumer_key = "Your consumer key here".to_string();
let consumer_secret = "Your consumer secret".to_string();
let client = reqwest::Client::new();
let auth = format!("{}:{}", consumer_key, consumer_secret);
let auth = general_purpose::URL_SAFE.encode(auth);
let body = client.get("mpesa token url here")
.header("Authorization", format!("Basic {}", auth))
.send()
.await
.unwrap();
let bytes = body
.bytes()
.await
.unwrap();
let response: Response = serde_json::from_slice(bytes.as_ref())
.unwrap();
println!("{:?}", response);
}
An Example of a Mpesa Express (STK Push) request:
let config = MpesaConfig::new().with_access_token();
/// Create a client to make requests with default config or you can provide your own check the docs for more info
let client = Client::with_config(config);
/// all fields must be provided as strings
let request = ExpressPushRequestArgs::default()
.PartyA("")
.PartyB("")
.Amount("")
.Password(shortcode, passkey, timestamp)
.AccountReference("")
.TransactionType("")
.BusinessShortCode("")
.CallbackURL("")
.TransactionDesc("")
.Timestamp("")
.PhoneNumber("")
.build()
.unwrap();
let response = client
///the appropriate method is required for the respective api you are trying to access.
.stkpush()
.create(request)
.await
.unwrap();
println!("{:?}", response);
To access different request use the following methods to access the apis mpesa provides.
AccountBalanceRequestArgs::Default()
B2bExpressRequestArgs::Default()
B2cTopUpRequestArgs::Default()
B2CRequestArgs::Default()
BusinessBuyGoodsRequestArgs::Default()
ReconciliationRequestArgs::Default()
BillOnboardingRequestArgs::Default()
BillUpdateArgs::Default()
BusinessPayBillRequestArgs::Default()
CancelInvoiceRequestArgs::Default()
ExpressQueryRequestArgs::Default()
QRRequestArgs::Default()
RatibaRequestArgs::Default()
ReversalRequestArgs::Default()
ExpressPushRequestArgs::Default()
TransactionStatusRequestArgs::Default()
TaxRemitRequestArgs::Default()
Note you can override the default configs eg. The Mpesa API urls. You can do this by using the
.with_access_token()
.with_api_url()
.with_environment()
functions when creating the client to override the default behaviour and switch url or switch url environments by specifying the environment, by passing this enum to the with_environment function.
pub enum Environment {
Sandbox,
Production,
}