すべての記事

MoMo を Web サイト 2026 に統合する手順 |タン ファット デジタル

technologyFebruary 24, 2026·#Technology

専門家 Tan Phat Digital による MoMo エコシステム統合ロードマップをご覧ください。このレポートは、企業がキャッシュ フローを最適化し、5,000 万人のユーザーに到達するのに役立つ、AiO Unified API アーキテクチャ、セキュリティ メカニズム、および標準的な UAT プロセスに関する実践的な知識を提供します。

MoMo を Web サイト 2026 に統合する手順 |タン ファット デジタル

ベトナムにおける現金経済からデジタル経済への大きな移行は、電子ウォレットが単なる支払いツールではなく、消費者行動の中心的な役割を果たすスーパー アプリケーション (スーパー アプリ) となるという新たな状況を確立しました。 MoMo は、主要なプラットフォームとして、複雑だが統一された技術エコシステムを構築し、オンライン決済、店頭決済からスマート マーケティング、企業財務管理モデルに至るまでのソリューションを企業に提供しています。 MoMo 決済システムを業務運営に統合することは、単なる技術的な要件ではなく、5,000 万人を超えるユーザーのネットワークに到達し、1 日あたり平均 100 万件を超えるトランザクションを処理するための戦略的な決定でもあります。 Tan Phat Digital の専門家による分析によると、このレポートは、法的側面、システム アーキテクチャからセキュリティ プロトコル、統合後の運用手順に至るまで、MoMo 統合プロセスの詳細かつ包括的かつ実践的な見解を提供します。

第 1 章: フィンテック エコシステムにおける MoMo のアーキテクチャと戦略的位置の概要

MoMo の地位は、強力な技術力と市場の変化に対する高い適応力によって強化されています。 MoMo のシステムは、ビジネスの継続性と優れたシステム容量を確保するように設計されています。 MoMo のソリューションはオンライン決済に限定されず、IoT デバイス、AIoT、深い統合を必要としない (Non-Integration) ソリューションにも拡張し、零細企業から多国籍企業まであらゆる種類のビジネスのニーズを満たします。

1.1.成長指標とネットワークの強さ

MoMo に対するパートナーの信頼は、安定した成長数値によって証明されています。力強く成長するネットワークでマーケット シェアを共有することは、企業にとって収益を最適化し、顧客の支払い障壁を最小限に抑える機会となります。

  • アクティブ ユーザー数: 5,000 万人以上。意味: 巨大な潜在市場にアクセスする能力。

  • 平均トランザクション数: 1 日あたり 1,000,000 トランザクション以上。意味: システムは安定して確実に動作します。

  • オンライン パートナー (オンライン販売者): 1,000 社以上。意味: 幅広い接続ネットワーク。

  • 支払い受付ポイント (オフライン アウトレット): 50,000 ポイント以上。意味: 物理的な販売チャネルをカバーする能力。

  • エージェントおよびパートナー システム: 910,000 を超えるエージェントと 626,000 のパートナー。意味: 入出金と緻密な金融サービスをサポートするインフラストラクチャ。

1.2.コア統合ソリューションの分類

MoMo は幅広い製品を提供しており、企業は自社のリソースやビジネス モデルに合った方法を選択できます。 Tan Phat Digital は、この柔軟性があらゆるタッチ ポイントでカスタマー エクスペリエンス (UX) を最適化するための鍵であると認識しています。

  • ペイメント ゲートウェイ (ペイメント ゲートウェイ): オールインワン (AiO) ソリューションにより、MoMo ウォレット、国内 ATM カード、国際カード (VISA/Master/JCB) や後払いの資金源など、さまざまな支払い方法を 1 つの接続プロセスだけで統合できます。

  • 自動支払い: ワンタイム認証によるワンクリック支払いをサポートし、定期的なサブスクリプション サービスに適しています。

  • 拡張用 SDK (MDK - MoMo カスタマイズ SDK): パートナーのモバイル アプリケーションへの緊密な統合に最適化されたソフトウェア開発キットで、パフォーマンスの高品質でスムーズなエクスペリエンスを実現します。

  • IoT とAIoT ソリューション: 顔認識と QR コード スキャンの両方をサポートする、自動販売機、キオスク、SmartTV、デュアル スクリーン POS などのスマート デバイス向けのソリューション。

  • 非統合ソリューション: SMS やソーシャル ネットワーク経由で送信する静的 QR コードや Bar Link Payment Link など、強力な技術チームを持たない企業向け。

