我们希望通过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);
}
});
任何人都可以指导解决错误吗?
答案 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服务,该服务会向您的脚本返回非常具体的值,而不是直接调用它。