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

Not able to embed sites in an application in Shopify (X-Frame-Options)

在过去的几周里,我一直在为我的第一个 RoR/Shopify-application 工作,它快完成了。我唯一遇到的麻烦是申请费用。当用户在商店中看到我的应用程序时,他单击 "Get",然后初始化身份验证过程。正在安装应用程序,用户可以 Accept/Decline 收费。如果他拒绝,他将被重定向到我在商店中的应用列表。 现在这是我的问题。如果用户拒绝付费,我的应用程序仍会安装,如果他第二次点击我的横幅,我需要检查他是否为此付费。我通过

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 设置为拒绝。我已经尝试使用

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

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

分别。用户第一次安装该应用程序时,一切似乎都正常,嵌入、逻辑等,但在他第二次尝试后,一切都变得一团糟。每次用户访问我的应用程序时,如何嵌入所有站点?我读到 Shopify 的回复默认为 DENY Header,但我确信必须有解决此问题的方法。我不能让用户每次都卸载应用程序。

提前致谢

好的,到目前为止,这不是我一直在寻找的解决方案,但是哦,好吧。如果我发现收费无效,我会将用户重定向到我的 billing_error_path。我的 shopify-app 列表中有一个带有 link_to 的按钮。在那里他可以再次点击 "Get" 然后被重定向回我的商店并且可以再次 accept/decline 费用。可能不是最好的解决方案,但至少它满足了我的需求

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

这意味着你 不能 简单地做一个表格 post 和 302 成功订阅确认 url,那太容易了。

必须 编写一些javascript 来接受确认url 并执行window.top.location = confirm_url;

必须 脱离 iframe,否则 shopify 也会拒绝您的重定向功能,您将回到原来的位置。

或者,您可以在新的 window 中打开 link。

我必须转换我的 'quick and simple' 应用程序以进行 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