第 2 章: ビジネス プロファイルの登録および認証戦略 (M4B)

MoMo エコシステムで正式な存在を確立するには、企業は MoMo for Business (M4B) 管理ポータルを経由する必要があります。これは単なる管理手順ではなく、技術的な識別パラメータを確立し、後でキャッシュ フローを管理するための基本的な手順です。

2.1. M4B アカウント登録プロセス

プロセスは business.momo.vn で開始されます。企業は、ログイン名 (情報の検索に使用) と高セキュリティのパスワード (8 ~ 18 文字) を含む完全なアカウント情報を入力する必要があります。 Haravan、Sapo、CukCuk などの管理プラットフォームを使用している企業の場合、M4B アカウントの登録は API 接続パラメータを取得するための必須の手順です。

登録から正式運用 (稼働開始) までの標準化されたロードマップは、Tan Phat Digital によって次の厳格な手順でまとめられています。

  1. 販売者プロファイル (Merchant) プロファイルの登録)。

  2. 技術的統合

  3. テスト環境で SIT (システム統合テスト) テストを完了します。

  4. 法的文書を通じてビジネス アカウント認証を実行します。

  5. 実際の環境 (本番) の識別情報 (認証情報) を要求します。

  6. 本番環境でユーザー受け入れ (UAT) のテストを実行し、最終的な承認が必要です。

  7. サービスを承認し、正式に展開しました。

2.2.法的文書と認証要件

正確な文書を提供することで、MoMo の QA チームと法務チームによる承認の速度が決まります。書類要件は次のとおりです。

  • 企業の場合: ビジネス登録ライセンス (GPKD) の原本または公証コピー、鮮明な画像。

  • 個人事業世帯の場合: 代表者の ID カード / CCCD (表と裏の写真、ぼかしや角がカットされていないもの)。

  • ユニットにはありません。ビジネス ライセンス: ID カード/CCCD および店舗所有者情報 (完全な法的地位を持たない小型モデルに適用)。

  • 追加書類: ブランド ロゴ (100x100 ピクセル形式)、納税用紙、委任状。

M4B システムの重要な機能は、電子契約への署名のサポートであり、対面せずにオンボーディング プロセスをスピードアップするのに役立ちます。

第 3 章: オールインワン (AiO) 統合 API ソリューションの技術アーキテクチャ

MoMo の AiO 統合 API ソリューションは、支払い接続の標準化を表しています。パートナーは、さまざまなカード タイプや資金に対して複数の接続フローを維持する必要がなく、単一の API をデプロイするだけで済みます。

3.1.接続識別子パラメータ (認証情報)

統合環境では、パートナーは一連のセキュリティ キーを使用します。テスト環境と本番環境の違いは、これらのキーの値とサーバー アドレス (ドメイン) にあります。

  • パートナー コード: MoMo システム内のビジネスの一意の識別子。

  • アクセス キー: MoMo の API システムへのアクセスを許可するために使用されるキー。

  • 秘密キー: 秘密キー電子署名の作成に使用されます 各 HTTP リクエストの署名。これは、データの整合性を確保する上で最も重要なコンポーネントです。

  • 公開キー: より高度なセキュリティが必要なソリューションの RSA データ暗号化アルゴリズムで使用されます。

3.2.インフラストラクチャとネットワーク構成 (IP ホワイトリスト)

