An unofficial Rust wrapper around the Safaricom API for accessing M-Pesa services.
Warning! WIP, not recommended for use in production
Cargo.toml
md
[dependencies]
mpesa = "0.2.3"
In your lib or binary crate:
rs
use mpesa::Mpesa;
Client
You will first need to create an instance of the Mpesa
instance (the client). You are required to provide a CLIENTKEY and
CLIENTSECRET. Here is how you can get these credentials for the Safaricom sandbox
environment.
NOTE: only calling unwrap
for demonstration purposes. Errors are handled appropriately in the lib via the MpesaError
enum.
There are two ways you can instantiate Mpesa
:
```rust use mpesa::{Mpesa, Environment}; use std::env;
let client = Mpesa::new( env::var("CLIENTKEY")?, env::var("CLIENTSECRET")?, Environment::Sandbox, ); assert!(client.is_connected().unwrap()) ```
Since the Environment
enum implements FromStr
, you can pass the name of the environment as a &str
and call the parse()
method to create an Environment
type from the string slice:
```rust use mpesa::Mpesa; use std::env;
let client = Mpesa::new( env::var("CLIENTKEY")?, env::var("CLIENTSECRET")?, "sandbox".parse()?, ); assert!(client.is_connected().unwrap()) ```
The following services are currently available from the Mpesa
client as methods that return builders:
rust
let response = client
.b2c("testapi496")
.parties("600496", "254708374149")
.urls("https://testdomain.com/err", "https://testdomain.com/res")
.amount(1000)
.send();
assert!(response.is_ok())
rust
let response = client
.b2b("testapi496")
.parties("600496", "600000")
.urls("https://testdomain.com/err", "https://testdomain.com/api")
.account_ref("254708374149")
.amount(1000)
.send();
assert!(response.is_ok())
rust
let response = client
.c2b_register()
.short_code("600496")
.confirmation_url("https://testdomain.com/true")
.validation_url("https://testdomain.com/valid")
.send();
assert!(response.is_ok())
```rust
let response = client .c2bsimulate() .shortcode("600496") .msisdn("254700000000") .amount(1000) .send(); assert!(response.is_ok()) ```
rust
let response = client
.account_balance("testapi496")
.urls("https://testdomain.com/err", "https://testdomain.com/ok")
.party_a("600496")
.send();
assert!(response.is_ok())
More will be added progressively, pull requests welcome
Collins Muriuki
Contributions, issues and feature requests are welcome!
Feel free to check issues page. You can also take a look at the contributing guide.
Copyright © 2020 Collins Muriuki.
This project is MIT licensed.