javascript - 将旧网站与 Square Checkout API 集成

标签 javascript json square

请原谅我的天真,但我是一个进入现代时代的老开发人员。简而言之,我有一个用 ASP 编程的旧网站(我知道,我知道),需要使用 Square Checkout API 进行非常简单的付款处理。因此,我需要向 Square 发送 JSON 请求并处理其响应。我使用 Javascript 创建了一个非常非常精简的 JSON 请求,将其发送到 Square 以进行测试,但似乎无法处理响应“null”。我无法判断我是否只是没有得到响应和/或我的代码在接收 JSON 返回时是否不正确。就目前情况而言,我只是尝试接收响应并将其打印到屏幕上,然后添加代码来解析它,然后根据 API 文档重定向回 Square。我做错了什么??
[请注意,我之前已将 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": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6b0804050d1e180e0f2b0612041c05180a061b070e18021f0e45080406" rel="noreferrer noopener nofollow">[email protected]</a>",

       "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>

最佳答案

您正在使用异步请求

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

对于异步请求,您还应该定义

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

document.write 只能在加载 html 时执行输出。 所以有可能你的请求是可以的,但是你看不到。

您也可以尝试(仅用于调试)同步请求

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

和 console.log 以查看浏览器控制台中的输出,或者 使用这个代替 document.write

document.body.innerHTML += returnJSON

关于javascript - 将旧网站与 Square Checkout API 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50025799/

相关文章:

javascript - 动态调整动态 iframe 的大小

android - 延迟 MockWebServer 响应

c++11 - 向量的分段平方,C++ Eigen 中两个向量的分段乘积

c++ - 计算最多包含 K 个(随机放置)的 NxN 矩阵中最大正方形的面积

javascript - ES6中同步加载运行时确定名称的模块

Javascript 一次执行多个操作

javascript - View 模板之间的图像更改停止 onclick 下拉菜单?

php - 改造 2 : NO Request Body even there is

json - Loganalytics 工作区 ID 参数模板

jquery - Internet Explorer $.ajax/MVC JSON 调用失败