MoMo システムでは、特定の IP アドレス範囲がパートナー サーバーと通信できるように、パートナーがファイアウォールを構成する必要があります:

  • サンドボックス環境 (テスト): ドメイン test-payment.momo.vn。受信 IP: 210.245.113.71。送信 IP: 118.69.210.244118.68.171.198.

  • 本番環境: ドメイン payment.momo.vn。受信 IP: 118.69.212.158。送信 IP: 118.69.210.244116.103.110.134 (2024 年 9 月 11 日更新)。

第 4 章: セキュリティ メカニズムとデジタル署名プロトコル

トランザクション情報のセキュリティは、Fintech システムにおける最優先事項です。 MoMo はデジタル署名を使用してデータを認証し、情報が第三者によって変更されていないことを保証します。

4.1. HMAC-SHA256 アルゴリズム

MoMo は、HMAC-SHA256 ハッシュ アルゴリズムを使用して署名を作成します。これは対称アルゴリズムであり、計算に同じ秘密キーを使用します。式:

署名 = HMAC_SHA256(SecretKey, RawString)

4.2. Raw String を作成するためのルール

  • パラメータの並べ替え: フィールド名 (キー名) は、a-z のアルファベット順に並べる必要があります。

  • 文字列形式: key=value ペアを & 文字で区切って連結します。

  • データ ハッシュ: 秘密キーを使用して、新しく作成された文字列をハッシュします。結果は、64 文字の 16 進文字列になります。

Tan Phat Digital 注: クライアント側のソース コード (フロントエンド) の秘密キーは絶対に公開しないでください。署名の作成は常にサーバー側で行う必要があります。

第 5 章: ワンタイム支払いの技術統合プロセス (captureWallet API)

これは、トランザクションの開始、ユーザー ナビゲーション、結果処理を含む、最も一般的な支払いフローです。

5.1.支払いの開始

パートナー サーバーは、次のパラメータを使用して HTTP POST リクエストを MoMo エンドポイントに送信します: partnerCoderequestIdamount (Min 1,000 VND)、orderIdorderInforedirectUrlipnUrlrequestType (captureWallet)、および extraData

5.2.ナビゲーションとユーザー エクスペリエンス

API 呼び出しが成功すると、MoMo は以下を含む JSON を返します:

  • ディープリンク: MoMo アプリを直接開きます (アプリ間の最適化)。

  • payUrl: ブラウザー上の支払いページ URL (デスクトップ/モバイル ウェブ)

  • qrCodeUrl: その場で表示される QR コードを作成するためのデータ。

第 6 章: 即時支払い通知 (IPN) メカニズム

IPN は、ユーザーが後で接続を失った場合でも、サーバー間通信による同期を保証する重要なメカニズムです。

  • 原則: MoMo は HTTP POST を ipnUrl に送信します。ペイロードには、resultCodetransIdamount、および signature が含まれます。

  • サーバー処理: 署名の検証、orderId/amount チェック、および 15 以内の HTTP コード 204 (コンテンツなし) での応答が必要です。

第 7 章: ステータス管理と支払い後の操作

  • ステータスの確認: IPN またはナビゲーションの結果が 30 秒経過しても受信されない場合に使用されます。

  • 返金: 成功したトランザクションに適用されます。 orderId 払い戻しは新しいコードである必要があることに注意してください。

  • 取引のキャンセル (リバース): 取引が保留中であるか、パートナー側に技術的エラーが発生した場合は、すぐに支払います。

第 8 章: MoMo Mini アプリのエコシステム - 「アプリ内アプリ」戦略

MoMo Mini アプリを使用すると、企業は Web ベースのアプリケーションを展開できます。 MoMo プラットフォーム上で直接利用できるため、ストア上の独立したアプリケーションに投資することなく、巨大なユーザー ベースにリーチできます。

第 9 章: オフライン決済ソリューションと POS デバイス

MoMo は、次の方法で支払い機能を物理空間に拡張します。

  • QR 静的コード (静的 QR): 最も単純で、顧客はコードをスキャンして金額を入力します。

  • 動的 QR コード: POS は請求書ごとに固有の QR コードを生成します。顧客はスキャンして確認するだけで済みます。

