cari

Rumah  >  Soal Jawab  >  teks badan

Hantar fail berkod base64 dan JSON melalui CURL dalam php

<p>Saya cuba menggunakan CURL untuk menghantar fail ke PANDADOCS melalui panggilan Cipta Dokumen daripada Fail API: https://developers.pandadoc.com/reference/create-document-from-pdf. </p> <p>Selain menghantar fail, saya juga perlu menghantar objek data yang mengandungi penerima dsb. sebagai sebahagian daripada rentetan berbilang/bentuk-data dalam JSON. Saya tidak pasti cara untuk menyediakan panggilan ini dengan betul dan saya terus menerima pelbagai mesej ralat yang dikembalikan daripada APInya, seperti "Medan bernama fail wujud" </p> <p>Inilah yang saya ada setakat ini: </p> <pre class="brush:php;toolbar:false;">public function createDocument() { $p = getmypid(); $m = "({$p}): PandaDoc::buat dokumen: "; $postfields = array(); $postfields['name'] = $ini->dokumen->nama; $postfields['file'] = $this->document->file; //base 64 dikodkan PDF $penerima = tatasusunan( tatasusunan( 'e-mel' => 'a.mcdoogle@test.com', 'first_name' => 'Andrew', 'last_name' => 'Mcdoogle', 'role' => 'pengguna', 'menandatangani_pesanan' => ) ); $data = tatasusunan(); $data['recipients'] = $recipients; $owner = array( "e-mel" ="john@example.com" ); $data['owner'] = $owner; $postfields['data'] = json_encode($data); $header = tatasusunan("Keizinan: API-Key {$this->api_key}", "Content-Type: multipart/form-data", "accept" => "application/json") ; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, palsu); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); $res = curl_exec($ch); jika ($res === palsu) { $errno = curl_errno($ch); $error = curl_error($ch); error_log("{$m}cURL error: {$error} ({$errno})"); buang Exception baharu("{$m}ralat cURL: {$error} ({$errno})"); } $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close ($ch); error_log("{$m}Hasil daripada PandaDoc: {$res}"); $respons = json_decode($res); pulangkan $respon; }</pre> <p>Bolehkah sesiapa memberitahu saya apa yang saya lakukan salah? </p>
P粉139351297P粉139351297452 hari yang lalu596

membalas semua(1)saya akan balas

  • P粉848442185

    P粉8484421852023-08-29 09:16:59

    Ini salah:

    $postfields['data'] =  json_encode($data);

    Saya mendapati dokumentasi API mereka mengganggu.

    Tutorial Ringkas:
    Ini ialah borang HTML berbilang bahagian/borang-data yang mudah:
    Di bawah saya menterjemahkan borang ini kepada curl.

    <form action="<url>" method="post" enctype="multipart/form-data">
    
    <input type="text" name="name1" value="value1" >
    <input type="text" name="name2" value="value2" >
    <input type="text" name="name3" value="value3" >
    
    <button type="submit">submit</button>
    </form>

    Untuk menghantar ini dalam curl anda perlu meletakkan data borang ke dalam medan pos.

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, '<url>');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "-----------------------------3303153187906175792551542585\r\nContent-Disposition: form-data; name=\"name1\"\r\n\r\nvalue1\r\n-----------------------------3303153187906175792551542585\r\nContent-Disposition: form-data; name=\"name2\"\r\n\r\nvalue2\r\n-----------------------------3303153187906175792551542585\r\nContent-Disposition: form-data; name=\"name3\"\r\n\r\nvalue3\r\n-----------------------------3303153187906175792551542585--\r\n");
    
    $response = curl_exec($ch);

    Berikut ialah tajuk permintaan:

    Content-Length: 408
    Content-Type: application/x-www-form-urlencoded
    Accept: */*
    Host: my_curl_test_site.com
    X-Https: 1

    Ini adalah teks permintaan:

    -----------------------------3303153187906175792551542585
    Content-Disposition: form-data; name="name1"
    
    value1
    -----------------------------3303153187906175792551542585
    Content-Disposition: form-data; name="name2"
    
    value2
    -----------------------------3303153187906175792551542585
    Content-Disposition: form-data; name="name3"
    
    value3
    -----------------------------3303153187906175792551542585

    I Base64 mengekod pdf seperti ini:

    $pdf = base64_encode(file_get_contents('example.pdf'));

    Untuk API PandaDoc anda


    Ini adalah medan dokumen, sila ambil perhatian $pdf di atas.

    ------BoundaryXXXXXXXXX
    Content-Disposition: form-data; name="file"; filename="Sample PandaDoc PDF with Field Tags.pdf"
    Content-Type: application/pdf;
    
    $pdf
    ------BoundaryXXXXXXXXX

    Jenis kandungan anda mungkin perlu application/pdf;base64
    Contoh mereka menggunakan data binari.

    Ini adalah medan data anda

    ------BoundaryXXXXXXXXX
    Content-Disposition: form-data; name="data"
    
    { 
       "name": "My minimal document",
       "url": "https://example.com/path/to/mydocument.pdf",
       "recipients": [
          {
           "email":"nobody@example.com"
          }
       ],
       "parse_form_fields": false
    }
    ------BoundaryXXXXXXXXX

    Sumber: https://developers.pandadoc.com/docs/upload-and-send-a-local-pdf

    balas
    0
  • Batalbalas