3个版本
0.1.2 | 2024年5月22日 |
---|---|
0.1.1 | 2024年5月19日 |
0.1.0 | 2024年5月19日 |
515 在 Web编程
每月下载 100 次
23KB
307 代码行
Rust的MPESA SDK
此crate提供了一个简化的接口,用于将广泛使用的移动货币服务M-Pesa集成到您的Rust应用程序中。SDK侧重于安全性和速度,使开发人员能够轻松地与Safaricom的Daraja/M-PESA API进行交互。
作者: Irfan Ghat
许可证: MIT
安装
要在您的Rust项目中使用MPESA SDK,请将以下内容添加到您的Cargo.toml
[dependencies]
tokio = { version = "1", features = ["full"] }
mpesa_sdk = "0.1.1" # Current version [BETA]
模块
authentication
:处理与MPESA API的认证。lipa_na_mpesa
:管理Lipa na MPESA交易。
环境管理
SDK支持通过环境变量进行配置,这使得管理不同的环境(例如沙盒、生产)更加容易。
环境变量
在您的.env
文件中或在您的环境中设置以下环境变量
USAGE_TOKEN=YOUR_USAGE_TOKEN
ENVIRONMENT=sandbox # For production use live.
AUTH_TOKEN=YOUR_AUTH_TOKEN
BUSINESS_SHORT_CODE=YOUR_SHORT_CODE
CALLBACK_URL=https://mydomain.com/path
PASSKEY=YOUR_PASS_KEY
示例用法
以下是如何使用SDK提供的认证服务和Lipa na MPESA服务的示例。
认证服务
要启动认证服务,请使用AuthenticationService::init
方法。此方法将处理认证过程,并返回一个包含认证详情的结果。
use tokio::main;
use service_requests::authentication::AuthenticationService;
#[main]
async fn main() {
let auth_result = AuthenticationService::init();
match auth_result.await {
Ok(auth_details) => println!("Authentication successful: {:?}", auth_details),
Err(e) => eprintln!("Authentication failed: {:?}", e),
}
}
Lipa na MPESA服务
要启动Lipa na MPESA交易,请使用LipaNaMpesaService::init
方法。提供必要的参数,例如金额、电话号码、公司名称和交易描述。
use tokio::main;
use service_requests::lipa_na_mpesa::LipaNaMpesaService;
#[main]
async fn main() {
let lipa_na_mpesa_result = LipaNaMpesaService::init(
1, // Amount to transact
254123456789, // Phone number in international format
"CompanyNameLTD".to_string(), // Company name
"The payment has been processed successfully".to_string() // Transaction description
);
match lipa_na_mpesa_result.await {
Ok(transaction_details) => println!("Lipa na MPESA transaction successful: {:?}", transaction_details),
Err(e) => eprintln!("Lipa na MPESA transaction failed: {:?}", e),
}
}
模块详细描述
认证模块
authentication
模块提供了用于使用MPESA API对您的应用程序进行认证的方法。这是获取进行进一步API调用所需的访问令牌所必需的。
方法
AuthenticationService::init()
:启动认证过程。
用法
use service_requests::authentication::AuthenticationService;
async fn authenticate() {
let auth_result = AuthenticationService::init().await;
match auth_result {
Ok(auth_details) => println!("Authentication successful: {:?}", auth_details),
Err(e) => eprintln!("Authentication failed: {:?}", e),
}
}
Lipa na MPESA模块
《lipa_na_mpesa》模块处理Lipa na MPESA交易。该服务允许您向客户的手机发起付款请求。
方法
LipaNaMpesaService::init(amount: u32, phone_number: u64, company_name: String, description: String)
:启动Lipa na MPESA交易。
用法
use service_requests::lipa_na_mpesa::LipaNaMpesaService;
async fn initiate_payment() {
let lipa_na_mpesa_result = LipaNaMpesaService::init(
1, // Amount to transact
254123456789, // Phone number in international format
"CompanyNameLTD".to_string(), // Company name
"The payment has been processed successfully".to_string() // Transaction description
).await;
match lipa_na_mpesa_result {
Ok(transaction_details) => println!("Transaction successful: {:?}", transaction_details),
Err(e) => eprintln!("Transaction failed: {:?}", e),
}
}
配置示例
以下是使用提供的环境变量配置Lipa na MPESA服务的方法示例
use service_requests::authentication::AuthenticationService;
use service_requests::lipa_na_mpesa::LipaNaMpesaService;
use endpoints::ServiceEndpoints;
use std::env;
#[tokio::main]
async fn main() {
// Load environment variables
dotenv::dotenv().ok();
let environment = env::var("ENVIRONMENT").unwrap_or_else(|_| "sandbox".to_string());
let business_short_code = env::var("BUSINESS_SHORT_CODE").expect("BUSINESS_SHORT_CODE must be set");
let callback_url = env::var("CALLBACK_URL").expect("CALLBACK_URL must be set");
let passkey = env::var("PASSKEY").expect("PASSKEY must be set");
// Configure MPESA Express URL
let urls = ServiceEndpoints::new();
let mpesa_express_url = format!("{}{}", environment, &urls.MpesaExpress.url);
// Authenticate
let auth_response = AuthenticationService::init().await.unwrap();
let auth_token = format!("Bearer {}", auth_response.access_token);
// Initiate Lipa na MPESA transaction
let lipa_na_mpesa_result = LipaNaMpesaService::init(
1, // Amount to transact
254123456789, // Phone number in international format
"CompanyNameLTD".to_string(), // Company name
"The payment has been processed successfully".to_string() // Transaction description
).await;
match lipa_na_mpesa_result {
Ok(transaction_details) => println!("Transaction successful: {:?}", transaction_details),
Err(e) => eprintln!("Transaction failed: {:?}", e),
}
}
未来计划
当前和即将实施的项目
目前,SDK公开了用于消费者到企业(C2B)交互的函数,允许客户向企业付款。这包括Lipa na MPESA等服务。
在不久的将来,还将实施企业到企业(B2B)交易。这将使企业之间的交易成为可能,从而扩展SDK的功能,使其涵盖更多用例。
安全回调端点
此外,选择加入的用户将有一个安全端点,用于在Render Cloud(@render-inc)上生成的和配置的回调URL。此端点将处理所有交易后的JSON,减少设置安全端点/域所需的努力。
贡献
欢迎贡献!如果您有任何建议或改进,请在GitHub上打开一个问题或提交一个拉取请求。
许可证
本项目采用MIT许可证。有关详细信息,请参阅LICENSE文件。
支持
有关任何问题或支持,请联系作者[email protected]。
依赖项
~7–18MB
~269K SLoC