window.navigator.mozPay

非標準

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 において盛んに議論されています。

関連記事

Document Tags and Contributors

Contributors to this page: ethertank, Yoshino
最終更新者: Yoshino,