Flutter插件mpesadaraja的使用_Dart 包装器用于 M-Pesa Daraja API,由 Safaricom 提供。M-Pesa 是一种移动电话上的货币转账、融资和微型金融服务

Flutter插件mpesadaraja的使用_Dart 包装器用于 M-Pesa Daraja API,由 Safaricom 提供。M-Pesa 是一种移动电话上的货币转账、融资和微型金融服务

mpesa-daraja-plugin-flutter-dart

Dart 包装器用于 M-Pesa Daraja API,由 Safaricom 提供。M-Pesa 是一种移动电话上的货币转账、融资和微型金融服务,于 2007 年由 Vodafone 为 Safaricom 和 Vodacom 在肯尼亚和坦桑尼亚推出,它们分别是这两个国家最大的移动网络运营商。

功能

  • [+] Lipa na M-Pesa(通过手机支付)
  • [inprogress] C2B(客户到业务)
  • [inprogress] B2B(业务到业务)
  • [inprogress] C2B(客户到业务)
  • [inprogress] B2C(业务到客户)
  • [inprogress] TRANSACTION STATUS(交易状态)
  • [inprogress] ACCOUNT BALANCE(账户余额)
  • [inprogress] REVERSAL(撤销)

开始使用

在开始开发之前,你需要从 Safaricom 获取一些东西。

  1. Consumer Key
  2. Consumer Secret
  3. 测试凭证(仅限开发/沙箱环境)
  • 如果你还没有,请登录或注册为 Safaricom 开发者 这里
  • 添加一个新的应用 这里
  • 你会被分配一个 Consumer KeyConsumer Secret。这些密钥将用于初始化 M-Pesa 实例。
  • 获取测试凭证 这里
  • 获得的测试凭证仅在沙箱/开发环境中有效。请注意它们。
  • 若要在生产环境中运行,则需要真实的凭证。
  • 若要上线并获得真实凭证,请参考此指南。

pubspec.yaml 文件中添加依赖:

dependencies:
  mpesadaraja: ^0.1.5

Lipa Na MPesa Online

Lipa Na M-Pesa Online 也称为 M-PESA express(STK 推送)是一种商户/企业发起的 C2B(客户到业务)支付。这个过程如以下详细序列图所示:

一旦你作为商户集成了该 API,你将能够向客户的手机发送付款提示(通常称为 STK 推送提示),请求他们在已注册的 M-PESA 手机号码上输入 M-PESA 密码以授权并完成支付。

创建 MpesaDaraja 对象

MpesaDaraja stkpush = MpesaDaraja(
  consumerKey: '<your_consumer_key>',
  consumerSecret: '<your_consumer_secret>',
  passKey: '<your_pass_key>'
);

或者将其定义为 final

final stkpush = MpesaDaraja(
  consumerKey: '<your_consumer_key>',
  consumerSecret: '<your_consumer_secret>',
  passKey: '<your_pass_key>'
);

参数说明

  • consumerKey: 这是在 Daraja 2.0 网站上创建应用时生成的键。点击这里 创建你的密钥。
  • consumerSecret: 这些密钥是机密的,所以在生产代码中请确保使用环境变量。

初始化过程

使用创建的对象调用 lipaNaMpesaStk() 函数来初始化该过程。如果函数在另一个函数内部,请确保使用 Futureawait 调用该函数,并传递所需的参数:

await stk.lipaNaMpesaStk(
  "<BusinessShortCode>",
  1,
  "254798071520",
  "174379",
  "254798071520",
  "https://mydomain.com/path",
  "accountReference",
  "transactionDesc",
);

传递给 lipaNaMpesaStk() 函数的参数

  • BusinessShortCode: 组织的短代码(Paybill 或 Buygoods - 一个 5 到 7 位数字的账户号),用于标识组织并接收交易。
  • Amount: 交易金额(通常是数字值)。客户支付给短代码的钱。只支持整数。
  • PartyA: 发送钱的手机号码。期望的参数是一个有效的 Safaricom 移动号码,格式为 2547XXXXXXXX。
  • PartyB: 收款的组织。期望的参数是一个 5 到 7 位数字,如上面的短代码描述所示。这可以与 BusinessShortCode 的值相同。
  • PhoneNumber: 接收 STK PIN 提示的移动号码。这个号码可以与 PartyA 的值相同。
  • CallBackUrl: 回调 URL 是一个有效的安全 URL,用于接收来自 M-Pesa API 的通知。这是 M-Pesa A 发送结果的端点。
  • AccountReference: 账户引用:这是一个由系统定义的字母数字参数,作为 CustomerPayBillOnline 交易类型的交易标识符。除了业务名称外,此值还会显示在 STK PIN 提示消息中。最大长度为 12 个字符。
  • TransactionDescription: 这是从系统发送到请求的任何其他信息/注释。最大长度为 13 个字符。

