Shopify 和私有应用程序
Shopify and Private Applications
我创建了一个私人应用程序供我的网站使用(我的想法是该网站将作为前端使用 shopify 的 api 连接到商店)。
当我创建应用程序时,如果我对其进行编辑,则会有一个示例 url,如下所示:
如果你点击 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");
}
}
就是这样。如果你这样做,它就会起作用。
我创建了一个私人应用程序供我的网站使用(我的想法是该网站将作为前端使用 shopify 的 api 连接到商店)。 当我创建应用程序时,如果我对其进行编辑,则会有一个示例 url,如下所示:
如果你点击 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");
}
}
就是这样。如果你这样做,它就会起作用。