@maxprof
Студент

Как обработать ответ от liqpay?

Здравствуйте, подскажите пожалуйста как обработать ответ от 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 возможно я что-то не дописал
  • Вопрос задан
  • 317 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы