2015-01-19 4 views
0

Я пришел, насколько могу, и вам нужна помощь (пожалуйста!). Я пытаюсь настроить платежи за товары на моем ровесном рынке. Я думаю, что я настроил все правильно, но когда я нажимаю кнопку оплаты, которую я создал, она не перенаправляется на PayPal, вместо этого она просто обновляет страницу элемента. Я думаю, что это ошибка маршрутизации, но я не совсем уверен.Ошибка маршрутизации Адаптивные платежные рельсы

Вот что у меня есть в моей модели товара:

class Item < ActiveRecord::Base 
     belongs_to :user 
     belongs_to :category 
     default_scope -> { order('created_at DESC') } 

     def recipients 
     [ 
     { email: '<biz email address>', amount: '1.00', primary: false }, 
     { email: 'item.user.booth.paypal_email', amount: '5.00', primary: true } 
     ] 
     end 
    end 

В контроллере Items:

class ItemsController < ApplicationController 
     include ActiveMerchant::Billing::Integrations 
     before_action :logged_in_user, only: [:edit, :update, :new, :destroy] 
     before_action :correct_user, only: [:edit, :update, :destroy] 

     def show 
      @item = Item.find(params[:id]) 
     end 


     def gateway 
     @gateway ||= ActiveMerchant::Billing::PaypalAdaptivePayment.new \ 
     login: '<login email>', 
     password: '<password>', 
     signature: '<signature>', 
     appid: 'APP-80W284485P519543T' 

     response = gateway.setup_purchase \ 
     return_url: root_url, 
     cancel_url: item_path, 
     #ipn_notification_url: <notification URL>, 
     receiver_list: recipients 

     redirect_to gateway.redirect_url_for(response['payKey']) 
     end 
end 

И ссылка на эту кнопку в Views/предметов/шоу:

<%= link_to "Buy Now with PayPal", @gateway, class: "btn btn-primary col-md-8", id: "paypal-buy-btn"%> 

Мне также интересно, может ли ошибка быть из-за того, что я не определял @gateway в действии show, но когда я пытаюсь это сделать Я также получаю ошибки.

Может ли кто-нибудь помочь мне попытаться решить эту загадку? Спасибо за вашу помощь.

+0

У нас был ваш код, проверенный нашим парнем Ruby. Ему это не понравилось или не видно всей картины. Следовательно, это всего лишь комментарий. В конечном счете, я бы предложил использовать рабочий git, например. https://github.com/jpablobr/active_paypal_adaptive_payment кажется многообещающим и содержит более подробную документацию о прикованных платежах (ссылки на x.com немного устарели) –

+0

Это именно то, что я использовал, и документация также не является полной, особенно для начинающих. – Kelly

+0

Что возвращает 'response ['payKey']' return? Что означает 'gateway.redirect_url_for (response ['payKey'])' return? Кроме того, я думаю, что суммы для получателей должны быть float, а не строки, но я не уверен на 100% (ActiveMerchant может принять оба?). –

ответ

0

В дополнение к моему комментарию, здесь я буду редактировать этот ответ или удалить его позже, если это действительно не поможет. Просто нужно ответить, а не набирать крошечный блок комментариев.

Первое, ваше мнение освежает, потому что @gateway - nil, поэтому вы связываетесь с nil, который ничего не делает. Вам нужно определить маршрут для метода gateway, например, так:

resources :items do 
    post :gateway, on: :member 
end 

Теперь вы будете иметь gateway_item_path(item) определены, так что вы будете связывать к тому, что вместо того, чтобы:

<%= link_to "Buy Now with PayPal", gateway_item_path(@item), method: :post, ... %> 

Теперь ваш метод gateway будет ударяться, когда вы нажимаете ссылку. В вашем методе шлюза, вы должны будете найти Item, так же, как и в шоу:

@item = Item.find(params[:id]) 

При настройке шлюза, вам необходимо перейти в пункт к отмене URL, так что он возвращается к этому конкретному пункту, так изменить, что:

item_url(@item)

и изменить получатель @item.recipients, так как вы определили, что метод на модели.

Дайте мне знать, как все идет!

Смежные вопросы