2017-08-22 16 views
0

ShipHeroのAPIから製品データを取得する必要があるWordPressプラグインで作業しています。私のHTTPリクエストはcURLで動作しますが、wp_remote_get()でエラー403(禁止)が返されます

cURLを使用すると、正常なJSONが取得されます。私のコード:

string ' 
{"Message": "success", "code": "200", "products": {"results": [{"sku": "999999999", "kit_components": [], "warehouses": [{"available": "0", "inventory_bin": "WA7", "inventory_overstock_bin": "", "backorder": "0", "warehouse": "Primary", "on_hand": "0", "allocated": "0"}], "build_kit": 0, "value": "0.00", "kit": 0}]}} 
' (length=324) 

私はヘルパー関数wp_remote_getを使用することになっています()の代わりに:

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "https://api-gateway.shiphero.com/v1/general-api/get-product/?token=$token&sku=$sku"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // Only for debugging locally 

$response = curl_exec($ch); 
curl_close($ch); 

var_dump($response); 

これは私が得る応答です。これは私のコードです:

$url = "https://api-gateway.shiphero.com/v1/general-api/ 
     get-product/?token=$token&sku=$sku"; 

$response = wp_remote_get($url); 

var_dump($response); 

しかし、私が得ること(認証トークンがありません)403のメッセージです:

array (size=6) 
    'headers' => 
    object(Requests_Utility_CaseInsensitiveDictionary)[1416] 
     protected 'data' => 
     array (size=8) 
      'content-type' => string 'application/json' (length=16) 
      'content-length' => string '42' (length=2) 
      'date' => string 'Tue, 22 Aug 2017 16:11:30 GMT' (length=29) 
      'x-amzn-requestid' => string '8f564453e0d-be543534d5-b554385ea7d' (length=36) 
      'x-amzn-errortype' => string 'MissingAuthenticationTokenException' (length=35) 
      'x-cache' => string 'Error from cloudfront' (length=21) 
      'via' => string '1.1 30f76efc52e6ca97f663d61e1f8e27ef.cloudfront.net (CloudFront)' (length=64) 
      'x-amz-cf-id' => string 'pmlZLt_c18F4wKiT7eSvfBHCcD-UwxPtP87dALZxIQ==' (length=56) 
    'body' => string '{"message":"Missing Authentication Token"}' (length=42) 
    'response' => 
    array (size=2) 
     'code' => int 403 
     'message' => string 'Forbidden' (length=9) 

私はすでにフィルタを無効にするためにthis questionのように「hhtp_headers_useragent」、そして何を試してみましたかわった。

私は、次のコードを使用して、いくつかの認証を実行しようとしました:

$args = array(
       'headers' => array(
       'Authorization' => 'Basic ' . base64_encode($username . ':' . $password), 
       ) 
      ); 

$response = wp_remote_request($url, $args); 

私はこの場合に使用するユーザ名とパスワードは、そのコンソールにShipHeroによって私に与えられ、それぞれショップ名とAPIの秘密でした(私はそれが事実だろうか分からない)。

応答は以下のメッセージで、まだ403のコードです:

"message":"Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header 

なぜそれがwp_remote_getとcURLのといないと動作しますか?

+0

エラーメッセージの音によって、認証トークンを含めるのを忘れてしまいました。使用されるAPIのドキュメントを参照してください。 –

+0

curlではなくurlで 'file_get_contents'を使用すると、どのような出力が得られますか? – alexy13

+0

@NiekvanderSteen私は忘れていないが、それはタイプミスがあったようだ。問題が解決しました –

答えて

0

これは$ urlにまったく同じ文字列を使用していなかったため、cURLで動作し、wp_remote_getでは動作しませんでした。最後に誤字がありました。

関連する問題