Конфигурация возврата PayPal Express не может найти заказ без идентификатора - PullRequest
0 голосов
/ 12 декабря 2018

Я работаю над экспресс-интеграцией PayPal и успешно подключаюсь к PayPal и размещаю платеж, но по возвращении получаю:

ActiveRecord::RecordNotFound in CheckoutController#success

Couldn't find Order without an ID

Действия в моем контроллере:

def place_order
  @order = Order.new(params[:order])
  @order.customer_ip = request.remote_ip 
  populate_order
  if @order.save
    checkout_paypal
  else
    render :action => 'index'
  end
end

def success
  @page_title = 'Thank You!'
  @order = Order.find(params[:order])
  @order.express_payer_id = params[:PayerID]
  @order.save
end

private 

def checkout_paypal
  paypal_response = ::GATEWAY.setup_purchase(
    (@order.total * 100).round, # paypal amount is in cents
    :ip => request.remote_ip,
    :return_url => checkout_success_url(@order),
    :cancel_return_url => checkout_error_url(@order)
  )
  @order.express_token = paypal_response.token
  @order.save
  redirect_to ::GATEWAY.redirect_url_for(paypal_response.token) and return
end

маршруты:

match '/checkout/place_order', :to => 'checkout#place_order'
match '/checkout/success',     :to => 'checkout#success'
match '/checkout/error',       :to => 'checkout#error'

1 Ответ

0 голосов
/ 13 декабря 2018

Решением было изменить маршруты на:

match '/checkout/success/:id', :to => 'checkout#success', :as => :checkout_success

Теперь return_url работает.

Я пробовал match '/checkout/success/:id', :to => 'checkout#success' раньше, но только :as => :checkout_success решил проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...