首页 > 解决方案 > 即使我可以看到它们,也不能使用 rails 参数。具体charge_id

问题描述

我一直致力于将我的 Rails、Shopify 嵌入式应用程序连接到 Shopify 计费 API。看起来很简单:

  1. 您通过 API 创建一个新的 Shopify RecurringApplicationCharge 对象,将其提交给 Shopify。
  2. 它们返回填充了其他字段的对象,包括您可以重定向到的“confirmation_url”。
  3. 此确认 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>

一些线索

    @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"]

标签: ruby-on-railsruby-on-rails-4shopify-app

解决方案


params 将您的 id 转换为字符串,而您可能会将其分配给不是字符串的 id,这意味着您应该:

  @params = params[:charge_id].to_i

分享更多细节,我想我们将能够解决这个问题。

更新(调试帮助):

对于初学者控制器调试(我猜你喜欢),在你得到的行之前@params = params[:charge_id]

  puts "*"*100
  puts params
  puts "*"*100

现在转到运行服务器的控制台,并在重新加载页面(在浏览器中)后,按 Ctrl+Shift+F 并输入*******。这将找到打印参数的位置。GLHF


推荐阅读