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 —— 一款可供行動應用程式直接使用的工具,具備完整的 TypeScript 型別,且無需每次從頭撰寫 OAuth2、沙盒佈建與錯誤處理的樣板程式碼。
因此我建立了一個:openbank-africa-sdk。

功能特色

  • 自動處理 MTN MoMo 沙盒佈建(API 使用者 + API 金鑰建立)
  • OAuth2 驗證並具備自動權杖刷新功能
  • 收款:請求付款、交易狀態查詢、帳戶餘額查詢
  • 付款:向使用者匯款、查詢轉帳狀態
  • 型別化錯誤,根據 MTN 官方錯誤參考對應(不再需要猜測 INTERNAL_PROCESSING_ERROR 在凌晨兩點的意思)
  • 零執行期依賴 —— 在 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 支援是下一步的開發目標。