无法使用Bigcommerce向API发出HTTP请求

时间:2015-06-29 15:01:15

标签: ajax http cross-domain basic-authentication bigcommerce

所以我正在为Bigcommerce工作,为客户建立一个网站。由于Bigcommerce不允许在他们的系统上上传PHP文件,所以我在HTML文件的脚本标记中使用AJAX。我使用的API的文档说明在HTTP基本身份验证的用户名字段中使用我的API密钥,并且所有请求都必须通过HTTPS传输。

首先,这是我的代码

$.ajax({
        type: 'POST',
        url : "https://www.freightview.com/api/v1.0/rates",
        data : ({ myRequest }),
        dataType : "jsonp",
        Accept: 'application/json',
        beforeSend : function(xhr) {
        xhr.setRequestHeader("Authorization", "Basic " +           "MyKey:");
        }
})

我试过了 Username : 'mykey' 和其他一些方法把钥匙放在那里,但继续得到 401 Unauthroized

我已经搜索了一些方法来做到这一点并注意到一些可能的问题:

  • Ajax GET request over HTTPS 在此页面中提到AJAX无法进行跨域HTTPS请求。这是否意味着我必须找到另一种方式来提出请求?如果是这样,我怎么能以我的限制提出这样的要求呢?
  • 是不是我没有正确定义身份验证的用户名?我希望这是唯一的问题,但是我已经在这个网站上看了很多关于AJAX Basic Auth的问题。
  • JQuery Ajax calls with HTTP Basic Authentication提出此问题的用户似乎与我的问题类似,但答案却多种多样,而且我不确定他们是否会在我的情况下工作甚至如何开始实施它们。我需要CORS吗?我甚至可以让CORS在Bigcommerce上工作吗?

因为你可以看到我认为相对简单的代码片段比我想象的要复杂得多,而且我真的可以使用StackOverflow的一些魔法!

编辑:语法和拼写

1 个答案:

答案 0 :(得分:1)

在BigCommerce中,您必须使用Base64对凭据进行编码。

示例:

// Define the string
var string = 'Hello World!';

// Encode the String
var encodedString = btoa(string);
console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"

// Decode the String
var decodedString = atob(encodedString);
console.log(decodedString); // Outputs: "Hello World!"