Paypal Экспресс-заказ в Rails3


Эта проблема касается: ActiveMerchant + PaypalExpressCheckout + Rails 3.2

Я пытался создать PayPal Express Checkout на моем приложении Rails 3.2. Большинство учебников устарели, поэтому я следовал нескольким, а затем прочитал руководство по интеграции Paypal Express Checkout. Я уже настроил свои данные по Sandobx и paypal.

Когда я пытаюсь обработать платеж, нажав на мою ссылку "Купить сейчас"с моего взгляда:

<%= link_to image_tag('http://img36.imageshack.us/img36/249/buttonpaypal.png'),
action: 'checkout', controller: 'orders'%>

Я получаю следующее Ошибка:

This transaction is invalid. Please return to the recipient's website to complete
you transaction using their regular checkout flow.

Return to merchant
At this time, we are unable to process your request. Please return to and try
another option.

- - - Мой Контроллер:

class OrdersController < ApplicationController
  include ActiveMerchant::Billing 
  def checkout
   setup_response = ::GATEWAY.setup_purchase(2000,
        :ip                => request.remote_ip,
        :return_url        => url_for('confirm'),
        :cancel_return_url => url_for(root_path)
   ) 
  redirect_to ::GATEWAY.redirect_url_for(setup_response.token)
 end
end

- - - Мой Инициализатор ActiveMerchant.РБ:

 ActiveMerchant::Billing::Base.mode = :test
  ::GATEWAY = ActiveMerchant::Billing::PaypalExpressGateway.new(
  :login => "I_PUT_MY_EMAIL_HERE",
  :password => "I_PUT_MY_PASS_HERE",
  :signature => "I_PUT_MY_SIGNATURE_HERE",
  :allow_guest_checkout => true
 )

- - - мои маршруты: маршруты.РБ:

 resources :orders do
   # Im not sure why 'get :checkout' by itself doesn't work.
   get :checkout, :on => :new
   get :confirm
   get :complete
 end

Получить "страницы / индекс"

Вот в чем суть: https://gist.github.com/11be6cef6a97632343b9

Может ли кто-нибудь указать мне на "недавний" учебник или помочь мне понять, что я делаю неправильно здесь?
2 2

2 ответа:

Самый простой способ-сделать следующее:

1.) Вы должны создать тестовый счет paypal.

2.) Создать модель тележки:

$ rails g model Cart purchased_at:datetime

3.) В вашей корзине Тип модели:

class Cart < ActiveRecord::Base

  def paypal_url(return_url)

    values = {
      # get it form your http://sandbox.paypal.com account
      :business => 'ENTER_THE_SELLER_PAYPAL_EMAIL_ADDRESS',
      :cmd => '_cart',
      :upload => 1,
      :return => return_url,
      :invoice => id
    }
    # These values set up the details for the item on paypal.
       values.merge!({
        # The amount is in cents
        "amount_1" => ENTER_AN_AMOUNT_HERE,
        "item_name_1" => ENTER_THE_ITEM_NAME_HERE,
        "item_number_1" => 1,
        "quantity_1" => 1
      })

    "https://www.sandbox.paypal.com/cgi-bin/webscr?" + values.to_query

  end
end

4.) На application_controller.rb файл добавьте это

  def current_cart
     session[:cart_id] ||= Cart.create!.id
     @current_cart ||= Cart.find(session[:cart_id])
   end
[5]}5.) На вашем виде, где вы хотите кнопку checkout добавить это:
# 'products_url' is just the url where you would like to redirect
# the user after the transaction
<%= link_to 'Buy with PAYPAL', @cart.paypal_url(products_url) %>
[5]}6.) На контроллере показать действие вида, где вы хотите проверить добавить это:
def show
  ...
  @cart = current_cart
end

Вот оно! Это PaypalExpressCheckout без "реальной" корзины, так как я построил эту корзину без использования элемента строки. Но вы можете добавить к нему строку, следуя Railscast #141 PayPal Basics http://railscasts.com/episodes/141-paypal-basics