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

时间:2013-12-12 14:55:28

标签: php html opencart

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

我确保产品id = 40确实存在。 thansk任何帮助

<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>

2 个答案:

答案 0 :(得分:4)

表单操作应该是

http://***.com/purchase/index.php?route=checkout/cart/add
           mind this particular action being called -^^^^

但是我认为这不会起作用,因为名为ControllerCheckoutCart::add()的方法应该与返回JSON响应的AJAX请求一起使用。因此,如果您向此URL提交表单而不是显示购物车,则只显示JSON响应。

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

$(document).ready(function() {
    $('form#personalVirtualPrivateServerForm input[type="submit"]').click(function(e) {
        e.preventDefault(); // prevent the form from submitting

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'http://.../index.php?route=checkout/cart/add'
            data: 'product_id=' + $('form#personalVirtualPrivateServerForm input[name="product_id"]').val() + '&quantity=' + $('form#personalVirtualPrivateServerForm input[name="quantity"]').val(),
            success: function(json) {
                window.location = 'http://.../index.php?route=checkout/cart';
            }
        });
    });
});

答案 1 :(得分:2)

首先,您正在使用index.php?route=checkout/cart作为控制器来显示购物车页面。这实际上并没有将任何产品添加到购物车中。

我会通过以下方式解决您的问题:

  1. shadyyx 解决方案似乎很好。您可能会遇到跨域策略问题。此外,您将始终确保使用相同的协议(https / http),否则浏览器将阻止您。这可能令人沮丧。
  2. 我首选的解决方案(更强大!)将使用自定义函数扩展您网站上的购物车控制器,该函数接收GET网址(而不是POST)。
  3. 这样的东西
     index.php?route=checkout/cart/addFromUrl&product_id=xx. 
    

    通过这样做,您只需从任何网站链接到此网址,您必须更改的是网址中的product_id。您将不必使用,这在您无法访问裁判方的代码的情况下可能很好(例如联盟营销,即)。它也将更容易维护,因为您的代码将在1个位置集中和编辑,而不必在多个引用站点上进行编辑。

    实际功能看起来像这样

     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
          }
        }
    

    希望这有帮助!
    雅妮