Здравствуйте, подскажите пожалуйста как обработать ответ от liqpay, возможно есть готовый пример?
На данный момент есть такой метод:
def check_payment_status
if @place.status == false
@liqpay_request = Liqpay::Request.new(
:amount => @searched_film_session_price,
:currency => 'UAH',
:description => "#{@place_title}, Place number: #{@place.place_number}, date: #{@place.session_date}, time: #{@place.session_time}",
:order_id => @place.id,
:sandbox => 1,
:result_url => place_url(@place)
# :server_url => liqpay_payment_place_url(@place)
)
end
end
Он срабатывает на екшене show контроллера places_controller когда открывается страница для бронирования места (если @place.status == false).
Ответ от сервера обрабатывает payments_controller:
class PaymentsController < ApplicationController
protect_from_forgery :except => :liqpay_payment
def liqpay_payment
@liqpay_response = Liqpay::Response.new(params)
@place = Place.find(@liqpay_response.order_id)
@place.data = {}
(Liqpay::Response::ATTRIBUTES - %w(public_key sender_phone transaction_id)).each do |attribute|
@place.data[attribute] = @liqpay_response.send(attribute)
end
check_response_status
redirect_to @place
rescue Liqpay::InvalidResponse
render text: 'Payment error', status: 500
end
private
def check_response_status
if @liqpay_response.success? && @liqpay_reponse.amount == @Place.price
@place.update_attributes!(:status => true)
else
@place.update_attributes!(:status => false)
end
end
end
Если присмотреться, то видно что в середине этого метода есть ещё один, который проверяет или платеж прошел успешно, и меняет значение атрибута @place.status с false на true.
Но этот метод не срабатывает.
В view такой код:
<% if @place.status == false %>
<p>If you have paid already, the response didn't come in yet from LiqPAY. Refresh this page later.</p>
<%=liqpay_button @liqpay_request %>
<% elsif @place.status == true %>
<p>Payment succeeded.</p>
<% else %>
<p>Payment failed.</p>
<% end %>
Он показывает или скрывает кнопку оплаты в зависимости от @place.status
Я слабо понимаю что делает код в payments_controller, буду благодарен если кто-то подскажет как обработать ответ или сам запрос, если я его не так посылаю.
Если короче, то оплата производится, но после оплаты не меняется статус платежа в базе данных.
PS. Это весь код связанный с liqpay возможно я что-то не дописал