【问题标题】:Shopify and Private ApplicationsShopify 和私人应用程序
【发布时间】:2015-03-26 12:05:50
【问题描述】:

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

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");
    }
}

同样的错误。

谁能告诉我为什么?

【问题讨论】:

    标签: c# jquery oauth oauth-2.0 shopify


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 你不能这样做。你需要一些身份验证什么的。
      • @r3plica 我相信你可以。试一试:)
      • 我做了,我得到了这个错误:拒绝从'kudos-6.myshopify.com/admin/…'执行脚本,因为它的 MIME 类型('application/json')不可执行,并且启用了严格的 MIME 类型检查。
      • @r3plica 对,它不适用于订单。但是,它适用于获取产品、购物车信息和某些其他类型的数据。
      • 同样的事情:拒绝执行来自 'kudos-6.myshopify.com/admin/…' 的脚本,因为它的 MIME 类型('application/json')不可执行,并且启用了严格的 MIME 类型检查。
      【解决方案3】:

      您应该在领先时停止并退出此模式。您没有发现将访问您商店的 API 令牌放在公共网站是多么愚蠢吗?没有什么可以阻止任何汤姆、迪克或简骚扰您的商店并破坏您的电子商务日。

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

      【讨论】:

      • 这是一个测试站点,所以他们不能破坏任何东西
      • 所以如果你想知道你的枪好不好用,你会装上子弹,对准你的朋友试试看吗?
      • 不,我在其中放置了空白并触发它以确保它确实触发了。我包含所有 API 密钥等的原因是,如果人们有时间或真的想要的话,他们可以实际使用它。
      • 对.. 但是一旦你克服了它发射空白的事实,当你确实投入了真正的子弹时,你将浪费你真正的朋友。因此我的观点。尝试用 nerf 球代替。你们都玩得很开心,没有人受伤!
      • 不,一旦我让它工作(就像现在一样)。我删除私有应用程序并重新创建它,从而使所有 api 访问令牌等无效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多