第 10 章: 重複制御と不変性 (冪等性)

MoMo は、requestId フィールド (UUID V4 を使用する必要があります) を使用して制御します。 31 日間重複します。同じ requestId を受信した場合、システムは再び金額を差し引く代わりに古い結果を返します。

第 11 章: エラー コード システムと例外処理戦略

  • 2xx: 正常に処理されました。

  • 4xx: カウンターパーティ エラー (間違った署名、パラメータの欠落)番号)。

  • 5xx: MoMo システム エラー。

  • コード 0: 成功。

  • コード 1001: 資金が不足しています。

  • コード 1006: ユーザー

第 12 章: SIT と UAT のテスト プロセス

このフェーズでは、サンドボックス環境とMoMo テスト アプリを使用します。デフォルトのテスト ウォレット アカウントのパスワード/OTP は 000000 です。成功したフロー、エラー フロー (資金不足、QR 期限切れ)、セキュリティ フロー (金額の変更) をテストする必要があります。

第 13 章: リファレンス サンプル ソース コード (コード サンプル)

以下は、パートナーが迅速に展開できるように Tan Phat Digital によってコンパイルされた実行可能なサンプル ソース コードです。

13.1. Node.js

JavaScript

// パラメータ
var パートナーコード = "MOMO";
var accessKey = "F8BBA842ECF85";
var Secretkey = "K951B6PE1waDMi640xX08PD3vg6EkVlz";
var requestId = PartnerCode + new Date().getTime();
var orderId = requestId;
var orderInfo = "MoMo で支払う";
var redirectUrl = "https://momo.vn/return";
var ipnUrl = "https://callback.url/notify";
var 金額 = "50000";
var requestType = "キャプチャウォレット"
var extraData = ""; 

// 生の署名の構築
var rawSignature = "accessKey="+accessKey+"&amount=" + amount+"&extraData=" + extraData+"&ipnUrl=" + ipnUrl+"&orderId=" + orderId+"&orderInfo=" + orderInfo+"&partnerCode=" + PartnerCode +"&redirectUrl=" + redirectUrl+"&requestId=" + requestId+"&requestType=" + requestType

const crypto = require('crypto');
var 署名 = crypto.createHmac('sha256', 秘密鍵)
   .update(生の署名)
   .digest('hex');

const requestBody = JSON.stringify({
    パートナーコード : パートナーコード、
    アクセスキー : アクセスキー、
    requestId : リクエストID、
    金額:金額、
    orderId : オーダー ID、
    orderInfo : 注文情報、
    リダイレクト URL : リダイレクト URL、
    ipnUrl : ipnUrl、
    extraData : extraData、
    requestType : requestType、
    署名 : 署名、
    言語: 'en'
});

const https = require('https');
const オプション = {
    ホスト名: 'test-payment.momo.vn',
    ポート: 443、
    パス: '/v2/gateway/api/create',
    メソッド: 'POST'、
    ヘッダー: {
        'コンテンツタイプ': 'アプリケーション/json',
        'コンテンツの長さ': Buffer.byteLength(requestBody)
    }
}
const req = https.request(オプション, res => {
    res.setEncoding('utf8');
    res.on('データ', (本体) => {
        console.log('payUrl: ' + JSON.parse(body).payUrl);
    });
})
req.write(リクエストボディ);
req.end();

13.2. Go (Golang)

Go

パッケージ main
インポート(
	「バイト」
	「暗号/hmac」
	「クリプト/sha256」
	「エンコーディング/16進数」
	「エンコーディング/json」
	「fmt」
	「ネット/http」
	「strconv」
	「github.com/sony/sonyflake」
)

タイプペイロード構造体{
	PartnerCode 文字列 `json:"partnerCode"`
	AccessKey 文字列 `json:"accessKey"`
	リクエストID文字列 `json:"requestId"`
	金額文字列 `json:"amount"`
	オーダーID文字列 `json:"orderId"`
	OrderInfo 文字列 `json:"orderInfo"`
	RedirectUrl 文字列 `json:"redirectUrl"`
	IpnUrl 文字列 `json:"ipnUrl"`
	ExtraData 文字列 `json:"extraData"`
	RequestType 文字列 `json:"requestType"`
	署名文字列 `json:"signature"`
}

