无法在Shopify中的应用程序中嵌入网站(X-Frame-Options)

时间:2015-08-26 15:39:49

标签: ruby-on-rails ruby shopify x-frame-options

我在过去几周一直在研究我的第一个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。我已经尝试使用

删除application_controller.rb中的选项以及我的application.rb中的选项
Response.headers.delete('X-Frame-Options') 

config.action_dispatch.default_headers.delete('X-Frame-Options') 

分别。用户第一次安装应用程序似乎一切正常,嵌入,逻辑等等,但在他第二次尝试之后,所有的地狱都破裂了。每次用户访问我的应用程序时,如何嵌入所有网站?我读到Shopify的响应默认有一个DENY Header,但我确信必须有一个解决这个问题的方法。我不能让用户每次都卸载应用程序。

提前致谢

3 个答案:

答案 0 :(得分:3)

Shopify忽略302他们的收费批准表格。原因是,您的应用嵌入了iframe。付款确认终端拒绝嵌入iframe中,无论其来源如何 - 他们甚至不会将自己的网站列入白名单!!

这意味着您不能只需在订阅确认网址上成功填写表单和302,这太容易了。

必须编写一些将获取确认网址并执行window.top.location = confirm_url;的JavaScript。

必须突破iframe或shopify也会拒绝你重定向功能,而且你会回到原来的位置。

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

我不得不将我的快速和简单的转换成'应用程序进行Ajax调用以将订阅信息提交到我的服务器,然后使用返回的结果确认URL进行JS重定向。

不得不说,Shopify的API 骇人听闻记录不足,而且实施得非常糟糕。他们的" API"提出了障碍。

答案 1 :(得分:1)

在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

答案 2 :(得分:0)

好的,这远不是我想要的解决方案,但很好。如果我发现费用无效,我会将用户重定向到我的billing_error_path。在那里,我有一个带有link_to的按钮到我的shopify-app列表。在那里,他可以再次点击“获取”,然后重定向回我的商店,可以再次接受/拒绝费用。可能不是最好的解决方案,但至少它确实是我正在寻找的