Я пытаюсь проверить новые заказы в Magento, и если они существуют, отправьте счет-фактуру в формате PDF администраторам сайта. Все отлично, за исключением PDF.Формирование счета в формате PDF в Magento
При попытке создать PDF-счета извне в платежном PDF-файле отсутствует вся информация о платежах. Создание счета-фактуры довольно прямолинейно, но найти причину отсутствия информации о платежах для меня было невозможно. Вот что я узнал.
Мой код для создания фактического счета-фактуры в Интернете приведен ниже. Это тот же код, который используется по умолчанию pdfinvoicesAction
для создания PDF-файлов для админ-кода администратора (app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php:459
).
cron/Invoice.php
<?php
/* $order is a valid Mage_Sales_Model_Order object */
$invoices = $order->getInvoiceCollection();
$pdfInvoice = Mage::getModel('sales/order_pdf_invoice');
$pdf = $pdfInvoice->getPdf($invoices);
$pdfFile = $pdf->render();
?>
Это создает действительный PDF, содержащий всю информацию о заказе минус биллинг. Изолируя причину этого, я обнаружил, что в следующем (по умолчанию) файле заказ платежной информации является пустой строкой - когда я получаю счет-фактуру с помощью фонового шрифта magento, это возвращает форматированную строку, содержащую всю платежную информацию.
app/core/Mage/Sales/Model/Order/Pdf/Abstract.php:221
/* Payment */
$paymentInfo = Mage::helper('payment')->getInfoBlock($order->getPayment())
->setIsSecureMode(true)
->toPdf();
// $paymentInfo is an empty string when rendering a PDF externally,
// and formatted as expected when rendering a PDF via the admin panel
$payment = explode('{{pdf_row_separator}}', $paymentInfo);
Так что это случается. Я понятия не имею, как и почему. Настоящий кикер? В моем сценарии работы cron, если я запускаю следующее:
die(print_r($order->getPayment()->toArray()));
Вся информация о платеже есть.
Я просил об этом на форуме разработчиков Magento без везения. Я действительно надеюсь, что кто-то может помочь пролить свет на эту проблему, поскольку я исчерпал свои усилия по отладке. Огромное спасибо.
Редактировать: Просто выяснили, что в то время как Mage::helper('payment')->getInfoBlock($order->getPayment())->setIsSecureMode(true)->toHtml()
возвращает правильно отформатированный HTML. ->toPdf
все еще ничего не возвращает.
Я просто столкнулся с той же проблемой. Когда я перешел в xdebug, я заметил, что PDF хочет загрузить информацию об оплате из этого файла шаблона: frontend/base/default/template/payment/info/pdf/purchaseorder.phtml, которого нет в Magento по умолчанию. –