2013-11-15 3 views
4

Для небольшого побочного проекта мне пришлось создать вызов, который получает PDF через WHMCS. Я вижу, что API может получить переменные, такие как количество, элементы счета и т. Д., Но я хочу, чтобы тот же PDF-код отправлялся системой, если клиент разместил заказ. У меня есть приложение PHP.Получение счета-фактуры из WHMCS?

UPDATE

После удивительный совет ниже, я был в состоянии решить эту проблему в одной строке:

$pdf->Output('invoice.'.$invoicenum.'.pdf', 'F'); 

Теперь каждый раз, когда счет-фактура рассматривается, или по электронной почте, последняя версия (платная или неоплаченный) хранится в выбранном мной месте.

ответ

2

Существует статья Store Pdf Invoice on ftp с этой информацией:

1-Изменение этого кода
INVOICESDIRECTORY - каталог, в котором я держу PDF счета
ADMINDIRECTORY - каталог Администрация
2 Вставьте его в последней строке of invoicepdf.tpl файл в вашем шаблоне.

if ($status=="Paid") { 
     if(strpos($_SERVER['PHP_SELF'],"ADMINDIRECTORY") === false) { 
       if((strpos($_SERVER['PHP_SELF'],"dl.php") !== false) || (strpos($_SERVER['PHP_SELF'],"dl.html") !== false)) { 
         if(!file_exists("./INVOICESDIRECTORY/".str_replace("/", "-", $invoicenum).".pdf")) { 
           $pdf->Output("./INVOICESDIRECTORY/".str_replace("/", "-", $invoicenum).".pdf", "F"); 
         }    
         $fullPath = "./INVOICESDIRECTORY/".str_replace("/", "-", $invoicenum).".pdf";  
         if ($fd = fopen ($fullPath, "r")) { 
           $fsize = filesize($fullPath); 
           $path_parts = pathinfo($fullPath); 
           $ext = strtolower($path_parts["extension"]); 
           switch ($ext) { 
             case "pdf": 
             header("Content-type: application/pdf"); // add here more headers for diff. extensions 
             header("Content-Disposition: attachment; filename=\"".str_replace("-", "/", $path_parts["basename"])."\""); // use 'attachment' to force a download 
             break; 
             default; 
             header("Content-type: application/octet-stream"); 
             header("Content-Disposition: filename=\"".str_replace("-", "/", $path_parts["basename"])."\""); 
           } 
           header("Content-length: $fsize"); 
           header("Cache-control: private"); //use this to open files directly 
           while(!feof($fd)) { 
             $buffer = fread($fd, 2048); 
             echo $buffer; 
           } 
         } 
         fclose ($fd); 
         exit; 
       } 
     } 
     else { 
       if(!file_exists("./../INVOICESDIRECTORY/".str_replace("/", "-", $invoicenum).".pdf")) { 
         $pdf->Output("./../INVOICESDIRECTORY/".str_replace("/", "-", $invoicenum).".pdf", "F"); 
       } 
     } 
} 
+0

Идеально подходит для меня. Не могу поверить, что я не думал о том, чтобы просто написать его, когда он просматривается, вместо того, чтобы пытаться получить доступ к нему как администратора и всех видов сумасшедших хаков. Спасибо! – coderama

+0

@coderama ok приятно помочь вам =) почему вы не повышаете и не принимаете, чем? – MikroDel

+0

Был только на нем. Просто хотел убедиться, что он работает так, как я ожидал. :-) Я собираюсь прокомментировать мой быстрый взлом. Много того, что вы разместили, немного переборщило. – coderama

0

Лучшее решение можно найти here. Это связано с созданием вызова API, который base64 кодирует результат для вас. Гораздо сложнее.