cari

Rumah  >  Soal Jawab  >  teks badan

API permintaan curl PHP

<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>
P粉311089279P粉311089279566 hari yang lalu383

membalas semua(1)saya akan balas

  • P粉513318114

    P粉5133181142023-08-14 09:32:51

    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.

    <?php
    $MY_ACCESS_TOKEN = "your_access_token";
    $MY_ADSET_ID = "your_adset_id";
    $MY_API_ENDPOINT = "your_api_endpoint";
    
    $postdata = json_encode([
        'query' => 'query {adSet(id: "' . $MY_ADSET_ID . '") {insights(timeRange: {from: "2023-08-01T00:00:00Z", until: "2023-08-10T23:59:59Z"} timeIncrement: DAILY) {timestamps reports {impressions conversions offerwallImpressions offerwallAverageRank spend}}}}'
    ]);
    
    $endpoint = $MY_API_ENDPOINT;
    $headers = array(
        "Content-Type: application/json",
        "Authorization: Bearer " . $MY_ACCESS_TOKEN
    );
    
    $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_POSTFIELDS, $postdata);
    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);
    
    var_dump($json);
    ?>

    balas
    0
  • Batalbalas