注意事项

  • 不要使用我的演示密钥,因为它们不会工作
Future<void> main() async {
  final stk = MpesaDaraja(
    consumerKey: 'Dm4oJgziMyOT7WTmJzQfEZS6jjzg1Fkd',
    consumerSecret: 'RGRvsUGkO4jc3NuW',
    passKey: 'bfb279f9aa9bdbcf158e97dd71a467cd2e0c893059b10f78e6b72ada1ed2c919',
  );

  await stk.lipaNaMpesaStk(
    "174379",
    1,
    "254798071520",
    "174379",
    "254798071520",
    "https://mydomain.com/path",
    "accountReference",
    "transactionDesc",
  );
}

贡献者

示例

import 'package:mpesadaraja/src/lipa_na_mpesa.dart';

Future<void> main() async {
  final stk = MpesaDaraja(
    consumerKey: 'Dm4oJgziMyOT7WTmJzQfEZS6jjzg1Frd',
    consumerSecret: 'RGRvsUGkO4jc3NuW',
    passKey: 'bfb279f9aa9bdbcf158e97dd71a467cd2e0c893059b10f78e6b72ada1ed2c919',
  );

  await stk.lipaNaMpesaStk(
    "174379",
    1,
    "254798071520",
    "174379",
    "254798071520",
    "https://mydomain.com/path",
    "accountReference",
    "transactionDesc",
  );
}

更多关于Flutter插件mpesadaraja的使用_Dart 包装器用于 M-Pesa Daraja API,由 Safaricom 提供。M-Pesa 是一种移动电话上的货币转账、融资和微型金融服务的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件mpesadaraja的使用_Dart 包装器用于 M-Pesa Daraja API,由 Safaricom 提供。M-Pesa 是一种移动电话上的货币转账、融资和微型金融服务的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在探索和使用Flutter中的未知功能插件(如mpesadaraja)时,通常我们需要参考该插件的官方文档或源代码来了解其提供的API和功能。由于mpesadaraja并非一个广为人知的Flutter插件,我无法提供确切的官方文档链接或详细的使用说明,但我可以给你一个探索和使用Flutter插件的一般流程,并提供一个假设性的代码案例来展示如何集成和使用一个Flutter插件。

探索和使用Flutter插件的一般流程

  1. 查找插件

    • pub.dev上搜索插件名称(如mpesadaraja),查看是否存在该插件。
    • 如果在pub.dev上找不到,可能是私有插件或尚未发布到公共仓库,此时需要联系插件的开发者或查看相关项目文档。
  2. 添加依赖

    • 如果插件存在于pub.dev,可以在pubspec.yaml文件中添加依赖。
  3. 导入插件

    • 在Dart文件中导入插件包。
  4. 查看插件文档

    • 阅读插件的README文件或官方文档,了解插件提供的功能和API。
  5. 编写代码使用插件

    • 根据插件文档提供的示例或API说明,编写代码调用插件功能。

假设性代码案例

以下是一个假设性的代码案例,展示如何集成和使用一个名为mpesadaraja的Flutter插件(请注意,这里的代码是基于假设的,因为mpesadaraja插件的实际API和功能未知)。

pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  mpesadaraja: ^1.0.0  # 假设插件的版本是1.0.0

main.dart

import 'package:flutter/material.dart';
import 'package:mpesadaraja/mpesadaraja.dart';  // 假设插件的导入路径

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('MpesaDaraja Plugin Demo'),
        ),
        body: Center(
          child: MyPluginDemo(),
        ),
      ),
    );
  }
}

class MyPluginDemo extends StatefulWidget {
  @override
  _MyPluginDemoState createState() => _MyPluginDemoState();
}

class _MyPluginDemoState extends State<MyPluginDemo> {
  String _result = 'Unknown';

  void _invokePluginFunction() async {
    // 假设插件有一个名为`someFunction`的方法
    try {
      final result = await MpesaDaraja.someFunction(parameters: {
        'key1': 'value1',
        'key2': 'value2',
      });
      
      setState(() {
        _result = result.toString();
      });
    } catch (e) {
      setState(() {
        _result = 'Error: ${e.toString()}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Plugin Result: $_result'),
        ElevatedButton(
          onPressed: _invokePluginFunction,
          child: Text('Invoke Plugin Function'),
        ),
      ],
    );
  }
}

注意事项

  • 插件文档:务必阅读插件的官方文档,因为每个插件的API和功能都可能不同。
  • 错误处理:在调用插件功能时,添加适当的错误处理逻辑,以处理可能出现的异常情况。
  • 版本兼容性:确保插件版本与你的Flutter SDK版本兼容。

由于mpesadaraja插件的具体信息未知,上述代码仅作为探索和使用Flutter插件的一般流程示例。在实际使用中,你需要根据插件的实际API和功能进行调整。

回到顶部