Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <script src='https://raw.githubusercontent.com/mozilla/fxpay/master/dist/fxpay.min.js'></script>
</head>
<body>
<script>
function msg(s) {
  var m = document.getElementById('msgs');
  var e = document.createElement('div');
  e.insertBefore(document.createTextNode(s), null);
  m.insertBefore(e, m.firstChild);
}
fxpay.configure({fakeProducts: true});
fxpay.getProducts()
  .then(function(products) {
    products.forEach(function(product) {
      addBuyButtonForProduct(product);
    });
  })
  .catch(function(error) {
    msg('error getting products: ' + error);
  });
function addBuyButtonForProduct(product) {
  var button = document.createElement('button');
  button.textContent = 'Buy ' + product.name;
  button.addEventListener('click', function () {
     fxpay.purchase(product.productId)
      .then(function(purchasedProduct) {
        msg('product purchased! ', purchasedProduct);
      })
      .catch(function(error) {
        msg('error purchasing: ' + error);
      });
 
  });
  document.body.appendChild(button);
}
fxpay.getProducts()
  .then(function(products) {
    products.forEach(function(product) {
    
      if (product.hasReceipt()) {
        product.validateReceipt()
          .then(function(restoredProduct) {
            msg('restored product from receipt:' +  restoredProduct);
          })
          .catch(function(error) {
            msg('error validating receipt: ' + error);
          });
      } else {
        addBuyButtonForProduct(product);
      }
    
    });
  });
</script>
  <div id=msgs style='max-height:200px; overflow:auto;'></div>
  </body>
</html>
Output

This bin was created anonymously and its free preview time has expired (learn why). — Get a free unrestricted account

Dismiss x
public
Bin info
anonymouspro
0viewers