Не могу использовать rails params, хотя я их вижу. В частности обвинение_ид - PullRequest
0 голосов
/ 09 января 2020

Я работал над подключением моего Rails, встроенного приложения Shopify к API биллинга Shopify. Это кажется достаточно простым:

  1. Вы создаете новый объект Shopify RecurringApplicationCharge через API, отправляете его в Shopify.
  2. Они возвращают объект с заполненными дополнительными полями, включая 'translation_url ', на которую вы можете перенаправить.
  3. Этот URL-адрес подтверждения содержит параметр charge_id, который вы можете использовать для активации биллинга.

Я могу получить штраф выше и даже увидеть параметр 'charge_id' в журнале, а также когда я запускаю params.inspect. Тем не менее, я не могу использовать это. Каждый раз, когда я пытаюсь присвоить params переменной экземпляра, я получаю '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

Любая помощь будет отличной, я не могу понять, действительно ли это простая проблема или есть ли проблема с аутентификацией, о которой я полностью забываю.

Спасибо!

Edit Return, когда 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"]

Ответы [ 3 ]

0 голосов
/ 09 января 2020

params преобразует ваш идентификатор в строку, в то время как вы можете присвоить его идентификатору, который не является строкой, что означает, что вы должны:

  @params = params[:charge_id].to_i

Поделиться более подробной информацией, и я думаю, что мы сможем решить эту проблему .

ОБНОВЛЕНИЕ (справка по отладке):

Для отладки контроллера новичка (как вы предпочитаете, я полагаю), до вашей строки, где вы получаете @params = params[:charge_id]:

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

Теперь go на консоли, где работает ваш сервер, и после перезагрузки страницы (в браузере) нажмите Ctrl + Shift + F и введите *******. Это найдет место, где ваши параметры будут напечатаны. GLHF

0 голосов
/ 11 января 2020

тьфу, антиклимакс. Я заметил, что ни один из кодов в методе activ_charge фактически не работает. Затем я выяснил, что проблема связана с использованием метода require_subscription и activ_charge в приватной секции моего контроллера.

0 голосов
/ 09 января 2020

ActionController::Parameters использует "charge_id", а не :charge_id. Может тебе стоит попробовать это. Или работайте с params.to_h[:charge_id], так как to_h вернет HashWithIndifferentAccess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...