#payment #api #http-api #http #web #sdk

app mpesa-sdk

此crate提供了一个简化的接口,用于将广泛使用的移动货币服务M-Pesa集成到您的应用程序中

3个版本

0.1.2 2024年5月22日
0.1.1 2024年5月19日
0.1.0 2024年5月19日

515Web编程

Download history 303/week @ 2024-05-17 45/week @ 2024-05-24 1/week @ 2024-06-07

每月下载 100

MIT 许可证

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