Скачать PDF-инвойс Intuit (quickbooks) из папки / tmp / - PullRequest
0 голосов
/ 23 марта 2020

Как их документация 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-маршрута.

Могу я что-нибудь сделать? Или я должен попробовать с предопределенным путем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...