Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Navigator.mozPay()

非標準
This feature is not on a current W3C standards track, but it is supported on the Firefox OS platform. Although implementations may change in the future and it is not supported widely across browsers, it is suitable for use in code dedicated to Firefox OS apps.

This API is available on Firefox or Firefox OS for installed or higher privileged applications.

概要

mozPay 関数は決済の実行に使用され、アプリ内課金を実現します。

構文

var request = navigator.mozPay(jwts);
jwts
JSON Web トークン の配列。

警告: 署名は アプリケーション秘密鍵 に由来することから、JSON Web トークンへの署名は必ずサーバサイドで行う必要があります。権限のないユーザがアプリケーション秘密鍵へアクセスすることのないよう注意してください。

戻り値

DOMRequest オブジェクト。

// 購入を開始します。具体的にはこれを「購入」ボタン上のクリックハンドラに設定します。
purchaseSomething("A nice unicorn");

function purchaseSomething(productID) {
  var xhr = new XMLHttpRequest();
  xhr.responseType = 'json';

  // productID をサーバへ送信し、
  // JWT の配列を受け取る準備をします。
  xhr.open('POST', '/create_jwts');

  xhr.addEventListener('load', function () {
    // JSON レスポンスから JWT と transactionID を受け取ります。これは以下のような形式です。
    // {"jwts": ["jwt1...", "jwt2..."], "transactionID": "1234"}
    var jwts = xhr.response.jwts;
    var transactionID = xhr.response.transactionID;

    // JSON Web トークンを決済プロバイダに渡します。
    var request = navigator.mozPay(jwts);

    // 決済ウィンドウのために成功・失敗ハンドラを用意します。
    request.onsuccess = function () {
      console.log('ユーザの決済フローが正常に完了しました');
      // 決済フローは完了しましたが、決済が成立したことを確認するため、
      // サーバへポーリングを行って検証された決済結果を待ちます。
      waitForPaymentResult(transactionID);
    };
    request.onerror = function () {
      console.log('申し訳ありませんが、決済フローにエラーが発生しました: ', this.error.name);
    };
  })

  // 情報を送信して決済リクエストを開始し、
  // 署名済み JSON Web トークンを受け取ります。
  // この例では、productID はユーザが購入したい商品の ID です。
  xhr.send(productID);
}

function waitForPaymentResult(transactionID) {
  var xhr = new XMLHttpRequest();
  xhr.responseType = 'json';

  // transactionID のためにポストバック・チャージバックを受信したことを確認する準備をします。
  xhr.open('GET', '/payment_result/' + transactionID);

  xhr.addEventListener('load', function () {
    // 以下のような結果を取得します。
    // {"result": "postback received"} or {"result": "still waiting"}
    if (xhr.response.result == 'postback received') {
      // ポストバック通知を受信し、そこに含まれる JWT 署名を検証しました。
      console.log('成功! 商品は購入されました');
    } else {
      // ポストバック・チャージバックがまだサーバへ送信されていません。3 秒後に再試行します。
      window.setTimeout(function() { waitForPaymentResult(transactionID); }, 3000);
    }
  });

  // リクエストを送信し transactionID のステータスを確認します。
  xhr.send();
}

仕様

どの仕様書にも含まれていません。ただしこの話題は W3C の Web Payment Community Group において盛んに議論されています。

関連記事

ドキュメントのタグと貢献者

 このページの貢献者: fscholz, kohei.yoshino, ethertank
 最終更新者: kohei.yoshino,