app-simple.js (2585B)
1 self.addEventListener('canmakepayment', event => { 2 event.respondWith(true); 3 }); 4 5 self.addEventListener('paymentrequest', event => { 6 const expectedId = 'test-payment-request-identifier'; 7 if (event.paymentRequestId !== expectedId) { 8 const msg = `Expected payment request identifier "${expectedId}", but got "${ 9 event.paymentRequestId 10 }"`; 11 event.respondWith(Promise.reject(new Error(msg))); 12 return; 13 } 14 15 if (event.methodData.length !== 1) { 16 const msg = `Expected one method data, but got ${ 17 event.methodData.length 18 } instead`; 19 event.respondWith(Promise.reject(new Error(msg))); 20 return; 21 } 22 23 const methodData = event.methodData[0]; 24 const expectedMethodNamePrefix = 'http'; 25 if (!methodData.supportedMethods.startsWith(expectedMethodNamePrefix)) { 26 const msg = `Expected payment method name "${methodData.supportedMethods}" to start with ${expectedMethodNamePrefix}"`; 27 event.respondWith(Promise.reject(new Error(msg))); 28 return; 29 } 30 31 const expectedMethodNameSuffix = '/payment-handler/payment-request-event-manual-manifest.json'; 32 if (!methodData.supportedMethods.endsWith(expectedMethodNameSuffix)) { 33 const msg = `Expected payment method name "${methodData.supportedMethods}" to end with ${expectedMethodNameSuffix}"`; 34 event.respondWith(Promise.reject(new Error(msg))); 35 return; 36 } 37 38 if (methodData.data.supportedNetworks) { 39 const msg = 40 'Expected no supported networks in payment method specific data'; 41 event.respondWith(Promise.reject(new Error(msg))); 42 return; 43 } 44 45 if (methodData.displayItems) { 46 const msg = 'Expected no display items'; 47 event.respondWith(Promise.reject(new Error(msg))); 48 return; 49 } 50 51 const total = event.total; 52 if (!total) { 53 const msg = 'Expected total'; 54 event.respondWith(Promise.reject(new Error(msg))); 55 return; 56 } 57 58 if (total.label) { 59 const msg = 'Expected no total label'; 60 event.respondWith(Promise.reject(new Error(msg))); 61 return; 62 } 63 64 const expectedCurrency = 'USD'; 65 if (total.currency !== expectedCurrency) { 66 const msg = `Expected currency "${expectedCurrency}", but got "${ 67 total.currency 68 }"`; 69 event.respondWith(Promise.reject(new Error(msg))); 70 return; 71 } 72 73 const expectedValue = '0.01'; 74 if (total.value !== expectedValue) { 75 const msg = `Expected value "${expectedValue}", but got "${total.value}"`; 76 event.respondWith(Promise.reject(new Error(msg))); 77 return; 78 } 79 80 event.respondWith({ 81 methodName: methodData.supportedMethods, 82 details: {status: 'success'}, 83 }); 84 });