mpesa-rust

Version Documentation mpesa travis-ci License: MIT

About

An unofficial Rust wrapper around the Safaricom API for accessing M-Pesa services.

Notes

Warning! WIP, not recommended for use in production

Install

Cargo.toml

md [dependencies] mpesa = "0.2.3"

In your lib or binary crate:

rs use mpesa::Mpesa;

Usage

Creating a 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()) ```

Services

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

Author

Collins Muriuki

Contributing

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.