Задача: pdf-файлик из base64 закодированной строки в элемент инфоблока зафигачить, чтобы потом в ЛК выводить для битрикс24 rest api добавить файл описано тут |
Итак, есть вот такой ответ $res
array(2) { ["filename"]=> string(22) "invoice_BI53154847.pdf" ["data"]=> string(34231) "application/pdf;base64,JVBERi0xLjQKMSAwIG9ia...тут_дальше_еще_закодированная строка" } |
$pdf_b64 = base64_decode(substr($res["data"],strlen("application/pdf;base64"))); $rute = $_SERVER["DOCUMENT_ROOT"]."/upload/invoices_pdf/".$res["filename"]; file_put_contents($rute, $pdf_b64); |
а это агент, который проходит по всем заказам и подтягивает в инфоблоки счет-фактуры (инвойсы)
function SaveOrderInvoice($lastOrderId){ $res = ""; if(!empty($lastOrderId)) { $arFilter = [ "PAY_SYSTEM_ID" => 12, "PAYED" => "Y", "<ID" => $lastOrderId ]; $arSelect = [ "ID" ]; $rsOrder = CSaleOrder::GetList(["ID" => "desc"], $arFilter, false, array('nPageSize' => 10), $arSelect); $el = new CIBlockElement; while ($arOrder = $rsOrder->Fetch()) { $orderId = $arOrder["ID"]; $order = Bitrix\Sale\Order::load($orderId); $properties = $order->getPropertyCollection(); $property = $properties->getItemByOrderPropertyCode("ExternalOrderID"); if (!empty($property)) { $checkoutOrderId = $property->getValue(); if(!empty($checkoutOrderId)){ $checkout = new nikaverro\dev\rest\TwoCheckout(); $checkout->setUrl("/invoices/".$checkoutOrderId."/"); $checkout->send(); $res = $checkout->getResult(); if(!empty($res["data"]) && CModule::IncludeModule("iblock")){ $pdf_b64 = base64_decode(substr($res["data"],strlen("application/pdf;base64"))); $rute = $_SERVER["DOCUMENT_ROOT"]."/upload/invoices_pdf/".$res["filename"]; file_put_contents($rute, $pdf_b64); $props = [ 724 => CFile::MakeFileArray($rute), 725 => $orderId, 726 => $checkoutOrderId ]; $arLoadProductArray = Array( "IBLOCK_ID" => 159, "PROPERTY_VALUES"=> $props, "NAME" => "Чек по заказу ".$orderId ); $el->Add($arLoadProductArray); } } } $res = "SaveOrderInvoice(".$orderId.");"; } } return $res; } |