Ruby on rails 无法在Shopify中的应用程序中嵌入站点(X-Frame-Options)

Ruby on rails 无法在Shopify中的应用程序中嵌入站点(X-Frame-Options),ruby-on-rails,ruby,shopify,x-frame-options,Ruby On Rails,Ruby,Shopify,X Frame Options,在过去的几周里,我一直在开发我的第一个RoR/Shopify应用程序,它几乎完成了。我唯一的麻烦就是申请费。当用户在商店中看到我的应用程序时,他单击“Get”,然后初始化身份验证过程。正在安装应用程序,用户可以接受/拒绝费用。如果他拒绝,他将被重定向到商店中的我的应用程序列表。 现在我的问题来了。如果用户拒绝支付费用,我的应用程序仍然安装,如果他第二次点击我的横幅,我需要检查他是否支付了费用。我是通过 if (ShopifyAPI::RecurringApplicationCharge.curr

在过去的几周里,我一直在开发我的第一个RoR/Shopify应用程序,它几乎完成了。我唯一的麻烦就是申请费。当用户在商店中看到我的应用程序时,他单击“Get”,然后初始化身份验证过程。正在安装应用程序,用户可以接受/拒绝费用。如果他拒绝,他将被重定向到商店中的我的应用程序列表。 现在我的问题来了。如果用户拒绝支付费用,我的应用程序仍然安装,如果他第二次点击我的横幅,我需要检查他是否支付了费用。我是通过

if (ShopifyAPI::RecurringApplicationCharge.current)
   some logic since the charge is valid
else 
   redirect_to billing_index_path(:shop_url => cur_shop_url)
我的想法是,如果用户还没有付款,弹出的收费窗口会再次出现。这不起作用,我得到一个错误,说我的网站没有显示,因为X-Frame-Options设置为DENY。我已经尝试使用以下两种方法删除我的应用程序_controller.rb和我的应用程序.rb中的选项:

Response.headers.delete('X-Frame-Options') 

分别。用户第一次安装应用程序时,一切似乎都正常,包括嵌入、逻辑等。但在他第二次尝试后,一切都崩溃了。如何在用户每次访问我的应用程序时嵌入所有站点?我读到Shopify的响应在默认情况下有一个拒绝标题,但我确信一定有解决这个问题的方法。我无法让用户每次卸载应用程序


提前感谢

好的,这不是我一直在寻找的解决方案,但很好。如果我发现费用无效,我会将用户重定向到我的账单错误路径。我有一个按钮,上面有一个链接到我的shopify应用程序列表。在那里,他可以再次单击“获取”,然后重定向回我的店铺,并可以再次接受/拒绝费用。可能不是最好的解决方案,但至少它实现了我所期望的Shopify ignore 302的收费审批表。原因是,您的应用程序嵌入在iframe中。支付确认端点拒绝嵌入iframe中,无论其来源如何-他们甚至不将自己的站点列入白名单

这意味着您不能简单地在订阅确认url成功后发布表单和302,这太容易了

您必须编写一些javascript来获取确认url并执行
window.top.location=confirm\u url

你必须突破iframe,否则shopify也会拒绝你的重定向功能,你会回到原来的状态

或者,您可以在新窗口中打开链接

我必须转换我的“快速简单”应用程序,进行Ajax调用,将订阅信息提交到我的服务器,然后使用返回的确认url执行JS重定向


不得不说,Shopify的API文档化程度极低,实现得极为糟糕。他们的“API”每转一圈都会设置障碍。

在config/application.rb文件中添加以下代码

config.action_dispatch.default_headers['P3P'] = 'CP="Not used"'
config.action_dispatch.default_headers.delete('X-Frame-Options')
config.active_record.raise_in_transactional_callbacks = true

我也想知道这个问题的答案。据我所知,这是Shopify模式中的一个漏洞。我使用的是Sinatra,在试图让付款确认对话框显示第二次/第三次或更多时间时遇到同样的问题。为什么不添加一个免费的非常有限的计划?这样,你就有很多商人在船上,他们可以尝试你的应用程序的魔力吗?@alexandresaiz我现在按照我下面描述的方式做了。我增加了7天的试用期,所以应该足够了。我会免费做第一个应用程序,但我不是决定这些事情的人;)shopify api:最糟糕的开发体验问题是shopify不允许从嵌入式应用程序进行302重定向。我的应用程序超时了。这个错误出现在javascript控制台加载被X-Frame-Options拒绝时:https://.myshopify.com/admin/charges//confirm_recurring_application_charge?signature= 不允许框架。我按照@Rebs的指示,将302重新编写为javascript重定向(window.top.location),效果很好。我制作了一个屏幕演示了这个问题,并于2015年11月27日在2421717号票证中向Shopify报告了这个问题,但截至2016年1月18日,他们选择不做任何事情。@Rebs我也有同样的问题,我通过调用ajax获取订阅信息来解决这个问题。然后使用您建议的方法重定向到确认页面。但现在我无法回到shopify的iframe范围。欢迎来到Stack Overflow!虽然这个代码片段可能会解决这个问题,包括一个解释,以提高您的文章的质量。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。
config.action_dispatch.default_headers['P3P'] = 'CP="Not used"'
config.action_dispatch.default_headers.delete('X-Frame-Options')
config.active_record.raise_in_transactional_callbacks = true