我正在尝试将Paypal checkout集成到我的Rails应用程序中,当我将其部署到Heroku时,我遇到了一个问题。它在我的开发环境中工作得很好,但是当我尝试在我的生产级别上使用它时,应用程序崩溃了。我一直在关注本教程:http://www.gotealeaf.com/blog/basic-paypal-checkout-processing-in-rails
在我的rails应用程序中,我有一个注册模型,一旦创建了注册对象,它就会将用户发送到Paypal URL。用户完成付款后,会将用户发回我的网站。 这是我的控制器中用于付款的相关代码:
def create
respond_to do |format|
if @registration.save
format.html { redirect_to @registration.paypal_url(yea_school_registration_path(@yea_school, @registration), @amount), notice: "You should recieve an email soon." }
format.json { render :show, status: :created, location: @registration }
else
format.html { render :new }
format.json { render json: @registration.errors, status: :unprocessable_entity }
end
end
end
def hook
params.permit!
status = params[:payment_status]
if status == "Completed"
@registration = Registration.find(params[:id])
@registration.update_attributes notification_params: params, status: status, transaction_id: params[:txn_id], purchased_at: Time.now
end
render nothings: true
end
这是我的控制器文件中付款流程所需的代码。快速向下走,一旦创建了对象,它就会将其重定向到通过我模型中的方法生成的贝宝网址。实例变量@amount实际上不是注册模型的一部分。它是用于确定用户是否从他们的订单中取出任何钱的不同模型的一部分。再次,这在我的开发环境中完全正常,所以我不相信这是问题所在。
这是用于在我的模型中创建网址的代码:
serialize :notification_params, Hash
def paypal_url(return_path, amount)
@amount = amount
values = {
business: "fake@email.com",
cmd: "_xclick",
upload: 1,
return: "#{ENV["app_host"]}#{return_path}",
invoice: id,
amount: 20 - @amount,
item_name: "Item",
item_number: id,
quantity: '1',
notify_url: "#{ENV["app_host"]}/hook"
}
"#{ENV["paypal_host"]}/cgi-bin/webscr?" + values.to_query
end
在此,将值的散列发送到Paypal,并生成Paypal URL以及返回URL。 app_host是我网站的网址,paypal_url是Paypal的网址。这些作为环境变量保存。我已经在Heroku中声明了这些变量。我的其他环境变量有效,所以我不知道这是不是问题。
正在创建注册对象,但它不会支付Paypal。同样,这在我的开发环境中运行良好,但是当我尝试在我的生产级别上进行测试时,在Heroku中,它会崩溃。我是Ruby on Rails的新手,也是Paypal的新手。如果你有一个非常棒的答案,那么非常感谢你的帮助!