从App Proxy调用Shopify API

时间:2017-12-18 18:26:40

标签: ruby-on-rails ruby shopify shopify-app

目标

我想创建一个以下应用。

Merchant为每位客户选择“顶级产品”。这些将存储在我的后端。

例如:

  • 客户A:
    • 产品X,变体1
    • 产品Y,变体3
  • 客户B:
    • 产品X,变体2
    • 产品Z,变体1
    • 产品W,变体1

然后客户应该能够登录,转到商店中的页面(例如store.com/top_products)并查看他们自己的“顶级产品”。

到目前为止我设法做了什么

我设法将Railify Shopify应用程序(https://github.com/Shopify/shopify_app,它使用shopify_api gem)部署到Heroku并将其连接到我的商店。

我还设法设置了应用代理。我从管理应用程序页面和应用程序代理的应用程序中得到了正确的响应。

基本上我的公共应用似乎工作正常。

我现在必须做什么

我必须在app proxy中调用类似的东西:

ShopifyAPI::Product.find(:all, params: { limit: 10 })

但是,这只能从ShopifyApp::AuthenticatedController调用(例如在管理员应用控制器中)而不是ShopifyApp::ApplicationController(就像在代理控制器中一样)。

到目前为止,我只设法调用API并从商店的管理信息中心查看正确的结果。

我无法通过未经身份验证的应用代理调用 ShopifyAPI::Product.find

Google并没有真正帮助我。 这类似于我的问题(虽然没有解决方案):https://ecommerce.shopify.com/c/shopify-discussion/t/how-to-connect-to-a-store-with-api-from-app-proxy-request-429417

问题

  1. 从App Proxy调用API的最佳方法是什么?
  2. 或者我如何使用my显示商店前端的一些信息 后端与商店的API对话?应用代理是正确的方法吗?

1 个答案:

答案 0 :(得分:3)

Shopify的App Proxy调用会将商店作为参数购物。因此,您可以在后端查找商店,并通过经过身份验证的会话执行任何操作。我一直使用App Proxy和Webhooks这样做。您验证来自Shopify的呼叫,您获得了商店名称,因此您可以打开安全会话。此外,您可以通过App Proxy调用发送客户ID,以便为客户获取产品。

你正在做正确的事,App Proxy是正确的模式,所以继续。距离荣耀只有几分钟的路程。

从我的一个代理控制器...

shop = Shop.find_by(shopify_domain: params[:shop])
if shop
  shop.with_shopify_session do
    products = ShopifyAPI::Product.find(params[:id])
    # la-dee-da I got a product...
  end
end