将旧网站与Square Checkout API

时间:2018-04-25 15:13:50

标签: javascript json square

在这里原谅我的天真,但我是一个走向现代的老开发者。简而言之,我有一个用ASP编程的旧网站(我知道,我知道)需要使用Square Checkout API进行非常简单的付款处理。因此,我需要向Square发送JSON请求并处理其响应。我创建了一个非常非常简单的JSON请求,使用Javascript将其发送到Square进行测试,但似乎无法处理响应,“null”。我不知道我是否只是没有得到任何回复和/或我的代码在接收JSON返回时是否不正确。就目前而言,我只是尝试接收响应并将其打印到屏幕上,然后再添加代码进行解析,然后根据API文档重定向回Square。我做错了什么? [请注意,我之前已将onload参数包装到request.response但它没有触发。]

我的代码如下。任何和所有的帮助将是真诚的感谢!

谢谢你, -Joe

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

2 个答案:

答案 0 :(得分:3)

您正在使用异步请求

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

答案 1 :(得分:1)

您没有收到回复。

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

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