【问题标题】:Integrating old web site with Square Checkout API将旧网站与 Square Checkout API 集成
【发布时间】:2018-04-25 15:13:49
【问题描述】:

请原谅我的天真,但我是一名进入现代的老开发人员。简而言之,我有一个用 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": "confused@myownsamplesite.com",

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


    【解决方案1】:

    您正在使用异步请求

    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
    

    【讨论】:

      【解决方案2】:

      您没有收到回复。

      您应该绝对 永远不要使用客户端 javascript 来存储 Square 或任何 API 的访问令牌。人们可以只检查您网站的来源,然后就可以完全访问您帐户的 Square API。为了帮助您记住这一点,Square 不会响应客户端基于 javascript 的请求。

      您应该改用后端语言来生成结帐表单(您可以按照 Sasha 的描述通过 ajax 调用),或者甚至使用无服务器函数来创建结帐,如下所述:https://medium.com/square-corner-blog/super-simple-serverless-ecommerce-68d2792e8285

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 2017-03-12
        • 1970-01-01
        相关资源
        最近更新 更多