関数 main() {
	フレーク := sonyflake.NewSonyflake(sonyflake.Settings{})
	a, _ := flake.NextID()
	b, _ := flake.NextID()

	var orderId = strconv.FormatUint(a, 16)
	var requestId = strconv.FormatUint(b, 16)
	var endpoint = "https://test-payment.momo.vn/v2/gateway/api/create"
	var secretKey = "PPuDXq1KowPT1ftR8DvlQTHhC03aul17"

	var ペイロード = ペイロード{
		パートナーコード: "MOMOIQA420180417"、
		アクセスキー: "SvDmj2cOTYZmQQ3H",
		リクエストID: リクエストID、
		金額: "1000"、
		注文ID: 注文ID、
		OrderInfo: "momo オールインワン",
		RedirectUrl: "https://webhook.site/...",
		IpnUrl: "https://webhook.site/...",
		追加データ: ""、
		リクエストタイプ: "captureWallet",
	}

	var rawSignature bytes.Buffer
	rawSignature.WriteString("accessKey=" + payload.AccessKey + "&amount=" + payload.Amount + "&extraData=" + payload.ExtraData + "&ipnUrl=" + payload.IpnUrl + "&orderId=" + payload.OrderID + "&orderInfo=" + payload.OrderInfo + "&partnerCode=" + payload.PartnerCode + "&redirectUrl=" + payload.RedirectUrl + "&requestId=" + payload.RequestID + "&requestType=" + payload.RequestType)

	h := hmac.New(sha256.New,byte(secretKey))
	h.Write(rawSignature.Bytes())
	payload.Signature = hex.EncodeToString(h.Sum(nil))

	jsonPayload、_ := json.Marshal(ペイロード)
	resp、_ := http.Post(エンドポイント, "アプリケーション/json", bytes.NewBuffer(jsonPayload))
	var 結果マップ[文字列]インターフェイス{}
	json.NewDecoder(resp.Body).Decode(&result)
	fmt.Println("PayUrl は: ", result["payUrl"])
}

13.3.パイソン

パイソン

json をインポートする
UUIDをインポートする
インポートリクエスト
hmacをインポートする
ハッシュライブラリをインポートする

エンドポイント = "https://test-payment.momo.vn/v2/gateway/api/create"
パートナーコード = "MOMO"
アクセスキー = "F8BBA842ECF85"
SecretKey = "K951B6PE1waDMi640xX08PD3vg6EkVlz"
orderInfo = "MoMo で支払う"
redirectUrl = "https://webhook.site/..."
ipnUrl = "https://webhook.site/..."
金額 = "50000"
orderId = str(uuid.uuid4())
requestId = str(uuid.uuid4())
requestType = "キャプチャウォレット"
エクストラデータ = ""

rawSignature = "accessKey=" + accessKey + "&amount=" + amount + "&extraData=" + extraData + "&ipnUrl=" + ipnUrl + "&orderId=" + orderId + "&orderInfo=" + orderInfo + "&partnerCode=" + PartnerCode + "&redirectUrl=" + redirectUrl + "&requestId=" + requestId + "&requestType=" + requestType

h = hmac.new(bytes(secretKey, 'ascii'), bytes(rawSignature, 'ascii'), hashlib.sha256)
署名 = h.hexdigest()

データ = {
    'パートナーコード': パートナーコード、
    'requestId': リクエストID、
    「金額」: 金額、
    'orderId': 注文ID、
    'orderInfo': 注文情報、
    'redirectUrl': リダイレクトURL,
    'ipnUrl': ipnUrl、
    'lang': "vi",
    'extraData': エクストラデータ、
    'requestType': リクエストタイプ、
    '署名': 署名
}

