2014-01-15 171 views
4

我需要通過Shopify店面創建自定義產品。在Shopify中創建自定義產品

文檔鏈接:http://docs.shopify.com/api/product#create

我曾嘗試以下代碼:

$('#addProduct').click(function() { 
     $.ajax({ 
      url:'https://xxxxxx:[email protected]/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請求:

OPTIONS 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'頭部o n請求的資源。原因'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 錯誤

回答

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請求:

否Acce ss-Control-Allow-Origin'標題出現在請求的資源上。

的解決方案是重定向用戶「HTTPS」,當他們使用「HTTP」協議來到我們的網站。

我嘗試使用以下附加代碼併成功添加了自定義產品。

<script> 
window.onload = RedirNonHttps(); 

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

注:如果我們從客戶端使用腳本添加自定義的產品是不安全的,因爲密鑰,然後公開的,用戶可以做任何他們想做的是API密鑰。因此,要保證安全身份驗證,然後客戶端腳本與該安全身份驗證進行交互。

我希望這個答案能爲初學者提供CORS(跨源資源共享)的想法。

+0

如果這個答案對您有幫助,請爲我upvote .. :) – Vasu

2

只要記住。如果你能成功地用CORS找出這些微不足道的問題,你就會在公開場合使用你的API密鑰將你的商店展示給像我這樣的人。我將能夠刪除您的所有資源。我可以用我想要的任何東西來替換你的庫存。

你不能這樣使用Javascript。這很荒謬。創建一個可以正確驗證oAuth的安全應用程序。然後使用您的Javascript與該應用程序交談。否則,你會遇到麻煩,因爲有人會讓你看起來很傻。

+0

對不對? Shopify應用程序和應用代理應該解決什麼問題? – ianstarz

+0

是的。究竟。令我驚訝的是,有多少人仍然不瞭解Javascript的基礎知識。應用程序代理允許您在沒有CORS問題的情況下進行安全可靠的XHR呼叫。 –