| <!DOCTYPE html> | 
 | <html lang="en"> | 
 | <head> | 
 |  <meta charset="utf-8"> | 
 |  <meta name="viewport" content="width=device-width, initial-scale=1"> | 
 |  <title>PaymentRequest identifier manual test</title> | 
 | </head> | 
 | <body> | 
 |  <div id="contents"> | 
 |  <h1>PaymentRequest identifier manual test</h1> | 
 |  <p>Perform the following steps:</p> | 
 |  <ul> | 
 |  <li>Press 'Buy'</li> | 
 |  <li>In the payment dialog make sure a payment app is selected</li> | 
 |  <li>In the payment dialog press 'Pay'</li> | 
 |  <li>In the launched payment app perform steps to do the payment</li> | 
 |  <li>The response will be processed and below should display 'my_payment_id'</li> | 
 |  </ul> | 
 |  <p>No payment will be processed.</p> | 
 |  <p>Price: USD <strong>$55.00</strong></p> | 
 |  <p><button onclick="onBuyClicked()">Buy</button></p> | 
 |  </div> | 
 |  <pre id="msg"></pre> | 
 |  <script> | 
 |  /** | 
 |  * Initializes the payment request object. | 
 |  * @return {PaymentRequest} The payment request object. | 
 |  */ | 
 |  function buildPaymentRequest() { | 
 |  if (!window.PaymentRequest) { | 
 |  return null; | 
 |  } | 
 |  | 
 |  const supportedInstruments = [{ | 
 |  supportedMethods: 'https://android.com/pay', | 
 |  data: { | 
 |  merchantName: 'Rouslan Solomakhin', | 
 |  merchantId: '00184145120947117657', | 
 |  allowedCardNetworks: ['AMEX', 'MASTERCARD', 'VISA', 'DISCOVER'], | 
 |  paymentMethodTokenizationParameters: { | 
 |  tokenizationType: 'GATEWAY_TOKEN', | 
 |  parameters: { | 
 |  'gateway': 'stripe', | 
 |  'stripe:publishableKey': 'pk_live_lNk21zqKM2BENZENh3rzCUgo', | 
 |  'stripe:version': '2016-07-06', | 
 |  }, | 
 |  }, | 
 |  }, | 
 |  }, { | 
 |  supportedMethods: 'basic-card', | 
 |  data: { | 
 |  supportedNetworks: ['unionpay', 'visa', 'mastercard', 'amex', 'discover', | 
 |  'diners', 'jcb', 'mir', | 
 |  ], | 
 |  supportedTypes: ['prepaid', 'debit', 'credit'], | 
 |  }, | 
 |  }]; | 
 |  | 
 |  const details = { | 
 |  id: 'my_payment_id', | 
 |  total: { | 
 |  label: 'Donation', | 
 |  amount: { | 
 |  currency: 'USD', | 
 |  value: '55.00', | 
 |  }, | 
 |  }, | 
 |  displayItems: [{ | 
 |  label: 'Original donation amount', | 
 |  amount: { | 
 |  currency: 'USD', | 
 |  value: '65.00', | 
 |  }, | 
 |  }, { | 
 |  label: 'Friends and family discount', | 
 |  amount: { | 
 |  currency: 'USD', | 
 |  value: '-10.00', | 
 |  }, | 
 |  }], | 
 |  }; | 
 |  | 
 |  let request = null; | 
 |  | 
 |  try { | 
 |  request = new PaymentRequest(supportedInstruments, details); | 
 |  if (request.canMakePayment) { | 
 |  request.canMakePayment().then(function(result) { | 
 |  console.log(result ? 'Can make payment' : 'Cannot make payment'); | 
 |  }).catch(function(err) { | 
 |  console.log(err); | 
 |  }); | 
 |  } | 
 |  } catch (e) { | 
 |  console.log('Developer mistake: \'' + e + '\''); | 
 |  } | 
 |  | 
 |  return request; | 
 |  } | 
 |  | 
 |  let request = buildPaymentRequest(); | 
 |  | 
 |  /** | 
 |  * Launches payment request that does not require shipping. | 
 |  */ | 
 |  function onBuyClicked() { // eslint-disable-line no-unused-vars | 
 |  if (!window.PaymentRequest || !request) { | 
 |  console.log('PaymentRequest API is not supported.'); | 
 |  return; | 
 |  } | 
 |  | 
 |  try { | 
 |  request.show() | 
 |  .then(function(instrumentResponse) { | 
 |  window.setTimeout(function() { | 
 |  instrumentResponse.complete('success') | 
 |  .then(function() { | 
 |  let element = document.createElement('pre'); | 
 |  element.innerHTML = instrumentResponse.requestId; | 
 |  document.getElementById('msg').appendChild(element); | 
 |  }) | 
 |  .catch(function(err) { | 
 |  console.log(err); | 
 |  request = buildPaymentRequest(); | 
 |  }); | 
 |  }, 2000); | 
 |  }) | 
 |  .catch(function(err) { | 
 |  console.log(err); | 
 |  request = buildPaymentRequest(); | 
 |  }); | 
 |  } catch (e) { | 
 |  console.log('Developer mistake: \'' + e + '\''); | 
 |  request = buildPaymentRequest(); | 
 |  } | 
 |  } | 
 |  </script> | 
 | </body> | 
 | </html> | 
 |  |