Простите мою наивность, но я старый разработчик, перехожу в современную эпоху. Короче говоря, у меня есть старый веб-сайт, запрограммированный на 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>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы используете асинхронный запрос
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