Curl Opencart:无法使用$this调用控制器->;网址->;链接和卷曲

Curl Opencart:无法使用$this调用控制器->;网址->;链接和卷曲,curl,opencart,Curl,Opencart,我想使用cUrl调用一个页面,如下所示: $ch = curl_init(); $timeout = 0; // set to zero for no timeout curl_setopt ($ch, CURLOPT_URL, $this->url->link('account/order/invoice', 'order_id=20')); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl

我想使用cUrl调用一个页面,如下所示:

    $ch = curl_init();
    $timeout = 0; // set to zero for no timeout
    curl_setopt ($ch, CURLOPT_URL, $this->url->link('account/order/invoice', 'order_id=20'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $invoice = curl_exec($ch);
    curl_close($ch);
这是行不通的。“订单id=20”未传递给控制器。 这确实有效:

    $ch = curl_init();
    $timeout = 0; // set to zero for no timeout
    curl_setopt ($ch, CURLOPT_URL, 'http://webshop.local/index.php?route=account/order/invoice&order_id=20');
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $factuur = curl_exec($ch);
    curl_close($ch);
当我回显$this->url->link('account/order/invoice','order\u id=20')时,url是正确的

我看不出有什么不同。我可以使用第二种方法,但第一种方法更适合在opencart中创建URL


我想知道我做错了什么,或者为什么会这样。

答案是URL不一样

检查/system/url.php中的代码:

if ($args) {
    $url .= str_replace('&', '&', '&' . ltrim($args, '&')); 
}
您生成的URL将是:

http://webshop.local/index.php?route=account/order/invoice&订单号=20

与你手写的相比:

http://webshop.local/index.php?route=account/order/invoice&order_id=20

这是因为helper被设计为输出用于HTML的URL,其中
&将被正确解析。回显您生成的链接并查看页面源代码,或者查看您的店铺链接,您就会明白我的意思

如果您深入挖掘并查看帐户/帐户控制器的顶部,您将看到:

$this->redirect($this->url->link('account/login','''SSL')

重定向助手(在system/engine/controller.php中)实际上必须转换
&;在使用URL帮助程序创建的URL之前,请再次返回:

header('Location:'.str_replace(数组('&;',“\n”,“\r”)、数组('&','',''),$url))

坦白说,这有点乱,但这是你必须处理的

因此,如果您想使用URL帮助器,我建议您执行与OpenCart本身相同的操作:


curl\u setopt($ch,CURLOPT\u URL,str\u replace(“&;”,“&;”,$this->URL->link('account/order/invoice','order\u id=20'))

您到底想实现什么?我正在尝试将发票添加到订单邮件中。url为我提供了发票的html页面。我使用dompdf将其转换为pdf。或者使用您的工作代码(没有错误),也可以在这里查看:(我将此标记为副本)。您可以只渲染路线,而不使用curl,这将要求您以客户身份登录