Интеграция старого сайта с Square Checkout API

Простите мою наивность, но я старый разработчик, перехожу в современную эпоху. Короче говоря, у меня есть старый веб-сайт, запрограммированный на ASP (я знаю, я знаю), который должен использовать API Square Checkout для очень простой обработки платежей. Таким образом, мне нужно отправить запрос JSON в Square и обработать его ответ. Я создал очень, очень урезанный запрос JSON с использованием Javascript для отправки в Square для целей тестирования, но, похоже, не могу получить дескриптор ответа «null». Я не могу сказать, просто ли я не получаю ответа и / или неверен ли мой код при получении возврата JSON. В нынешнем виде я только пытаюсь получить ответ и распечатать его на экране, прежде чем добавить код для его анализа и последующего перенаправления обратно на Square в соответствии с документацией API. Что я делаю не так ??
[Обратите внимание, что я ранее заключил параметр onload в request.response, но он не сработал.]

Мой код ниже. Любая помощь будет искренне признательна!

Спасибо, -Джо

     <html>

       <script>

       var obj = {
       "idempotency_key": "00000000c",
       "order": 
       {
         "reference_id": "00000000c",
         "line_items":
         [{
            "name": "My order",
            "quantity": "1",
            "base_price_money": 
            {
               "amount": 15,
               "currency": "USD"
             }
         }],

        "taxes":
        [{
           "name": "Sales Tax",
           "percentage": "8.5"
        }]
      },

       "ask_for_shipping_address": false,
       "merchant_support_email": "[email protected]",

       "redirect_url": "https://www.myownsamplesite.com/success.asp"
    }

    var myJSON = JSON.stringify(obj);

    var request = new XMLHttpRequest();

     request.open('POST', 'https://connect.squareup.com/v2/locations/{location_ID_removed_for_security}/checkouts', true);
     request.setRequestHeader('Authorization', '{auth_token_removed_for_security}');
     request.setRequestHeader('Accept','application/json');
     request.setRequestHeader('Content-Type','application/json');
     request.responseType = "json";
     request.send(myJSON);

     var returnJSON = request.response;
     document.write(returnJSON);
    </script>
  </html>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
251
2

Ответы 2

Вы используете асинхронный запрос

request.open('POST', URL, true); // <- true means asynchronous

для асинхронного запроса вы также должны определить

req.onreadystatechange = function () {
  if (req.readyState == 4) {
     if (req.status == 200)
      console.info(req.responseText);
     else
      console.info("Error loading page\n");
  }
};

document.write может выполнять вывод только во время загрузки html. Так что возможно, что ваш запрос в порядке, но вы его не видите.

вы также можете попробовать (только для отладки) синхронный запрос

request.open('POST', URL, false);

и console.info, чтобы увидеть вывод в консоли браузера, или вместо document.write используйте это

document.body.innerHTML += returnJSON

Вы не получаете ответа.

Вам следует абсолютноникогда использовать JavaScript на стороне клиента для хранения вашего токена доступа для Square или любого API. Люди могут просто проверить источник вашего сайта, а затем получить полный доступ к API Square для вашей учетной записи. Чтобы помочь вам запомнить это, Square не отвечает на клиентские запросы на основе javascript.

Вместо этого вам следует использовать внутренний язык для создания форм оформления заказа (которые вы можете вызывать через ajax, как описал Саша) или даже использовать бессерверную функцию для создания проверок, как описано здесь: https://medium.com/square-corner-blog/super-simple-serverless-ecommerce-68d2792e8285

Другие вопросы по теме