即使可以看到它们也无法使用rails参数。具体来说是charge_id

问题描述 投票:0回答:2

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

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

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

Controller

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

params.inspect

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

我一直在努力将Rails,Shopify嵌入式应用程序连接到Shopify计费API。看起来很简单:您可以通过API创建一个新的Shopify RecurringApplicationCharge对象,然后提交...

ruby-on-rails ruby-on-rails-4 shopify-app
2个回答
0
投票

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


0
投票

参数会将您的ID转换为字符串,而您可能将其分配给非字符串的ID,这意味着您应该:

© www.soinside.com 2019 - 2024. All rights reserved.