1c отправка JSON PDF на сервер PHP
Всем привет. Передаю Base64 из 1с в php
СтруктураРепорт = Новый Структура;
ДД = Base64Строка(Новый ДвоичныеДанные(Выборка.ПК));
СтруктураРепорт.Вставить("ПаспортКачестваПуть", СтрЗаменить(СтрЗаменить(ДД,Символы.ПС,""),Символы.ВК,""));
Путь = СтрЗаменить(СтрЗаменить(ДД,Символы.ПС,""),Символы.ВК,"");
Пк = Новый ДвоичныеДанные(Выборка.ПК);
МассивДислок.Добавить(СтруктураРепорт);
//JSON++
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " " , Истина, ЭкранированиеСимволовJSON.нет, Ложь, Ложь, Ложь, Ложь);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = Истина;
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, МассивДислок);
ЗапросJSON = ЗаписьJSON.Закрыть();
//JSON--
На стороне PHP:
<?php if (!isset($SITEROOT)) exit;
$title = "Паспорт качества";
if ($_POST['sbm']>0 && $_POST['nakladnaya']) {
$nakladnaya = $db->real_escape_string($_POST['nakladnaya']);
$json = file_get_contents("http://$http_host/json.php?z=pasport&nakladnaya=".$nakladnaya);
//var_dump($json); exit;
$data = new DateTime('', $timezone); $data_add_log = $data->format('Y-m-d H:i:s');
$db->query("INSERT INTO users_nnk_log (user_id, razdel, opis, date) VALUES ('{$com_id}','pasport','Запрос Паспорта Качества. Ж/Д накладная: {$nakladnaya}','{$data_add_log}') ");
if($json) {
$array = json_decode($json, true);
foreach($array as $arEl) {
$fileName = end(explode('\\\\', $arEl['ПаспортКачестваПуть']));
$content = file_get_contents('/var/www/html/pdf/'.$fileName);
$array.
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="'.$fileName.'"');
//header('Contet-Trasfer-Encoding: binary');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.0
//echo "1231231";
echo $content;
exit;
}
}
}
include $_SERVER['DOCUMENT_ROOT']."/strukt/top.php";
?>
<div class="passport-page">
<h1><?=$title?></h1>
<p>Для получения паспорта качества для <?=$com_name?>, заполните одно из полей ниже и нажмите кнопку "Получить"</p>
<form method='POST' action='/pasport/' name='month_form'>
<div class="flex">
<input name="nakladnaya" type="text" placeholder="Номер железнодорожной накладной">
</div>
<input name="sbm" value="1" hidden="hidden">
<button><i>Получить паспорт</i><span></span></button>
</form>
<br>
<?if($link):?>
<?=$link?>
echo $link
<?endif;?>
</div>
<?php
error_reporting(0);
require $_SERVER['DOCUMENT_ROOT'] . '/config.php';
if(isset($_GET['z']) && !empty($_GET['z'])) {
$auth = base64_encode($jsonLogin.":".$jsonPass);
$context = stream_context_create([
"http" => [
"header" => "Authorization: Basic $auth",
"timeout" => 40,
]
]);
switch ($_GET['z']) {
case 'day':
$dtQuery = new DateTime($_GET['date']);
if($develop) {
$ourData = file_get_contents($dayRemoteFileName);
} else {
$ourData = file_get_contents($dayRemoteFileName.(int)$_GET['cl_kod'].'/'.$dtQuery->format('Ymd'), false, $context);
fp($ourData);
}
echo $ourData;
exit;
break;
case 'month':
if($develop) {
$ourData = file_get_contents($monthRemoteFileName);
} else {
$ourData = file_get_contents($monthRemoteFileName.(int)$_GET['cl_kod'].'/'.$_GET['date'].'01', false, $context);
}
echo $ourData;
exit;
break;
case 'pasport':
if($develop) {
$ourData = file_get_contents($pasportRemoteFileName);
} else {
$ourData = file_get_contents($pasportRemoteFileName.urlencode($_GET['nakladnaya']), false, $context);
}
echo $ourData;
break;
}
}
Если передаю просто строку то читает нормально, а если Base64 то var_dump($json); показывает string(0)
Источник: Stack Overflow на русском