通过AJAX调用BigCommerce API时出现401错误

时间:2016-06-27 08:03:15

标签: jquery ajax api e-commerce bigcommerce

我们希望通过jQuery / AJAX调用API,在快速搜索结果上实现最低购买数量。我们试图调用API但没有得到响应。我们收到以下错误消息:

  

NetworkError:401 Unauthorized - https://mystore.mybigcommerce.com/api/v2/products/product_id

以下是我们在quicksearch.js文件中添加的代码。

var key = 'API key';
var auth = 'Basic ' + btoa('username:'+key);
var url = 'https://mystore.mybigcommerce.com/api/v2/products/product_id';

$.ajax({
    url : url,
    method : 'GET',
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    async: false,
    crossDomain: true,
    beforeSend : function(req) {
        req.setRequestHeader('Authorization', auth);
    },
    success: function(result) {
        alert('done');
        console.log(result);
    },
    error: function (request, textStatus, errorThrown) {
        console.log(request.responseText);
        console.log(textStatus);
        console.log(errorThrown);
    }
});

任何人都可以指导解决错误吗?

2 个答案:

答案 0 :(得分:3)

您可以在实时服务器上创建单独的PHP应用程序来调用Big-commerce API。

您可以从BigCommerce商店创建您的旧版API帐户 - 管理员面板 - >高级设置 - >旧版API设置,可以获取API网址,用户名,令牌。

您可以实施以下代码以获取最低购买数量。

文件名是getproductinfo.php。

    <?php
    header("Access-Control-Allow-Origin: *");
    header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');

    $product_id = $_GET['prod_id'];

    $username='username';
    $password='API token';
    $URL='https://mystoreurl.mybigcommerce.com/api/v2/products/'.$product_id;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$URL);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
    curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:UTF-8','Accept: application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //get status code
    $result=curl_exec ($ch);
    curl_close ($ch); 


    $data = json_decode($result,true);
    $minimimOrder = $data['order_quantity_minimum'];
    echo $minimimOrder;die();

    ?>

回复(最低购买数量) - &gt;您可以使用以下代码作为结果获取quicksearch.js文件。

 var url = 'http://liveserveripaddress/foldername/getproductinfo.php';
        $.ajax({
            url : url,
            type : 'GET',
            data : {prod_id:productid},
            dataType: "json",
            crossDomain: true,

            success: function(result) {
                console.log(result);
                },
            error: function (request, textStatus, errorThrown) {
                console.log(request.responseText);
                console.log(textStatus);
                console.log(errorThrown);
            }
        });

答案 1 :(得分:2)

我们不支持CORS。尝试直接在浏览器中从javascript调用API是非常不安全的。这会公开一个API令牌,使某人可以通过基本身份验证访问存储中的任何数据。这将包括PII。

如果您确实需要从API调用信息,请使用安全的Web服务,该服务会向您的脚本返回非常具体的值,而不是直接调用它。

Is BigCommerce API supports CORS?