Base64-codierte Datei und JSON über CURL in PHP senden
P粉139351297
2023-08-28 10:22:44
<p>Ich versuche, CURL zu verwenden, um eine Datei über den API-Aufruf „Dokument aus Datei erstellen“ an PANDADOCS zu senden: https://developers.pandadoc.com/reference/create-document-from-pdf. </p>
<p>Zusätzlich zum Senden der Datei muss ich auch ein Datenobjekt senden, das die Empfänger usw. als Teil einer mehrteiligen/Formulardatenzeichenfolge in JSON enthält. Ich bin mir nicht sicher, wie ich diesen Aufruf richtig einrichten soll, und erhalte ständig verschiedene Fehlermeldungen von der API zurückgegeben, z. B. „Ein Feld mit dem Namen „Datei existiert““</p>
<p>Das habe ich bisher: </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 kodiertes PDF
$recipients = array(
Array(
'email' => 'a.mcdoogle@test.com',
'Vorname' => 'Andrew',
'last_name' =>
'role' => 'user',
'signing_order' =>
)
);
$data = array();
$data['recipients'] = $recipients;
$owner = array(
"email" ="john@example.com"
);
$data['owner'] = $owner;
$postfields['data'] = json_encode($data);
$header = array("Autorisierung: 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-Fehler: {$error} ({$errno})");
throw new Exception("{$m}cURL error: {$error} ({$errno})");
}
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close ($ch);
error_log("{$m}Ergebnisse von PandaDoc: {$res}");
$response = json_decode($res);
return $response;
}</pre>
<p>Kann mir jemand sagen, was ich falsch mache? </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