Hantar fail berkod base64 dan JSON melalui CURL dalam php
P粉139351297
P粉139351297 2023-08-28 10:22:44
0
1
593
<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粉139351297
P粉139351297

membalas semua(1)
P粉848442185

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan