| <h1>This iframe calls shows() via postMessage()</h1> |
| <script> |
| "use strict"; |
| const defaultMethods = Object.freeze([ |
| { supportedMethods: "basic-card" }, |
| { |
| supportedMethods: "https://apple.com/apple-pay", |
| data: { |
| version: 3, |
| merchantIdentifier: "merchant.com.example", |
| countryCode: "US", |
| merchantCapabilities: ["supports3DS"], |
| supportedNetworks: ["visa"], |
| } |
| }, |
| ]); |
| |
| const defaultDetails = Object.freeze({ |
| id: "fail", |
| total: { |
| label: "Total", |
| amount: { |
| currency: "USD", |
| value: "1.00", |
| }, |
| }, |
| }); |
| |
| // We are going to use the id to prove that this works |
| // which we will pass back to the caller |
| window.onmessage = async event => { |
| const { source, data: { id, request } } = event; |
| switch (request) { |
| case "show-payment-request": { |
| const details = Object.assign({}, defaultDetails, { id }); |
| const request = new PaymentRequest(defaultMethods, details); |
| try { |
| const response = await request.show(); |
| source.postMessage(response.toJSON(), window.location.origin); |
| await response.complete(); |
| } catch (err) { |
| source.postMessage({ requestId: "fail" }, window.location.origin); |
| await request.abort(); |
| } |
| } |
| } |
| }; |
| |
| </script> |