データ = json.dumps(データ)
応答 =requests.post(エンドポイント、データ=データ、ヘッダー={'Content-Type': 'application/json'})
print(response.json()['payUrl'])

13.4. Ruby

Ruby

「net/https」が必要
「uri」が必要です
「json」が必要です
「openssl」が必要
「安全なランダム」が必要です

エンドポイント = "https://test-payment.momo.vn/v2/gateway/api/create"
パートナーコード = "MOMO"
アクセスキー = "F8BBA842ECF85"
SecretKey = "K951B6PE1waDMi640xX08PD3vg6EkVlz"
金額 = "50000"
orderId = SecureRandom.uuid
requestId = SecureRandom.uuid

rawSignature = "accessKey="+accessKey+"&amount="+amount+"&extraData=&ipnUrl=...&orderId="+orderId+"&orderInfo=...&partnerCode="+partnerCode+"&redirectUrl=...&requestId="+requestId+"&requestType=captureWallet"

署名 = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), SecretKey, rawSignature)

jsonRequest = {
    :パートナーコード => パートナーコード、
    :requestId => リクエストID、
    :金額 => 金額、
    :orderId => オーダーID、
    :署名 => 署名、
    :requestType => "キャプチャウォレット"
}

uri = URI.parse(エンドポイント)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path, {'Content-Type' => 'application/json'})
request.body = jsonRequest.to_json
応答 = http.request(リクエスト)
put JSON.parse(response.body)["payUrl"]

13.5。 PHP (初期化と IPN)

PHP

// 支払いを開始する
 $partnerCode, 'requestId' => $requestId, 'amount' => $amount, 'orderId' => $orderId, 'orderInfo' => $orderInfo, 'redirectUrl' => $redirectUrl, 'ipnUrl' => $ipnUrl, 'extraData' => $extraData, 'requestType' => $requestType, '署名' => $signature);
$result =executePostRequest($endpoint, json_encode($data));
$jsonResult = json_decode($result, true);
header('場所: '.$jsonResult['payUrl']);
?>

// IPNの処理

13.6. C# (.NET)

C#

// MoMoSecurity.cs
System.Security.Cryptography を使用します。
System.Text を使用します。

名前空間 MoMo {
    クラス MoMoSecurity {
        public string SignSHA256(文字列メッセージ、文字列キー) {
            byte keyByte = Encoding.UTF8.GetBytes(key);
            バイト messageBytes = Encoding.UTF8.GetBytes(message);
            using (var hmacsha256 = new HMACSHA256(keyByte)) {
                バイトハッシュメッセージ = hmacsha256.ComputeHash(messageBytes);
                文字列 hex = BitConverter.ToString(hashmessage);
                return hex.Replace("-", "").ToLower();
            }
        }
    }
}

// MoMoForm.cs
文字列エンドポイント = "https://test-payment.momo.vn/v2/gateway/api/create";
文字列パートナーコード = "MOMO5RGX20191128";
文字列 accessKey = "SvDmj2cOTYZmQQ3H";
文字列秘密キー = "PPuDXq1KowPT1ftR8DvlQTHhC03aul17";
文字列 orderId = Guid.NewGuid().ToString();
文字列 requestId = Guid.NewGuid().ToString();
文字列金額 = "50000";
// rawHash をアルファベット順に構築します...
MoMoSecurity crypto = new MoMoSecurity();
文字列署名 = crypto.signSHA256(rawHash、秘密鍵);
// HTTP Post リクエストを送信...

MoMo の統合は、単に支払い方法を導入することではなく、包括的なデジタル変革の取り組みです。署名、IPN、およびキーのセキュリティに関する技術標準に準拠することで、企業は信頼性の高い決済システムを構築できるだけでなく、今日のデジタル時代において顧客との強固な信頼を築くことができます。統合の成功は、Tan Phat Digital などの信頼できる部門による、技術的な精度と事業運営戦略の柔軟性の組み合わせにあります。

シェア

コメント

0.0 / 5(0 件の評価)

コメントするにはログインしてください。

まだコメントはありません。最初のコメントを投稿しましょう。