Blame | Last modification | View Log | RSS feed
<html><head><link href="/style.css" rel="stylesheet" /><scripttype="text/javascript"src="https://sandbox.web.squarecdn.com/v1/square.js"></script><script>const appId = 'sandbox-sq0idb-r8fSW7557g5H5dQjlr1MVQ';const locationId = 'L43GY2FSPNWDF';async function initializeCard(payments) {const card = await payments.card();await card.attach('#card-container');return card;}async function createPayment(token) {const body = JSON.stringify({locationId,sourceId: token,idempotencyKey: window.crypto.randomUUID(),});const paymentResponse = await fetch('/payment', {method: 'POST',headers: {'Content-Type': 'application/json',},body,});if (paymentResponse.ok) {return paymentResponse.json();}const errorBody = await paymentResponse.text();throw new Error(errorBody);}// New payment flowasync function tokenize(paymentMethod) {const verificationDetails = {amount: '1.00',billingContact: {givenName: 'John',familyName: 'Doe',email: 'john.doe@square.example',phone: '3214563987',addressLines: ['123 Main Street', 'Apartment 1'],city: 'Tacoma',state: 'WA',countryCode: 'US',},currencyCode: 'USD',intent: 'CHARGE',customerInitiated: true,sellerKeyedIn: false,};const tokenResult = await paymentMethod.tokenize(verificationDetails);if (tokenResult.status === 'OK') {return tokenResult.token;} else {let errorMessage = `Tokenization failed with status: ${tokenResult.status}`;if (tokenResult.errors) {errorMessage += ` and errors: ${JSON.stringify(tokenResult.errors,)}`;}throw new Error(errorMessage);}}// status is either SUCCESS or FAILURE;function displayPaymentResults(status) {const statusContainer = document.getElementById('payment-status-container',);if (status === 'SUCCESS') {statusContainer.classList.remove('is-failure');statusContainer.classList.add('is-success');} else {statusContainer.classList.remove('is-success');statusContainer.classList.add('is-failure');}statusContainer.style.visibility = 'visible';}document.addEventListener('DOMContentLoaded', async function () {if (!window.Square) {throw new Error('Square.js failed to load properly');}let payments;try {payments = window.Square.payments(appId, locationId);} catch {const statusContainer = document.getElementById('payment-status-container',);statusContainer.className = 'missing-credentials';statusContainer.style.visibility = 'visible';return;}let card;try {card = await initializeCard(payments);} catch (e) {console.error('Initializing Card failed', e);return;}async function handlePaymentMethodSubmission(event, card) {event.preventDefault();try {// disable the submit button as we await tokenization and make a payment request.cardButton.disabled = true;const token = await tokenize(card);const paymentResults = await createPayment(token);displayPaymentResults('SUCCESS');console.debug('Payment Success', paymentResults);} catch (e) {cardButton.disabled = false;displayPaymentResults('FAILURE');console.error(e.message);}}const cardButton = document.getElementById('card-button');cardButton.addEventListener('click', async function (event) {await handlePaymentMethodSubmission(event, card);});});</script></head><body><form id="payment-form"><div id="card-container"></div><button id="card-button" type="button">Pay $1.00</button></form><div id="payment-status-container"></div></body></html>