移动支付是非洲大部分地区人们支付的主要方式。仅在卢旺达,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。
试用
- GitHub: https://github.com/francedermaz/openbank-africa-sdk
- npm: https://www.npmjs.com/package/openbank-africa-sdk
采用 MIT 许可,免费且欢迎贡献。如果你正在使用 MTN MoMo 构建应用,尤其是在卢旺达,我很期待收到反馈、问题或 PR。Airtel Money 支持是路线图上的下一步。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.