PHPのCURL経由でbase64エンコードされたファイルとJSONを送信します
P粉139351297
2023-08-28 10:22:44
<p>CURL を使用して、Create Document from File API 呼び出し経由で PANDADOCS にファイルを送信しようとしています: https://developers.pandadoc.com/reference/create-document-from-pdf。 </p>
<p>ファイルの送信に加えて、JSON の multipart/form-data 文字列の一部として受信者などを含むデータ オブジェクトも送信する必要があります。この呼び出しを正しく設定する方法がわかりません。API から「ファイルという名前のフィールドが存在します」</p> などのさまざまなエラー メッセージが返され続けます。
<p>これは私がこれまでに持っているものです: </p>
<pre class="brush:php;toolbar:false;">パブリック関数 createDocument()
{
$p = getmypid();
$m = "({$p}): PandaDoc::ドキュメントの作成: ";
$postfields = 配列();
$postfields['name'] = $this->document->name;
$postfields['file'] = $this->document->file; //base 64 エンコードされた PDF
$受信者 = 配列(
配列(
'電子メール' => 'a.mcdoogle@test.com',
'first_name' => 'アンドリュー',
'last_name' => 'マクドゥーグル',
「ロール」 => 「ユーザー」、
'署名順序' => 1
)
);
$data = 配列();
$data['受信者'] = $受信者;
$owner = 配列(
「電子メール」 => 「john@example.com」
);
$data['owner'] = $owner;
$postfields['data'] = json_encode($data);
$header = array("Authorization: API キー {$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} ({$errno})");
throw new Exception("{$m}cURL エラー: {$error} ({$errno})");
}
$httpcode =curl_getinfo($ch, CURLINFO_HTTP_CODE);
カール_クローズ ($ch);
error_log("{$m}PandaDoc からの結果: {$res}");
$response = json_decode($res);
$response を返します。
}</pre>
<p>誰か私が間違っていることを教えてくれませんか? </p>
###これは間違っています:### リーリー
API ドキュメントは気になるものだと思います。
短いチュートリアル:
これは単純なマルチパート/フォームデータの HTML フォームです:以下では、このフォームをカールに変換します。
リーリーリーリー
これをcurlで送信するには、フォームデータをポストフィールドに入れる必要があります。
これはリクエストヘッダーです:
リーリーこれはリクエスト本文です:
リーリーリーリー PandaDoc APIの場合
リーリー
コンテンツ タイプは
application/pdf;base64
リーリーである必要がある場合があります 彼らの例ではバイナリ データが使用されています。
これはあなたのデータフィールドです
出典:
https://developers.pandadoc.com /docs/upload-and-send-a-local-pdf