PHPカールリクエストAPI
P粉311089279
2023-08-13 18:12:22
<p>JavaScript を使用して API を呼び出す関数がありますが、正常に動作します。</p>
<p><br /></p>
<pre class="brush:js;toolbar:false;">var headers = {
権限: 「ベアラ」 MY_ACCESS_TOKEN
};
var requestParams = {
メソッド: "POST"、
contentType: "アプリケーション/json",
ヘッダー: ヘッダー、
ペイロード: JSON.stringify({
query: 'query {adSet(id: "' MY_ADSET_ID '") {insights(timeRange: {from: "2023-08-01T00:00:00Z", until: "2023-08-10T23:59:59Z"}timeIncrement) : DAILY) {タイムスタンプ レポート {インプレッション コンバージョン数 offerwallImpressions offerwallAverageRank 支出}}}}'
})
var 応答 = UrlFetchApp.fetch(MY_API_ENDPOINT, requestParams);
var data = JSON.parse(response);</pre>
<p><br /></p>
<p>これを PHP に変換しようとすると、API から空の応答が返されます。私が何を間違えたのでしょうか? </p><p>
my_curl() を使用して API から $MY_ACCESS_TOKEN を取得すると、正常に動作することに注意してください。 </p>
<pre class="brush:php;toolbar:false;">$postdata = json_encode('query: query {adSet(id: "' . $MY_ADSET_ID . '") {insights(timeRange: {from: "2023 -08-01T00:00:00Z"、まで: "2023-08-10T23:59:59Z"} timeIncrement: DAILY) {タイムスタンプ レポート {インプレッション コンバージョン数 offerwallImpressions offerwallAverageRank 支出}}}}');
$エンドポイント = $MY_API_ENDPOINT;
$headers = 配列 (
"コンテンツ タイプ: application/json",
"認可: Bearer " . $MY_ACCESS_TOKEN,
$postdata
);
$data = my_curl ($endpoint, $headers);
var_dump ($data);
function my_curl ($endpoint, $headers) {
$ch =curl_init();
curl_setopt ($ch、CURLOPT_URL、$endpoint);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch、CURLOPT_HTTPHEADER、$headers);
curl_setopt ($ch、CURLOPT_HEADER、false);
curl_setopt ($ch、CURLOPT_RETURNTRANSFER、true);
$server_output =curl_exec($ch);
カール_クローズ ($ch);
$json = json_decode ($server_output, true);
戻り値 ($json);
}
</pre>
<p><br /></p>
json_encode を使用する場合は、文字列ではなく、JSON にエンコードされる連想配列またはオブジェクトを指定する必要があります。あなたの場合、文字列を提供し、$headers 配列内のヘッダーと投稿データを混合しています。欠落していた CURLOPT_POSTFIELDS オプションを追加して、cURL リクエストに JSON エンコードされた投稿データを含め、API がクエリを正しく受信できるようにしました。
リーリー