Building an Open Source SDK for MTN Mobile Money (React Native/TypeScript) 的封面图片

Frankcdr

移动支付是非洲大部分地区人们支付的主要方式。仅在卢旺达,MTN 移动支付(MoMo)就拥有超过 300 万活跃用户,并且是当地企业首选的支付方式,而不是信用卡或银行转账。
几年前,MTN 向第三方开发者开放了其 MoMo API,此后出现了一些服务器端封装库(Node、PHP、Python)。但一直缺少一个 React Native 客户端 SDK —— 移动应用可以直接使用的 SDK,带有完善的 TypeScript 类型,且无需每次都从头处理 OAuth2、沙箱配置和错误处理等繁琐工作。
因此,我构建了一个 SDK:openbank-africa-sdk。

功能特性

  • 自动处理 MTN MoMo 沙箱配置(API 用户 + API 密钥创建)
  • OAuth2 认证,支持自动令牌刷新
  • 收款功能:请求支付、交易状态、账户余额查询
  • 付款功能:向用户转账、查询转账状态
  • 类型化错误,映射自 MTN 官方错误参考(无需再猜测 INTERNAL_PROCESSING_ERROR 在凌晨 2 点代表什么)
  • 零运行时依赖 —— 在 Node.js 后端或 React Native 应用中表现一致

快速示例

import { OpenBankClient } from 'openbank-africa-sdk';

const client = new OpenBankClient({
  adapter: 'mtn-momo',
  subscriptionKey: process.env.MTN_SUBSCRIPTION_KEY,
  callbackHost: 'https://my-app.com/webhooks/momo',
  environment: 'sandbox',
});

await client.authenticate();

const payment = await client.collections.requestToPay({
  amount: 5000,
  currency: 'RWF',
  phoneNumber: '250788123456',
  externalId: 'order-123',
  payerMessage: 'Payment for order #123',
});

const status = await client.collections.getStatus(payment.referenceId);

Enter fullscreen mode Exit fullscreen mode

就这样。无需手动生成 UUID,无需手动构建令牌请求的 Basic Auth 头,无需翻阅 API 文档来记住每个头字段的位置。

为什么叫“OpenBank Africa”而不是“MoMo SDK”
架构设计采用了适配器模式。MTN MoMo 是第一个适配器,但目标是最终支持 Airtel Money 和其他提供商使用同一接口。这样,面向多个非洲市场的应用开发者无需为每个支付提供商学习不同的 SDK。

试用

采用 MIT 许可,免费且欢迎贡献。如果你正在使用 MTN MoMo 构建应用,尤其是在卢旺达,我很期待收到反馈、问题或 PR。Airtel Money 支持是路线图上的下一步。