从WHMCS获取PDF发票?

5

针对一个小的副业项目,我需要创建一个调用来通过WHMCS获取PDF文件。我看到API可以获取变量,如数量、发票项目等,但我想要的是系统在客户下订单时发送的相同PDF文件。我有一个PHP应用程序。

更新

根据下面的建议,我能够用一行代码解决这个问题:

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

现在每次查看或发送账单时,最新版本(付款或未付款)都会存储在我选择的位置。
2个回答

2

这里有一篇关于IT技术的文章Store Pdf Invoice on ftp,其中包含以下信息:

1-更改此代码
INVOICESDIRECTORY - PDF发票存储目录
ADMINDIRECTORY - 管理目录
2-将其粘贴到您的模板中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");
                }
        }
}

非常适合我需要的。简直不敢相信我没有想到只需在查看时将其写出,而不是尝试作为管理员访问它和各种疯狂的黑客攻击。谢谢! - rockstardev
@coderama 好的,很高兴能帮到你 =) 为什么不点赞并接受呢? - MikroDel
刚刚在上面。只是想确保它按照我的预期工作。 :-) 我将对我的快速 hack 进行注释。你发布的很多内容都有点过度了。 - rockstardev
@coderama - 很好 :) 那这个赏金呢?会在一段时间后自动发放吗? - MikroDel
是的,当计时器到期时,赏金将会给予您。我认为它已经到期了。 - rockstardev

1
可以在这里找到更好的解决方案。这涉及创建一个API调用,将结果对您进行base64编码。更加复杂。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接