Shopify 和私有应用程序

Shopify and Private Applications

我创建了一个私人应用程序供我的网站使用(我的想法是该网站将作为前端使用 shopify 的 api 连接到商店)。 当我创建应用程序时,如果我对其进行编辑,则会有一个示例 url,如下所示:

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

如果你点击 link,你可以看到我设置的产品。 现在,如果我使用 URL 并使用 jQuery $.get 将其放入我的网站,我会收到一条错误消息,指出无效的 API 密钥或访问令牌(无法识别的登录名或错误的密码是真的很气人,你可以成像。

我尝试使用如下所示的 ApiPassword 添加 header:

"X-Shopify-Access-Token": "49a28c7ccfa3b29b2a9af8019b2723cc"

但是我得到了同样的错误。 现在这可能是由于不允许跨源 headers 等。所以我在 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");
    }
}

同样的错误。

谁能告诉我为什么?

当你领先时,你应该停止并退出这个模式。您没有看到将您的 API 令牌用于访问您的商店 放在 public 网站 中的愚蠢行为吗?没有什么可以阻止汤姆、迪克或简骚扰您的商店并破坏您的电子商务日。

相反,让自己成为使用应用程序代理访问后端商品的前端。至少那是安全的,并确保没有人可以弄乱您的商店。

您可以像这样使用 jQuery 检索产品:

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

因此,对于遇到此问题的任何其他人,这里是解决方案:

首先,将这些行添加到您的 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");
    }
}

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