2016-06-27 14 views
2

jQuery/AJAXを通じてAPIを呼び出すことで、クイック検索結果の最小購入数量を達成したいと考えています。私たちはAPIを呼び出そうとしていますが、応答は得られません。我々はquicksearch.jsファイルに追加したコードであり、続いてAJAX経由でBigCommerce APIを呼び出す際に401エラーが発生する

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

:私たちは、次のエラーメッセージを取得しています。

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

認証トークンはAPIによって認識されません。あなたはあなたが正しく生成し、それを正しく伝えていることを確認する必要があります。 –

+0

'async:false'も削除する必要があります。 @RoryMcCrossan。 –

+0

ありがとうございました。私は "async:false"を削除し、Authも再チェックしました。まだ同じエラーが発生しています。 401エラーの説明は次のとおりです: - "クロスオリジン要求がブロックされました:同じオリジンポリシーはhttps://store-zxu7pi.mybigcommerce.com/api/v2/products/86でリモートリソースの読み取りを許可しません(理由:CORSヘッダー ' Access-Control-Allow-Origin 'が見つかりません)」を参照してください。あなたはさらに案内していただけますか? –

答えて

3

あなたはビッグコマースのAPIを呼び出すために、ライブサーバー上の別のPHPアプリケーションを作成することができます。

BigCommerce Store - 管理パネル - >詳細設定 - >従来のAPI設定からレガシーAPIアカウントを作成し、APIのURL、ユーザー名、トークンを取得できます。

次のコードを実装して、最小購入数量を取得することができます。

ファイル名は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(); 

    ?> 

応答(最小購入数量) - >あなたは結果として、次のコードを使用して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); 
      } 
     }); 
+0

BC APIの新しいOAuth実装では、旧式の認証が廃止される予定です –

2

CORSはサポートしていません。 javascriptからブラウザで直接APIを呼び出そうとするのは非常に不安です。これにより、誰かが基本認証で利用可能なストア内のデータにアクセスできるようにするAPIトークンが公開されます。これにはPIIが含まれます。

実際にAPIから情報を呼び出す必要がある場合は、直接呼び出すのではなく、スクリプトに特定の値を返す安全なWebサービスを使用してください。

Is BigCommerce API supports CORS?

+1

ありがとう@Alyss。これにより助けられました:) –

関連する問題