Quantcast
Channel: Square Developer Forums - Latest topics
Viewing all articles
Browse latest Browse all 1326

Web Payments SDK Card container not showing

$
0
0

Problem :
Only Pay button is showing and input fields for card is not showing. No errors in console. everything loading correctly.

<?php

?>
<!doctype html>
<html>

<head>
    <link href="<?php echo BASE; ?>assets/css/app.css" rel="stylesheet" />
    <script
        type="text/javascript"
        src="https://sandbox.web.squarecdn.com/v1/square.js"></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>

    <script>
        const appId = 'sandbox-sq0idb-qf0eluugdyZ8rAH_5PcMBg';
        const locationId = 'L32DBA406JD41';

        async function initializeCard(payments) {
            const card = await payments.card();
            await card.attach('#card-container');

            return card;
        }

        async function createPayment(token, verificationToken) {
            const body = JSON.stringify({
                locationId,
                sourceId: token,
                verificationToken,
                idempotencyKey: window.crypto.randomUUID(),
            });

            const paymentResponse = await fetch('/process', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
                body,
            });

            if (paymentResponse.ok) {
                return paymentResponse.json();
            }

            const errorBody = await paymentResponse.text();
            throw new Error(errorBody);
        }

        async function tokenize(paymentMethod) {
            const tokenResult = await paymentMethod.tokenize();
            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);
            }
        }

        // Required in SCA Mandated Regions: Learn more at https://developer.squareup.com/docs/sca-overview
        async function verifyBuyer(payments, token) {
            const verificationDetails = {
                amount: '1.00',
                billingContact: {
                    givenName: 'John',
                    familyName: 'Doe',
                    email: 'john.doe@square.example',
                    phone: '3214563987',
                    addressLines: ['123 Main Street', 'Apartment 1'],
                    city: 'London',
                    state: 'LND',
                    countryCode: 'GB',
                },
                currencyCode: 'GBP',
                intent: 'CHARGE',
            };

            const verificationResults = await payments.verifyBuyer(
                token,
                verificationDetails,
            );
            return verificationResults.token;
        }

        // 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 verificationToken = await verifyBuyer(payments, token);
                    const paymentResults = await createPayment(
                        token,
                        verificationToken,
                    );
                    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>
</body>

</html>

How I can fix this error, I cannot see any error messages in my developer console.

8 posts - 2 participants

Read full topic


Viewing all articles
Browse latest Browse all 1326

Trending Articles