Docusign REST API: загрузка документа в строку

Я создаю приложение, используя API docusign и PHP. У меня большая часть этого работает, за исключением того, что я не могу понять, как загрузить документ. Я искал на этом сайте и на сайте Docusign. У Docusign есть пример здесь, который показывает, как получить список документов в PHP, но в загрузке нет примера PHP. В документах Docusign REST API они объясняют метод здесь. Но это говорит, что ответ «Файл PDF».

В приведенном ниже примере кода я попытался поместить содержимое в файл, но он создает пустой файл. Если я печатаю_r($data), я получаю это:

      SplFileObject Object
(
    [pathName:SplFileInfo:private] => /tmp/419ULk
    [fileName:SplFileInfo:private] => 419ULk
    [openMode:SplFileObject:private] => w
    [delimiter:SplFileObject:private] => ,
    [enclosure:SplFileObject:private] => "
)

Он создает файл в /tmp, но я хочу сохранить документ в виде строки, поэтому я отправляю или сохраняю в БД.

Вот моя функция контроллера:

public function get_document($envelopeId, $cert = FALSE)
{
    $save_dir = BASEPATH."../documents/";
    if ($envelopeId) {
        $this->load->model('docusign_model');
        $data = $this->docusign_model->get_document($envelopeId, $cert);
    }
    file_put_contents($save_dir.$envelopeId.".pdf", $data);
    //print_r($data);
    die("116");
}

Это в docusign_model:

public function get_document($envelopeId, $cert)
    {
        $docuSignAuth = $this->auth();
        if ($docuSignAuth) {
            $envelopeApi = new EnvelopesApi($docuSignAuth->apiClient);
            $options = new GetDocumentOptions();
            if($cert) {
                $options->setCertificate(TRUE);
            } else {
                $options->setCertificate(FALSE);
            }
            return $envelopeApi->getDocument($docuSignAuth->accountId, 1, $envelopeId, $options);
        }
        return false;
    }

Как я могу получить этот документ и сохранить его в строке?

Любая помощь приветствуется!


person thom    schedule 15.03.2018    source источник
comment
отсутствует file_get_contents потока, см. ответ ниже   -  person Andrew    schedule 16.03.2018


Ответы (1)


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

Быстрый фрагмент с использованием file_get_contents и file_put_contents

$docStream = $envelopeApi->getDocument($accountId, 1, $envelopeId);
file_put_contents("my_document.pdf", file_get_contents($docStream->getPathname()));

Дополнительная информация DocuSign REST API :: EnvelopeDocuments: получить в разделе Получить отдельный документ в виде файла PDF

person Andrew    schedule 16.03.2018
comment
СПАСИБО! Ссылка «Получить отдельный документ» указывает только на вызов, а не на то, как получить документ после его загрузки. Для безопасности это немного меньше, чем идея, поскольку документ записывается в каталог /tmp. Я создам его так, чтобы он удалял его немедленно, но было бы неплохо, если бы он был просто в потоке, который я мог бы загрузить в строке. - person thom; 16.03.2018
comment
Пожалуйста. Вы можете зарегистрировать проблему в репозитории SDK git, чтобы поддержать это. github.com/docusign/docusign-php-client/issues - person Andrew; 17.03.2018