C# Shopify和私有应用程序

C# Shopify和私有应用程序,c#,jquery,oauth,oauth-2.0,shopify,C#,Jquery,Oauth,Oauth 2.0,Shopify,我已经创建了一个用于我的网站的私人应用程序(想法是该网站将作为前端使用shopify的api连接到商店)。 当我创建应用程序时,如果我编辑它,会有一个示例url,如下所示: $.ajax({ type: 'GET', url: 'http://yourshop.myshopify.com/products.json', dataType: 'jsonp', success: function(data) { console.log(data); } }); public string

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

$.ajax({
type: 'GET',
url: 'http://yourshop.myshopify.com/products.json',
dataType: 'jsonp',
success: function(data) { 
    console.log(data);
}
});
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");
    }
}

如果单击该链接,您可以看到我设置的产品。 现在,如果我使用jQuery$.get将该URL放入我的网站,我会收到一个错误,指出无效的API密钥或访问令牌(无法识别的登录名或错误的密码),正如您所看到的,这确实令人愤怒

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

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

但我也犯了同样的错误。 现在这可能是由于不允许跨源标题等原因,所以我在c#中创建了一个函数:

我希望它能起作用,但没有。我也有同样的错误。 所以我试着:

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代币放在一个公共网站上访问你的店铺有多么愚蠢吗?没有什么能阻止汤姆、迪克或简骚扰你的店铺,破坏你的电子商务日


相反,让自己成为一个使用应用程序代理访问后端商品的前端。至少这是安全的,并确保没有人会干扰您的店铺。

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

$.ajax({
type: 'GET',
url: 'http://yourshop.myshopify.com/products.json',
dataType: 'jsonp',
success: function(data) { 
    console.log(data);
}
});
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");
    }
}

因此,对于其他有此问题的人,以下是解决方案:

首先,将这些行添加到您的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密码作为访问令牌,如下所示:

$.ajax({
type: 'GET',
url: 'http://yourshop.myshopify.com/products.json',
dataType: 'jsonp',
success: function(data) { 
    console.log(data);
}
});
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");
    }
}

就是这样。如果你这样做,它会工作的。

这是一个测试站点,所以他们不会破坏任何东西。如果你想知道你的枪是否工作,你会加载它,指向你的朋友并试用它吗?不,我在它里面放空格,然后发射它,以确保它确实发射。我包括所有API密钥等的原因是为了让人们能够真正玩wi如果他们有时间或者真的想这样做的话。是的。但是一旦你忘记了它发射空弹的事实,当你真的投进真子弹的时候,你就浪费了你真正的朋友。因此我的观点是。试着玩nerf球吧。你们都玩得很开心,没有人受伤!不,一旦我让它工作了(就像现在我一样)。我删除了私有应用并重新创建它,从而使所有api访问令牌无效,等等。你不能这样做。你需要一些身份验证或其他东西。@r3plia我相信你可以。试试看:)我这样做了,但我得到了以下错误:拒绝从“”执行脚本,因为它的MIME类型('application/json')不可执行,并且启用了严格的MIME类型检查。@是的,它不适用于订单。但是,它用于获取产品、购物车信息和某些其他类型的数据。同样的事情:拒绝从“”执行脚本,因为它的MIME类型(“应用程序/json”)不可执行,并且启用了严格的MIME类型检查。