我有一个 Rails 7 应用程序,当用户单击按钮时,它会重定向到支付网关,通过 GET 请求进行在线支付,在我的开发模式下,在本地计算机(在 localhost:3000 上),它工作得很好。
orders_controller.rb
def payE
@payment_response = Easebuzz::Payment.initiate({
"txnid" => "#{@order.id}",
"amount" => amount.to_f,
"firstname" => current_user.name,
"email" => current_user.email,
"phone" => current_user.phone_number,
"productinfo" => "Payment for Order#{@order.id}",
"surl" => "http://localhost:3000/orders/#{@order.id}/successE",
"furl" => "http://localhost:3000/orders/#{@order.id}/failedTransaction",
})
if @payment_response['status'] == 1
data = @payment_response['data']
redirect_to("https://testpay.easebuzz.in/pay/#{data}", allow_other_host: true, status: 303)
end
puts @payment_response
end
路线.rb:
resources :orders do
member do
get '/payE', to: 'orders#payE'
end
end
index.html.erb
<%= link_to payE_order_path(order) %>
正如我所说,在开发模式下,它工作得非常好,但是当我在生产中使用它时,我使用aws ec2、apache和passenger部署了它,并且刚刚改变了
def payE
.....
"surl" => "http://(Main Domain.in)/orders/#{@order.id}/successE",
"furl" => "http://(Main Domain.in)/orders/#{@order.id}/failedTransaction",
......
.......
redirect_to("https://pay.easebuzz.in/pay/#{data}", allow_other_host: true, status: 303)
#using pay.easebuzz in production
.....
puts @payment_response
end
GET 请求显示
(OrdersController#payE is missing a template for request formats: text/html)
但是在开发中,它工作得非常好,为什么它不在生产中执行 GET 请求??
而且
puts @payment_response
在日志中没有显示任何内容。
所以我的主要问题是 GET 请求(order_controller.rb 中的 payE 方法)在开发中工作,但是在生产中使用时,它不起作用,它没有读取 Easebuzz::Payment.initiate
我还从 payE 从 GET 更改为 POST 请求,看看它是否会
puts @payment_response
,但它在日志中显示 No template found for OrdersController#payE
。
我在这里做什么蠢事?
因此,它在模板问题上出错的事实意味着
@payment_response['status'] == 1
不正确。 puts @payment_response
可能无法正常工作,因为 STDOUT 未与生产中的日志绑定,您可以尝试 Rails.logger.debug @payment_response.inspect
。
因此,这应该可以帮助您查看响应,我最好的猜测是您的
Easebuzz
配置未正确设置以使用正确的商家密钥或其他内容进行生产,但是一旦您看到日志,您就会了解更多信息。
最后,你的代码应该更优雅地处理错误,即。您应该有一个用于该检查的
else
,其中包含带有 Flash 错误的本地重定向,或者可能是向用户显示错误的模板。