diff --git a/app/controllers/spree/paypal_controller.rb b/app/controllers/spree/paypal_controller.rb new file mode 100644 index 00000000..b0b11af7 --- /dev/null +++ b/app/controllers/spree/paypal_controller.rb @@ -0,0 +1,69 @@ +module Spree + class PaypalController < Spree::StoreController + def express + # TODO: support adjustments + # Check out the old spree_paypal_express for how it does this + # Specifically, look for "credits" in CheckoutController decorator + items = current_order.line_items.map do |item| + { name: item.variant.name, + description: item.variant.description[0..120], + quantity: item.quantity, + # TODO: For 2.1.0, make this just item.money.cents + amount: item.money.money.cents } + end + + # TODO: For 2.1.0, make this display_item_total.cents + response = provider.setup_purchase(current_order.display_item_total.money.cents, + ip: request.remote_ip, + return_url: confirm_paypal_url(:payment_method_id => params[:payment_method_id]), + cancel_return_url: cancel_paypal_url, + currency: Spree::Config[:currency], + locale: I18n.locale.to_s.sub(/-/, '_'), + brand_name: Spree::Config[:site_name], + address: address_options, + header_image: 'http://teclacolorida.com/assets/images/logos/schoooools.png', + allow_guest_checkout: 'true', #payment with credit card for non PayPal users + items: items + ) + + redirect_to provider.redirect_url_for(response.token) + end + + def confirm + details = provider.details_for(params[:token]) + payer_id = details.payer_id + # TODO: For 2.1.0, make this display_item_total.cents + response = provider.purchase(current_order.display_item_total.money.cents, { + ip: request.remote_addr, + token: params[:token], + payer_id: payer_id, + currency: Spree::Config[:currency] + }) + # TODO: Add payment to order + end + + def cancel + binding.pry + + end + + private + + def provider + Spree::PaymentMethod.find(params[:payment_method_id]).provider + end + + def address_options + { + :name => current_order.bill_address.try(:full_name), + :zip => current_order.bill_address.zipcode, + :address1 => current_order.bill_address.address1, + :address2 => current_order.bill_address.address2, + :city => current_order.bill_address.city, + :phone => current_order.bill_address.phone, + :state => current_order.bill_address.state_text, + :country => current_order.bill_address.country.iso + } + end + end +end \ No newline at end of file diff --git a/app/models/gateway/pay_pal_gateway.rb b/app/models/gateway/pay_pal_gateway.rb deleted file mode 100644 index 1bf6835c..00000000 --- a/app/models/gateway/pay_pal_gateway.rb +++ /dev/null @@ -1,10 +0,0 @@ -module Spree - class Gateway::PayPalGateway< Gateway - paypal_options = { - :login => "seller_1229899173_biz_api1.railscasts.com", - :password => "FXWU58S7KXFC6HBE", - :signature => "AGjv6SW.mTiKxtkm6L9DcSUCUgePAUDQ3L-kTdszkPG8mRfjaRZDYtSu" - } - - end -end \ No newline at end of file diff --git a/app/models/gateway/pay_pal_express.rb b/app/models/spree/gateway/pay_pal_express.rb similarity index 74% rename from app/models/gateway/pay_pal_express.rb rename to app/models/spree/gateway/pay_pal_express.rb index 790fa2c2..f70c7ec9 100644 --- a/app/models/gateway/pay_pal_express.rb +++ b/app/models/spree/gateway/pay_pal_express.rb @@ -7,7 +7,11 @@ class Gateway::PayPalExpress < Gateway attr_accessible :preferred_login, :preferred_password, :preferred_signature def provider_class - ActiveMerchant::Billing::PaypalGateway + ActiveMerchant::Billing::PaypalExpressGateway + end + + def method_type + 'paypal' end end end \ No newline at end of file diff --git a/app/views/spree/checkout/payment/_paypal.html.erb b/app/views/spree/checkout/payment/_paypal.html.erb new file mode 100644 index 00000000..88338bb4 --- /dev/null +++ b/app/views/spree/checkout/payment/_paypal.html.erb @@ -0,0 +1 @@ +<%= link_to(image_tag("https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif"), paypal_express_url(:payment_method_id => payment_method.id), :method => :post) %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 53e2eeb8..e630cdb2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,3 +1,6 @@ Spree::Core::Engine.routes.draw do - # Add your extension routes here + post '/paypal', :to => "paypal#express", :as => :paypal_express + get '/paypal/confirm', :to => "paypal#confirm", :as => :confirm_paypal + get '/paypal/cancel', :to => "paypal#cancel", :as => :cancel_paypal + end diff --git a/lib/spree_paypal_express/engine.rb b/lib/spree_paypal_express/engine.rb index 43cf7031..e8473e97 100644 --- a/lib/spree_paypal_express/engine.rb +++ b/lib/spree_paypal_express/engine.rb @@ -20,7 +20,7 @@ def self.activate config.to_prepare &method(:activate).to_proc initializer "spree.paypal_express.payment_methods", :after => "spree.register.payment_methods" do |app| - app.config.spree.payment_methods << Spree::Gateway::PaypalExpress + app.config.spree.payment_methods << Spree::Gateway::PayPalExpress end end end