Curl Opencart:无法使用$this调用控制器->;网址->;链接和卷曲
我想使用cUrl调用一个页面,如下所示: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
$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,这将要求您以客户身份登录