Как их документация QuickBooks V3 PHP SDK и использование их php SDK .
Я делаю что-то вроде этого:
$filename = "invoice_{$_GET['doc_number']}.pdf";
$intuitDataService = Intuit::dataService();
$invoiceEntity = $intuitDataService->FindById("Invoice", $_GET['download_invoice']);
try{
$invoicePDF = $intuitDataService->DownloadPDF($invoiceEntity);
}catch(Exception $e) {
pr($e->getMessage());
die();
}
header('content-type:application/pdf');
header('content-disposition:attachment;filename='. $invoicePDF);
echo $invoicePDF;
die();
$invoiceEntity
возвращает правильный счет, который я хочу загрузить, проблема в том, что $invoicePDF
возвращает какой-то странный / tmp / путь каждый раз, когда я пытаюсь загрузить счет, подобный этому:
> /tmp/IPP5e78bbd1a7cec0.75851920zKF3uy
Как я могу справиться с этим? Вот методы, которые обрабатывают мои запросы:
public function DownloadPDF($entity, $dir=null)
{
$this->validateEntityId($entity);
$this->verifyOperationAccess($entity, __FUNCTION__);
//Find the ID
$entityID = $this->getIDString($entity->Id);
$uri = implode(CoreConstants::SLASH_CHAR, array('company',
$this->serviceContext->realmId,
self::getEntityResourceName($entity),
$entityID,
CoreConstants::getType(CoreConstants::CONTENTTYPE_APPLICATIONPDF)));
$requestParameters = $this->getGetRequestParameters($uri, CoreConstants::CONTENTTYPE_APPLICATIONPDF);
$restRequestHandler = $this->getRestHandler();
list($responseCode, $responseBody) = $restRequestHandler->sendRequest($requestParameters, null, null, $this->isThrownExceptionOnError());
$faultHandler = $restRequestHandler->getFaultHandler();
if ($faultHandler) {
$this->lastError = $faultHandler;
//Add allow for through exception if users set it up
return null;
} else {
$this->lastError = false;
return $this->processDownloadedContent(new ContentWriter($responseBody), $responseCode, $this->getExportFileNameForPDF($entity, "pdf"), $dir);
}
}
protected function processDownloadedContent(ContentWriter $writer, $responseCode, $fileName = null, $dir)
{
$writer->setPrefix($this->getPrefixFromSettings());
try {
if(isset($dir) && !empty($dir)){
$writer->saveFile($dir, $fileName);
}else if ($this->isTempFile()) {
$writer->saveTemp();
} elseif ($this->isFileExport()) {
$writer->saveFile($this->getFileExportDir(), $fileName);
} else {
$writer->saveAsHandler();
}
//return object as is
if ($this->isReturnContentWriter()) {
return $writer;
}
$writer->resetContent();
$this->logInfo("File was downloaded (http response = $responseCode), bytes written: {$writer->getBytes()}");
} catch (\Exception $ex) {
$this->logError("Exception appears during response processing. Http response was $responseCode: " . $ex->getMessage() . "\n" . $ex->getTraceAsString());
return null;
}
return $writer->isHandler() ? $writer->getHandler() : $writer->getTempPath();
}
Since I didn't send any path to the DownloadPDF() it will get to $writer->saveTemp();
private function isTempFile()
{
return (CoreConstants::FILE_STRATEGY === $this->serviceContext->IppConfiguration->ContentWriter->strategy);
}
Теперь моя проблема в том, что я не знаю, как обрабатывать этот тип путей tmp, который не указывает ни на какой файл PDF?
Я пытался: $temp_file = tempnam(sys_get_temp_dir(), $invoicePDF);
Но это не вернуло ни одного пригодного для использования PDF-маршрута.
Могу я что-нибудь сделать? Или я должен попробовать с предопределенным путем?