无法在 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
在过去的几周里,我一直在为我的第一个 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