Отправка покупателю pdf-файла счета вместе с e-mail уведомлением

В одной из статей я приводил пример, как можно отправлять документы заказчику интернет-магазина в Excel-формате - вместе с E-mail уведомлением. Есть более простой способ реализовать подобный функционал в версиях "Битрикса", начиная с 15-й. Можно использовать для этих целей типовой компонент "Битрикса" - bitrix:sale.order.payment - который умеет создавать pdf-файлы счетов (или любых других документов, заданных формой документа для заказа) и прикладывать файлы к письму-уведомлению, используя типовой метод CEvent::Send.
[spoiler]
В данном примере опишу функционал отправки счетов в формате pdf, который мы создавали для заказчиков выписок из ЕГРЮЛ на сайте-магазине егр.рф.
В этом магазине используется кастомизированный компонент создания заказа, сделанный на основе компонента bitrix:sale.basket.order.ajax - объединенный компонент корзины и формы заказа.

Добавим в данный компонент условие: если покупатель выбрал платежную систему "Безналичный расчет" (в данном примере, ID этой платежной системы = 9), то создадим pdf-файл счета и приложим его к письму-уведомлению о заказе. Находим в компоненте строку "if($bSend)" и заменяем блок этого условия на следующий код:
if($bSend) {
   $event = new CEvent;
   if($PAYSYSTEM_ID == 9) {
      ob_start();
      $_REQUEST["ORDER_ID"] = $ORDER_ID;
      $_REQUEST["pdf"] = 'Y';
      $APPLICATION->IncludeComponent("bitrix:sale.order.payment", "", Array());
      $pdf_content=ob_get_contents();
      ob_clean();
      
      $fid = CFile::SaveFile(array(
            'name' => 'bill_'.$ORDER_ID.'.pdf',
            'size' => strlen($pdf_content),
            'type' => 'application/pdf',
            'MODULE_ID' => 'sale',
            'content' => $pdf_content,
         ),
         'bills'
      );

      $event->Send($eventName, SITE_ID, $arFields, "N", "", array($fid));
   }
   else {
      $event->Send($eventName, SITE_ID, $arFields, "N");
   }
}
ob_start() - включаем буферизацию вывода, задаем параметры $_REQUEST для компонента bitrix:sale.order.payment, сохраняем вывод компонента в строку, которую затем записываем в pdf-файл (CFile::SaveFile). Передаем 6-м параметром метода Send массив с файлами, которые нужно приложить к письму.

В целом, этот способ гораздо проще генерации Excel-файлов через PHPExcel.
Страницы: 1  2  
0
16.01.2025 19:05:57
1-1); waitfor delay '0:0:15' --
0
16.01.2025 19:06:02
0
16.01.2025 19:06:12
1-1 waitfor delay '0:0:15' --
0
16.01.2025 19:06:19
0
16.01.2025 19:06:29
1qrxmMKIF'; waitfor delay '0:0:15' --
0
16.01.2025 19:06:33
0
16.01.2025 19:06:38
1-1 OR 722=(SEL ECT 722 FR OM PG_SLEEP(15))--
0
16.01.2025 19:06:44
0
16.01.2025 19:06:52
1-1) OR 949=(SEL ECT 949 FR OM PG_SLEEP(15))--
0
16.01.2025 19:06:58
0
16.01.2025 19:07:08
1-1)) OR 850=(SEL ECT 850 FR OM PG_SLEEP(15))--
0
16.01.2025 19:07:10
0
16.01.2025 19:07:19
1aVoNXOs5' OR 582=(SEL ECT 582 FR OM PG_SLEEP(15))--
0
16.01.2025 19:07:21
0
16.01.2025 19:07:27
1KzKSosRV') OR 787=(SEL ECT 787 FR OM PG_SLEEP(15))--
0
16.01.2025 19:07:31
0
16.01.2025 19:07:44
1h0YjHkfF')) OR 122=(SEL ECT 122 FR OM PG_SLEEP(15))--
0
16.01.2025 19:07:50
0
16.01.2025 19:08:03
1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
0
16.01.2025 19:08:06
0
16.01.2025 19:08:14
1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
0
16.01.2025 19:08:15
0
16.01.2025 19:08:15
????%2527%2522\'\"
0
16.01.2025 19:08:15
0
16.01.2025 19:08:16

Страницы: 1  2