我正在尝试配置应用代理,以便用户可以为Shopify商店提交产品。我已经看到了多种方式来签名和处理它,但我无法让它工作,所以ShopifyAPI将工作。行动如下,我注意到:shopify_session过滤器仅适用于管理员,而不适用于客户。
def submit_product
query_parameters = Rack::Utils.parse_query(request.query_string)
# Remove and save the "signature" entry
signature = query_parameters.delete("signature")
sorted_params = query_parameters.collect{ |k, v| "#{k}=#{Array(v).join(',')}" }.sort.join
calculated_signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha256'), ENV['SHOPIFY_SECRET'], sorted_params)
raise 'Invalid signature' if signature != calculated_signature
@store = Store.where(shopify_url: query_parameters['shop']).first
if @store.present?
@product = @store.products.new
@product.images.build
@product_types = ShopifyAPI::CustomCollection.find(@store.customizable_collection_id).products
end
end
答案 0 :(得分:1)
在连接ShopifyAPI之前,您应首先建立API会话。否则ShopifyAPI::CustomCollection.find
方法无法连接到Shopify。 shopify_api README的第3步和第4步包括以下示例:
session = ShopifyAPI::Session.new("SHOP_NAME.myshopify.com", token)
ShopifyAPI::Base.activate_session(session)
product_types = ShopifyAPI::CustomCollection.find(id)
token
是您可以在OAuth身份验证阶段(将应用安装到商店中)请求的永久访问令牌。