Kdyby/Curl – odeslani souboru (dopisonline)
- gliny
- Člen | 25
Ahoj,
řeším napojení na službu české pošty dopis online a pro uložení
zásilky potřebuju odeslat pomocí POST požadavku soubor (nejsem si právě
ani jist jestli to poslat jako soubor nebo jako text). Tak jsem si řekl, že
bych na to použil Kdyby/Curl.
Podařilo se mi celkem bez problémů rozchodit získání dat ze serveru české pošty (odesláním POST požadavku s username a password).
Nepodařilo se mi uložit zásilku na server české pošty (obnáší to odeslat xml strukturu a v ni je uloženo obsah pdf souboru enkodovan base64). XML strukturu i se zmíněným base64 pdf souborem mam z ukazkoveho příkladu z dokumentace, ale server pošty mi vrací odpověd, že „Proměnná soubor neexistuje“.
Dokumentace ke stažení zde: https://online.postservis.cz/?…
Požadavek má mít následující formát.
Příklad těla požadavku
POST /dopisonline/donApi.php HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------------8cff83c3391c39b
Host: online3.postservis.cz
Content-Length: 10492
Expect: 100-continue
Connection: Keep-Alive
HTTP/1.1 100 Continue
-----------------------------8cff83c3391c39b
Content-Disposition: form-data; name="user"
dreplech
-----------------------------8cff83c3391c39b
Content-Disposition: form-data; name="password"
dreplech
-----------------------------8cff83c3391c39b
Content-Disposition: form-data; name="soubor"; filename="DopisOnlineNew_1_1.xml"
Content-Type: multipart/form-data
-----------Zde jsou připojena data (XML soubor s base64 pdf)------------
-----------------------------8cff83c3391c39b
Funkční přehled zásilek
$request = new Kdyby\Curl\Request($this->getUrl('prehledZasilek'));
$request->setCertificationVerify(FALSE);
$response = $request->post(array(
'user' => $this->username,
'password' => $this->password,
'zasilka' => $zasilka,
'datum' => $datum
));
$temp = $response->getResponse();
A já prostě nevím jak použít Kdyby/Curl aby mi poslalo takovýhle
požadavek.
Děkuji za každou radu, a já to jdu zkusit bez Kdyby/Curl.
Editoval gliny (21. 5. 2015 12:03)
- JL
- Člen | 24
Ahoj,
já posílám request tak, že si uložím data do temp XML souboru a ten přiložím:
private function sendRequest($url, $xmlRequest, $identifier = null)
{
$request = new Request($url);
$request->headers['Content-Type'] = 'multipart/form-data';
$data = [
'user' => $this->username,
'password' => $this->password,
];
if (!isset($identifier) || !(is_string($identifier))) {
$identifier = uniqid('letteronline');
}
$tempFilePath = $this->tempDir . '/' . $identifier . '.xml';
$tempFile = fopen($tempFilePath, "w");
fwrite($tempFile, $xmlRequest);
fclose($tempFile);
try {
$response = $request->post($data, ['soubor' => $tempFilePath]);
$responseData = $response->getResponse();
unlink($tempFilePath);
return $responseData;
} catch (CurlException $e) {
// + dalsi catche na jine typy vyjimek, to jsem sem ale nekopiroval
}
}
Editoval JL (21. 5. 2015 12:08)