Отправка покупателю 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 18:55:28
0
16.01.2025 19:04:35
0
16.01.2025 19:04:38
0
16.01.2025 19:04:50
0
16.01.2025 19:04:55
0
16.01.2025 19:05:07
0
16.01.2025 19:05:10
0
16.01.2025 19:05:13
0
16.01.2025 19:05:13
-1 OR 2+375-375-1=0+0+0+1 --
0
16.01.2025 19:05:13
-1 OR 3+375-375-1=0+0+0+1 --
0
16.01.2025 19:05:14
-1 OR 2+965-965-1=0+0+0+1
0
16.01.2025 19:05:14
-1 OR 3+965-965-1=0+0+0+1
0
16.01.2025 19:05:14
-1' OR 2+42-42-1=0+0+0+1 --
0
16.01.2025 19:05:14
-1' OR 3+42-42-1=0+0+0+1 --
0
16.01.2025 19:05:14
0
16.01.2025 19:05:15
-1' OR 2+585-585-1=0+0+0+1 or '9Khsazlf'='
0
16.01.2025 19:05:15
-1' OR 3+585-585-1=0+0+0+1 or '9Khsazlf'='
0
16.01.2025 19:05:15
-1" OR 2+347-347-1=0+0+0+1 --
0
16.01.2025 19:05:16
-1" OR 3+347-347-1=0+0+0+1 --
0
16.01.2025 19:05:19
0
16.01.2025 19:05:20
1*if(now()=sysdate(),sleep(15),0)
0
16.01.2025 19:05:26
0
16.01.2025 19:05:28
10'XOR(1*if(now()=sysdate(),sleep(15),0))XOR'Z
0
16.01.2025 19:05:28
0
16.01.2025 19:05:33
10"XOR(1*if(now()=sysdate(),sleep(15),0))XOR"Z
0
16.01.2025 19:05:35
0
16.01.2025 19:05:42
(sel ect(0)from(select(sleep(15)))v)/*'+(select(0)fr om(sel ect(sleep(15)))v)+'"+(select(0)fr om(select(sleep(15)))v)+"*/
0
16.01.2025 19:05:45
0
16.01.2025 19:05:50
1-1; waitfor delay '0:0:15' --
0
16.01.2025 19:05:52

Страницы: 1  2