我一直在努力将Rails,Shopify嵌入式应用程序连接到Shopify计费API。看起来很简单:
我可以通过上述罚款,甚至可以在日志中以及运行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对象,然后提交...
ActionController::Parameters
使用"charge_id"
,而不是:charge_id
。也许您应该尝试一下。或使用params.to_h[:charge_id]
,因为to_h
将返回HashWithIndifferentAccess。
参数会将您的ID转换为字符串,而您可能将其分配给非字符串的ID,这意味着您应该: