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認証
  • コレクション:Request to Pay、トランザクションステータス、口座残高
  • ディスバースメント:ユーザーへの送金、送金ステータスの確認
  • MTN独自のエラー参照からマッピングされた型付きエラー(2時に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ドキュメントで探す必要はありません。

「MoMo SDK」ではなく「OpenBank Africa」とした理由
アーキテクチャは意図的にアダプター中心に構築されています。MTN MoMoが最初のものですが、最終的にはAirtel Moneyや他のプロバイダーも同じインターフェースでサポートし、複数のアフリカ市場を対象とするアプリの決済機能を構築する開発者が、プロバイダーごとに異なるSDKを学ぶ必要がないようにすることを目指しています。

試してみる

MITライセンスで、無料かつオープンソースです。コントリビューションも歓迎しています。MTN MoMoを使った開発、特にルワンダでの開発をされている方は、フィードバック、イシュー、PRをお待ちしています。Airtel Moneyのサポートはロードマップの次の予定です。