Shopify和私人应用程序

时间:2015-01-27 18:53:27

标签: c# jquery oauth oauth-2.0 shopify

我创建了一个私人应用程序,可以在我的网站上使用(想法是网站将作为前端使用shopify的api连接到商店)。 当我创建应用程序时,如果我编辑它,则会有一个示例网址,如下所示:

  
    

https://926b44aa1af222f2089ffa4988bc146b:49a28c7ccfa3b29b2a9af8019b2723cc@kudos-6.myshopify.com/admin/products.json

  
如果您单击该链接,则可以看到我已设置的产品。 现在,如果我使用jQuery $ .get获取该URL并将其放入我的网站,我会收到一条错误,指出无效的API密钥或访问令牌(无法识别的登录或错误的密码,因为您可以成像,这真的很令人愤怒。

我尝试使用ApiPassword添加标题,如下所示:

“X-Shopify-Access-Token”:“49a28c7ccfa3b29b2a9af8019b2723cc”

但我得到同样的错误。 现在这可能是由于不允许交叉原始标题等。所以我在c#中创建了一个函数:

public string Get()
{
    using (var wc = new WebClient())
    {
        return wc.DownloadString("https://926b44aa1af222f2089ffa4988bc146b:49a28c7ccfa3b29b2a9af8019b2723cc@kudos-6.myshopify.com/admin/products.json");
    }
}

我希望工作,但事实并非如此。我犯了同样的错误。 所以我试过了:

public string Get()
{
    using (var wc = new WebClient())
    {
        wc.Headers.Add("X-Shopify-Access-Token", "926b44aa1af222f2089ffa4988bc146b");

        return wc.DownloadString("https://926b44aa1af222f2089ffa4988bc146b:49a28c7ccfa3b29b2a9af8019b2723cc@kudos-6.myshopify.com/admin/products.json");
    }
}

然后猜猜是什么,我得到同样的错误。 所以我尝试使用这个秘密:

public string Get()
{
    using (var wc = new WebClient())
    {
        wc.Headers.Add("X-Shopify-Access-Token", "e63081c23cd05b64205dbdb670d60241");

        return wc.DownloadString("https://926b44aa1af222f2089ffa4988bc146b:49a28c7ccfa3b29b2a9af8019b2723cc@kudos-6.myshopify.com/admin/products.json");
    }
}

同样的错误。

谁能告诉我为什么?

3 个答案:

答案 0 :(得分:2)

所以,对于其他有这个问题的人来说,这就是解决方案:

首先,将这些行添加到 WebApiConfig

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.Formatters.Remove(config.Formatters.XmlFormatter);

然后,使用 Api密码作为访问令牌,如下所示:

public string Get()
{
    using (var wc = new WebClient())
    {
        wc.Headers.Add("X-Shopify-Access-Token", "49a28c7ccfa3b29b2a9af8019b2723cc");

        return wc.DownloadString("https://kudos-6.myshopify.com/admin/orders.json");
    }
}

就是这样。如果你这样做,它会起作用。

答案 1 :(得分:-1)

您可以使用jQuery检索产品,如下所示:

$.ajax({
type: 'GET',
url: 'http://yourshop.myshopify.com/products.json',
dataType: 'jsonp',
success: function(data) { 
    console.log(data);
}
});

答案 2 :(得分:-2)

在你前进的时候,你应该停下来并退出这种模式。您是否看到将您的API令牌设置为访问您的商店在公共网站中的愚蠢行为?没有什么可以阻止任何汤姆,迪克或简骚扰你的商店并破坏你的电子商务日。

相反,让自己成为使用App Proxy访问后端商品的前端。至少这是安全的,并确保没有人可以搞乱你的商店。