Php 如何从外部站点向OpenCart添加产品?

Php 如何从外部站点向OpenCart添加产品?,php,html,opencart,ajax,Php,Html,Opencart,Ajax,我需要添加一个产品到购物车从一个网站到ocart。我正在尝试以下代码。在用户点击提交按钮后,我得到的只是“购物车清空” 我确保产品id=40确实存在。谢谢你的帮助 <form action="http://***.com/purchase/index.php?route=checkout/cart" id="personalVirtualPrivateServerForm" method="post"> <input type="hidden" name="product_id

我需要添加一个产品到购物车从一个网站到ocart。我正在尝试以下代码。在用户点击提交按钮后,我得到的只是“购物车清空”

我确保产品id=40确实存在。谢谢你的帮助

<form action="http://***.com/purchase/index.php?route=checkout/cart" id="personalVirtualPrivateServerForm" method="post">
<input type="hidden" name="product_id" value="40">
<input type="hidden" name="quantity" value="2">
<input type="submit" alt="Order Now" title=" value="Order Now">
</form>


行动的形式应该是

http://***.com/purchase/index.php?route=checkout/cart/add
           mind this particular action being called -^^^^
但是,我认为这不会起作用,因为名为
ControllerCheckoutCart::add()的方法预计将与返回JSON响应的AJAX请求一起工作。因此,如果您将表单提交到此URL,而不是显示购物车,它将只显示JSON响应

与直接提交表单不同,您应该确保在单击提交按钮后由jqueryajax提交表单。然后,您可以在成功时将用户重定向到购物车。这里是可能的解决方案,请确保填写真实域。它没有经过测试。将此脚本放在表单所在的页面上(假设jQuery链接到站点):


行动的形式应该是

http://***.com/purchase/index.php?route=checkout/cart/add
           mind this particular action being called -^^^^
但是,我认为这不会起作用,因为名为
ControllerCheckoutCart::add()的方法预计将与返回JSON响应的AJAX请求一起工作。因此,如果您将表单提交到此URL,而不是显示购物车,它将只显示JSON响应

与直接提交表单不同,您应该确保在单击提交按钮后由jqueryajax提交表单。然后,您可以在成功时将用户重定向到购物车。这里是可能的解决方案,请确保填写真实域。它没有经过测试。将此脚本放在表单所在的页面上(假设jQuery链接到站点):


首先,您使用的是
index.php?route=checkout/cart
,它是显示购物车页面的控制器。这实际上不会向购物车添加任何产品

我可以通过以下两种方式来解决您的问题:

  • shadyyx解决方案似乎不错。不过,您可能会遇到跨域策略问题。此外,您必须始终确保使用相同的协议(https/http),否则浏览器将阻止您。这可能令人沮丧
  • 我更喜欢的解决方案(而且更健壮!)是使用接收GET url(而不是POST)的自定义函数扩展站点上的购物车控制器 差不多

     index.php?route=checkout/cart/addFromUrl&product_id=xx. 
    
    通过这样做,您只需从任何站点链接到此url,您只需更改url中的
    产品id
    。你将不必使用它,在你无法访问裁判方代码的情况下,它可能会很好(比如联盟营销)。它也将更容易维护,因为您的代码将集中在一个位置进行编辑,而不必在多个引用站点上进行编辑

    实际函数将如下所示

     public function addFromUrl() {
        $product_id = isset($this->request->get('product_id')) ? $this->request->get('product_id') : '';
          if ($product_id) {
         //your code (you can use $this->add i.e
         //after adding the product, you will need to redirect to the product page or to the cart page
          }
        }
    
    希望这有帮助

    Yani

    首先,您使用的是显示购物车页面的控制器
    index.php?route=checkout/cart
    。这实际上不会向购物车添加任何产品

    我可以通过以下两种方式来解决您的问题:

  • shadyyx解决方案似乎不错。不过,您可能会遇到跨域策略问题。此外,您必须始终确保使用相同的协议(https/http),否则浏览器将阻止您。这可能令人沮丧
  • 我更喜欢的解决方案(而且更健壮!)是使用接收GET url(而不是POST)的自定义函数扩展站点上的购物车控制器 差不多

     index.php?route=checkout/cart/addFromUrl&product_id=xx. 
    
    通过这样做,您只需从任何站点链接到此url,您只需更改url中的
    产品id
    。你将不必使用它,在你无法访问裁判方代码的情况下,它可能会很好(比如联盟营销)。它也将更容易维护,因为您的代码将集中在一个位置进行编辑,而不必在多个引用站点上进行编辑

    实际函数将如下所示

     public function addFromUrl() {
        $product_id = isset($this->request->get('product_id')) ? $this->request->get('product_id') : '';
          if ($product_id) {
         //your code (you can use $this->add i.e
         //after adding the product, you will need to redirect to the product page or to the cart page
          }
        }
    
    希望这有帮助

    Yani

    PHP代码在哪里?什么PHP代码?这难道不足以向购物车发送帖子吗?您正在运行哪个版本的OpenCart?好的,那么您的html就可以了。服务器的响应是什么?您的OpenCart是否安装在
    /purchase
    下(通常只是)?您在服务器上是否有任何
    重写规则
    ,可能会破坏您的url?确定。您需要做的是调试发送到OpenCart的http post REQUEST。尝试在/purchase/index.php上添加print\r($\u POST)并跟踪发生了什么。php代码在哪里?什么php代码?这难道不足以向购物车发送帖子吗?您正在运行哪个版本的OpenCart?好的,那么您的html就可以了。服务器的响应是什么?您的OpenCart是否安装在
    /purchase
    下(通常只是)?您在服务器上是否有任何
    重写规则
    ,可能会破坏您的url?确定。您需要做的是调试发送到OpenCart的http post REQUEST。尝试在/purchase/index.php上添加print\r($\u POST),并跟踪发生的情况。谢谢!我是否必须将该代码放入.onlick表单提交操作中?如果是这样的话,表单标签应该是这样的吗?您应该听的事件已经写在代码中了-这是表单的提交按钮点击事件-只需将整个jQuery代码粘贴到模板中并尝试一下。无论您是指定
    还是
    ,都没有关系,因为它对javascript或AJAX请求没有影响。。。只要确保表单的ID是完整的(或者在jQuery中更改它),那就太好了!现在,它添加了一个{“success”:“success:您已将产品40添加到您的购物车!”,“total”:“1个项目”-\u00a15.40”},但在成功之后,它不会重定向到购物车:函数(json){window.location=”http://.../index.php?route=checkout/cart“;}被称为。你知道为什么吗