在Shopify中创建自定义产品

时间:2014-01-15 10:41:56

标签: shopify

我需要通过 Shopify店面创建自定义产品。

文档链接:http://docs.shopify.com/api/product#create

我尝试过以下代码:

$('#addProduct').click(function() {
        $.ajax({
            url:'https://xxxxxx:yyyyyyyyyy@rmisys.myshopify.com/admin/products.json',
            type: 'POST',
            contentType : 'application/json',
            dataType: 'json',
            data: {
                  "product": {
                    "title": "Burton Custom Freestlye 151",
                    "body_html": "<strong>Good snowboard!</strong>",
                    "vendor": "Burton",
                    "product_type": "Snowboard",
                    "tags": "Barnes & Noble, John's Fav, \"Big Air\""
                  }
                },
            success: function(response) {
                console.log(response);
            },
            error: function(xhr) {
                console.log(xhr.statusText);
            }
        }).done(function(data) {
            console.log(data);
        });
    });

以上代码在ajax请求时显示Chrome控制台中的以下错误:

  

选项https://rmisys.myshopify.com/admin/products.json 405(不允许)jquery-1.10.2.js:8706   选项https://rmisys.myshopify.com/admin/products.json请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许原点“http://rmisys.myshopify.com”访问。 jQuery的1.10.2.js:8706   XMLHttpRequest无法加载https://rmisys.myshopify.com/admin/products.json。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://rmisys.myshopify.com”访问。设计你的上衣:1   错误

2 个答案:

答案 0 :(得分:5)

经过长时间的搜索,我找到了解决方案。

问题是跨域资源共享(CORS)

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

这用于阻止 CSRF保护

https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/

在大多数情况下,API应接受同源政策的请求 http://en.wikipedia.org/wiki/Same-origin_policy

所以,

如果我们从“http”主机请求,我们从Shopify获得以下AJAX请求错误:

  

请求的资源上没有'Access-Control-Allow-Origin'标头。

解决方案是当用户使用“ http ”协议访问我们的网站时,将用户重定向到“ https ”。

我尝试使用以下附加代码并成功添加了自定义产品。

<script>
window.onload = RedirNonHttps();

function RedirNonHttps() {
    if (location.href.indexOf("https://") == -1) {
        location.href = location.href.replace("http://", "https://");
    }
}
</script>

注意:如果我们使用脚本从客户端添加自定义产品,则它不安全,因为密钥随后公开可用,用户可以使用该API密钥执行任何操作。因此,要保持Secure Auth,然后客户端脚本与Secure Auth交互。

我希望这个答案能为初学者提供CORS(跨源资源共享)的想法。

答案 1 :(得分:2)

请记住。如果您确实成功地解决了CORS的这些微不足道的问题,那么您将公开使用您的API密钥向您这样的人展示您的商店。我将能够删除您的所有资源。我可以用我想要的任何东西替换你的库存。

你不能使用这样的Javascript。这太荒谬了。创建一个安全的应用程序,使用oAuth正确进行身份验证。然后使用您的Javascript与该应用程序通信。否则,你会遇到麻烦,因为有人会让你看起来很傻。