Envoyer le fichier encodé en base64 et JSON via CURL en php
P粉139351297
2023-08-28 10:22:44
<p>J'essaie d'utiliser CURL pour envoyer un fichier à PANDADOCS via l'appel API Créer un document à partir d'un fichier : https://developers.pandadoc.com/reference/create-document-from-pdf. </p>
<p>En plus d'envoyer le fichier, je dois également envoyer un objet de données contenant les destinataires, etc. dans le cadre d'une chaîne de données multipart/form en JSON. Je ne sais pas comment configurer correctement cet appel et je continue de recevoir divers messages d'erreur renvoyés par son API, tels que "Un champ nommé fichier existe" </p>
<p>Voici ce que j'ai jusqu'à présent : </p>
<pre class="brush:php;toolbar:false;">fonction publique createDocument()
{
$p = getmypid();
$m = "({$p}) : PandaDoc::créer un document : ";
$postfields = tableau();
$postfields['name'] = $this->document->name;
$postfields['file'] = $this->document->file //PDF encodé en base 64;
$destinataires = tableau(
tableau(
'e-mail' => 'a.mcdoogle@test.com',
'first_name' => 'André',
'nom_de_famille' =>
'rôle' => 'utilisateur',
'signing_order' =>
)
);
$données = tableau();
$data['destinataires'] = $destinataires ;
$propriétaire = tableau(
"email" => "john@example.com"
);
$data['propriétaire'] = $propriétaire ;
$postfields['data'] = json_encode($data);
$header = array("Autorisation : clé API {$this->api_key}", "Type de contenu : multipart/form-data", "accepter" => "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);
si ($res === faux) {
$errno = curl_errno($ch);
$erreur = curl_error($ch);
error_log("{$m}erreur cURL : {$error} ({$errno})");
throw new Exception("{$m}erreur cURL : {$error} ({$errno})");
}
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close ($ch);
error_log("{$m}Résultats de PandaDoc : {$res}");
$response = json_decode($res);
retourner $réponse ;
}</pré>
<p>Quelqu’un peut-il me dire ce que je fais de mal ? </p>
C'est faux :
Je trouve leur documentation API dérangeante.
Court tutoriel :
Il s'agit d'un simple formulaire HTML multipart/form-data :
Ci-dessous, je traduis ce formulaire en curl.
Pour envoyer ceci en curl, vous devez mettre les données du formulaire dans des champs de publication.
Voici les en-têtes de requête :
Voici le texte de la demande :
J'encode le pdf en Base64 comme ceci :
Pour votre API PandaDoc
Il s'agit du champ du document, veuillez noter $pdf ci-dessus.
Votre type de contenu devra peut-être être
application/pdf;base64
Leurs exemples utilisent des données binaires.
Voici votre champ de données
Source : https://developers.pandadoc.com/docs/upload-and-send-a-local-pdf