在php中透過CURL發送base64編碼的檔案和JSON
P粉139351297
2023-08-28 10:22:44
<p>我正在嘗試使用 CURL 透過「從檔案 API 呼叫建立文件」將檔案傳送到 PANDADOCS:https://developers.pandadoc.com/reference/create-document-from-pdf。 </p>
<p>除了發送文件之外,我還需要發送一個包含收件人等的資料對象,作為 multipart/form-data 字串的一部分以 JSON 形式發送。我不確定如何正確設置此調用,並且不斷收到從其 API 返回的各種錯誤訊息,例如“存在名為文件的字段”</p>
<p>這是我到目前為止所擁有的:</p>
<pre class="brush:php;toolbar:false;">public function createDocument()
{
$p = getmypid();
$m = "({$p}): PandaDoc::create document: ";
$postfields = array();
$postfields['name'] = $this->document->name;
$postfields['file'] = $this->document->file; //base 64 encoded PDF
$recipients = array(
array(
'email' => 'a.mcdoogle@test.com',
'first_name' => 'Andrew',
'last_name' => 'Mcdoogle',
'role' => 'user',
'signing_order' => 1
)
);
$data = array();
$data['recipients'] = $recipients;
$owner = array(
"email" => "john@example.com"
);
$data['owner'] = $owner;
$postfields['data'] = json_encode($data);
$header = array("Authorization: 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, false);
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);
if ($res === false) {
$errno = curl_errno($ch);
$error = curl_error($ch);
error_log("{$m}cURL error: {$error} ({$errno})");
throw new Exception("{$m}cURL error: {$error} ({$errno})");
}
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close ($ch);
error_log("{$m}Results from PandaDoc: {$res}");
$response = json_decode($res);
return $response;
}</pre>
<p>誰能告訴我我做錯了什麼? </p>
這是錯的:
我發現他們的 API 文件令人不安。
簡短教學:
這是一個簡單的 multipart/form-data HTML 表單:
下面我把這個形式翻譯成curl。
要在curl中發送此內容,您必須將表單資料放入postfields中。
這是請求標頭:
這是請求正文:
我對 pdf 進行 Base64 編碼,如下所示:
對於您的 PandaDoc API
這是文件字段,請注意上面的 $pdf。
您的內容類型可能需要為
application/pdf;base64
他們的範例使用二進位資料。
這是您的資料欄位
來源:https://developers.pandadoc.com /docs/upload-and-send-a-local-pdf