Я работал над подключением моего Rails, встроенного приложения Shopify к API биллинга Shopify. Это кажется достаточно простым:
- Вы создаете новый объект Shopify RecurringApplicationCharge через API, отправляете его в Shopify.
- Они возвращают объект с заполненными дополнительными полями, включая 'translation_url ', на которую вы можете перенаправить.
- Этот 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"]