繁体   English   中英

即使我能看到它们,也不能使用 rails 参数。 具体charge_id

[英]Can't use rails params even though I can see them. Specifically charge_id

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

  1. 您通过 API 创建一个新的 Shopify RecurringApplicationCharge 对象,并将其提交给 Shopify。
  2. 它们返回填充了其他字段的对象,包括您可以重定向到的“confirmation_url”。
  3. 此确认 URL 有一个 charge_id 参数,您可以使用它来激活计费。

我可以通过上述罚款,甚至可以在日志中以及运行 params.inspect 时看到“charge_id”参数。 但是,我不能使用它。 每次我尝试将参数分配给实例变量时,我都会得到“nil 类”。

控制器

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

ActionController::Parameters使用"charge_id" ,而不是:charge_id 也许你应该尝试一下。 或者使用params.to_h[:charge_id] ,因为to_h将返回一个 HashWithIndifferentAccess。

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

  @params = params[:charge_id].to_i

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

更新(调试帮助):

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

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

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

呃,反高潮。 我注意到 activate_charge 方法中的任何代码实际上都没有运行。 然后我发现在我的控制器的私有部分使用 require_subscription 和 activate_charge 方法导致了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM