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のといないと動作しますか?
エラーメッセージの音によって、認証トークンを含めるのを忘れてしまいました。使用されるAPIのドキュメントを参照してください。 –
curlではなくurlで 'file_get_contents'を使用すると、どのような出力が得られますか? – alexy13
@NiekvanderSteen私は忘れていないが、それはタイプミスがあったようだ。問題が解決しました –