API permintaan curl PHP
P粉311089279
2023-08-13 18:12:22
<p>Saya mempunyai fungsi yang memanggil API menggunakan JavaScript dan ia berfungsi dengan baik: </p>
<p><br /></p>
<pre class="brush:js;toolbar:false;">pengepala var = {
Keizinan: "Pembawa " + MY_ACCESS_TOKEN
};
var requestParams = {
kaedah: "POST",
contentType: "application/json",
tajuk: tajuk,
muatan: JSON.stringify({
pertanyaan: 'query {adSet(id: "' + MY_ADSET_ID + '") {insights(timeRange: {from: "2023-08-01T00:00:00Z", sehingga: "2023-08-10T23:59:59Z" }Peningkatan masa: HARIAN) {laporan cap masa {penawaran penukaran teraanPenjualan kesanwallAverageRank perbelanjaan}}}}'
})
var response = UrlFetchApp.fetch(MY_API_ENDPOINT, requestParams);
var data = JSON.parse(respons);</pre>
<p><br /></p>
<p>Apabila saya cuba menukar ini kepada PHP, saya hanya mendapat respons kosong daripada API. Apa yang saya buat salah? </p><p>
Sila ambil perhatian bahawa apabila saya menggunakan my_curl() untuk mendapatkan $MY_ACCESS_TOKEN daripada API, ia berfungsi dengan baik. </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", sehingga: "2023-08-10T23:59:59Z"} masaKenaikan: HARIAN) {laporan cap masa {impressions conversions offerwallImpressions offerwallAverageRank spend}}}}');
$titik tamat = $MY_API_ENDPOINT;
$headers = tatasusunan (
"Jenis Kandungan: aplikasi/json",
"Kebenaran: Pembawa " $MY_ACCESS_TOKEN,
$postdata
);
$data = my_curl ($titik akhir, $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);
curl_close ($ch);
$json = json_decode ($server_output, true);
pulangan ($json);
}
</pra>
<p><br /></p>
Apabila menggunakan json_encode, anda harus menyediakan tatasusunan bersekutu atau objek untuk dikodkan kepada JSON, bukan rentetan. Dalam kes anda, anda menyediakan rentetan dan anda mencampurkan pengepala dan menyiarkan data dalam tatasusunan $headers. Saya telah menambahkan pilihan CURLOPT_POSTFIELDS yang tiada untuk memasukkan data siaran yang dikodkan JSON dalam permintaan cURL, yang membolehkan API menerima pertanyaan dengan betul.