ruby-on-rails - 即使我可以看到它们,也不能使用 rails 参数。具体charge_id
问题描述
我一直致力于将我的 Rails、Shopify 嵌入式应用程序连接到 Shopify 计费 API。看起来很简单:
- 您通过 API 创建一个新的 Shopify RecurringApplicationCharge 对象,将其提交给 Shopify。
- 它们返回填充了其他字段的对象,包括您可以重定向到的“confirmation_url”。
- 此确认 URL 有一个 charge_id 参数,您可以使用它来激活计费。
我可以通过上述罚款,甚至可以在日志中以及运行 params.inspect 时看到“charge_id”参数。但是,我不能使用它。每次我尝试将参数分配给实例变量时,我都会得到“nil class”。
控制器
class HomeController < AuthenticatedController
before_action :require_login, except: [:activate_charge]
skip_before_action :verify_authenticity_token, only: [:activate_charge]
before_action :require_subscription, except: [:activate_charge]
def require_subscription
unless ShopifyAPI::RecurringApplicationCharge.current
@recurring_application_charge = ShopifyAPI::RecurringApplicationCharge.new
@recurring_application_charge.name = "Monthly Plan"
@recurring_application_charge.price = 15.0
@recurring_application_charge.return_url = "https://xxxxx.ngrok.io/activatecharge"
@recurring_application_charge.test = true
@recurring_application_charge.trial_days = 7
@recurring_application_charge.save
if @recurring_application_charge.id
#@tokens[:confirmation_url] = @recurring_application_charge.confirmation_url
fullpage_redirect_to(@recurring_application_charge.T)
end
end
end
def activate_charge
@params = params[:charge_id]
#@recurring_application_charge = ShopifyAPI::RecurringApplicationCharge.find(params[:charge_id])
#@recurring_application_charge.status == "accepted" ? @recurring_application_charge.activate : redirect_to('/')
#@recurring_application_charge.save
redirect_to('/')
end
def recurring_application_charge_params
params.require(:recurring_application_charge).permit(:name, :price, :capped_amount, :terms, :trial_days, :charge_id)
end
参数检查
<ActionController::Parameters {"charge_id"=>"12271520309", "hmac"=>"f7a75bba157ef40b3144d8d0e8ceb8b37628ea294fbe16887b623c0d311d84da", "locale"=>"en-GB", "session"=>"f8b8ef448a1d9883e4884c858e0bc39d789d53d2eeffffb34c42f5bc390af6f1", "shop"=>"xxxxx.myshopify.com", "timestamp"=>"1578555752", "controller"=>"home", "action"=>"activate_charge"} permitted: true>
一些线索
我有一个用于其他用途的 API 控制器,它未经 Shopify 或 Clearance 认证。如果我使用这个控制器,我可以获得“charge_id”参数(尽管这个控制器不能用于其他原因)。
我一直在尝试确保强大的参数允许它,但我没有写给模型,所以这不重要吗?
在有关如何设置计费的旧 Shopify 页面上,他们在第一个对象创建阶段有这行代码,我无法实现:
@tokens[:confirmation_url] = recurring_application_charge.confirmation_url
任何帮助都会很棒,我不知道这是否是一个非常简单的问题,或者是否存在我完全没有注意到的身份验证问题。
谢谢!
编辑 返回,当 params.class 和 params.inspect 被调用时
ActionController::Parameters
<ActionController::Parameters {"charge_id"=>"12284756045", "hmac"=>"9ff4d8a30d623f2d03d0226ff3d98c780e451615d630c149697e5b2dd4ffd4b5", "locale"=>"en-GB", "session"=>"f8b8ef448a1d9883e4884c852e0bc39d789d53d2eeffffb34c42f5bc390af6f1", "shop"=>"xxxx.myshopify.com", "timestamp"=>"1578737591", "controller"=>"home", "action"=>"activate_charge"} permitted: false>
另一条信息,如果我将以下内容添加到控制器:
params = params.to_h[:charge_id]
然后调用params["charge_id"],从视图中我可以得到返回的charge_id。但是,当我尝试将其分配给控制器中的@charge_id,然后尝试在视图中调用@charge_id 进行测试时,它什么也不返回:S
params = params.to_h[:charge_id]
@charge_id = params["charge_id"]
解决方案
params 将您的 id 转换为字符串,而您可能会将其分配给不是字符串的 id,这意味着您应该:
@params = params[:charge_id].to_i
分享更多细节,我想我们将能够解决这个问题。
更新(调试帮助):
对于初学者控制器调试(我猜你喜欢),在你得到的行之前@params = params[:charge_id]
:
puts "*"*100
puts params
puts "*"*100
现在转到运行服务器的控制台,并在重新加载页面(在浏览器中)后,按 Ctrl+Shift+F 并输入*******
。这将找到打印参数的位置。GLHF
推荐阅读
- javascript - 反应 cdn 参考
- android - 片段中的onClick按钮不起作用
- dns - Github Pages 不适用于西里尔文自定义域
- flask - 烧瓶 url 与 href 冲突
- mysql - 如何在 MySqL 中为电子商务网站设计多种产品类型的数据库
- wordpress - 如何在 wordpress 4.9 可视化编辑器中允许 thead 和 th 标签?
- python - 如果用户猜到密码短语,如何结束程序。我的代码在一个永无止境的循环中运行
- json - jq- 循环中的参考当前位置
- swift - Swift - UITabBarContorller 初始视图 - 何时强制启动登录屏幕?
- css - 如何使用 css 和 Bootstrap 创建仪表板来调整边距