Giter Site home page Giter Site logo

spree-contrib / spree_paypal_express Goto Github PK

View Code? Open in Web Editor NEW

This project forked from railsdog/spree-paypal-express

113.0 17.0 141.0 835 KB

allowing use of paypal express in spree, using (a modified version of) active merchant

License: BSD 3-Clause "New" or "Revised" License

Ruby 99.81% JavaScript 0.06% CSS 0.13%

spree_paypal_express's Introduction

This extension is largely no-longer maintained and it is advised you instead look at better_spree_paypal_express ( https://github.com/radar/better_spree_paypal_express) for a better designed and maintained paypal extension.

Unfortunate PayPal Express for Spree

Build Status

This is the official PayPal Express extension for Spree, based on the extension by PaulCC it has been extended to support Spree's Billing Integrations which allows users to configure the PayPal Express gateway including API login / password and signatures fields via the Admin UI.

This extension allows the store to use PayPal Express from two locations:

  1. Checkout Payment - When configured the PayPal Express checkout button will appear alongside the standard credit card payment options on the payment stage of the standard checkout. The selected shipping address and shipping method / costs are automatically sent to the PayPal review page (along with detailed order information).

  2. Cart Checkout* - Presents the PayPal checkout button on the users Cart page and redirects the user to complete all shipping / addressing information on PaypPal's site. This also supports PayPal's Instant Update feature to retrieve shipping options live from Spree when the user selects / changes their shipping address on PayPal's site.

  • Check "Checkout from cart" in admin for feature to work

This extension follows the documented flow for a PayPal Express Checkout, where a user is forwarded to PayPal to allow them to login and review the order (possibly select / change shipping address and method), then the user is redirected back to Spree to confirm the order. The user MUST confirm the order on the Spree site before the payment is authorized / captured from PayPal (and the order is transitioned to the New state).

Installation

  1. Add the following line to your application's Gemfile after the gem 'spree' line:

     gem 'spree_paypal_express', :git => 'git://github.com/spree/spree_paypal_express.git'
    
  2. Install the gem using Bundler:

     bundle install
    
  3. Copy & run migrations

     bundle exec rails g spree_paypal_express:install
    

Versions

To determine the correct version of this extension, please refer to the Versionfile.

IPN & eCheck Support

eCheck payments are now fully supported and PayPal's Instant Payment Notification service is also supported for receiving updates relating to eCheck payments only. To configure eCheck payments you'll need to:

  1. Configure your PayPal account to accept eCheck payments (under Profile on PayPal's website).

  2. Set the IPN URL on your PayPal account (under Profile on PayPal's website) to:

     https://www.yourstore.com/paypal_notify
    
  3. Enable auto_capture within Spree (as eCheck payments are only supported for purchase and not authorize requests).

     Spree::Config.set(:auto_capture => true)
    

    Please note if you accept foreign currency:

    Auto Capture will only work if you configure your Paypal Store like so:

     Profile > My Selling Tools > Payment Receiving Preferences >
    
     (this workflow may vary as Paypal updates their UI from time to time)
    
     Block payments sent to me in a currency I do not hold:
      [ ] Yes
      [x] No, accept them and convert them to [Your Default Currency]
      [ ] Ask Me
    

Configuration

  1. Before you begin

You'll need to have a Paypal developer account (developer.paypal.com) and both buyer and seller test accounts.

Tip: these are sandbox only, so use email addresses and passwords that are easy to remember, e.g. [email protected] and [email protected].

Your sandbox credentials are available from the API Credentials link.

  1. Setup the Payment Method

Log in as an admin and add a new Payment Method (under Configuration), using following details:

Name: Paypal Express

Environment: Development (or what ever environment you prefer)

Active: Yes

Provider: Spree::BillingIntegration::PaypalExpress

Click *Create , and now add your credentials in the screen that follows:

Review: unchecked [1]

Signature: API signature from your paypal seller test account

Server: test (for Development or live for Production)

Test Mode: checked (or unchecked for Production)

Password: API Password from your paypal seller test account

Login: API Username from your paypal seller test account (care to use the API Username and not the Test Account address)

Click Update

Test Drive

While testing PayPal Express checkout locally make sure you're logged into your PayPal developer account in another browser window before attempting a PayPal payment, as you'll be redirected and forced to sign in to your developer account.

  1. Add an item to cart

  2. Check out

  3. Address step: complete it using a valid US address.

  4. Delivery step: pick anything

  5. On the Payment Step, you should see a PayPal button. You can select it directly or just click "Continue"

  6. You will get redirected to PayPals sandbox site, be sure to log in as a Buyer / Personal test account and not the account you use to configure the Payment Method with.

  7. You should now see the paypal order details screen with a Pay Now button.

  8. Click Pay Now, and you should now be redirected back to Spree's order thank you page.

  9. Log into the Admin UI and review the Order and Payment details to confirm the successful checkout.

Running Specs

  1. Create Test App

     rake test_app
    
  2. Run Specs

     rake spec
    

NOTES

To automatically capture funds or enable accepting eCheck payments, add this to you site extension's activate method:

if Spree::Config.instance
  Spree::Config[:auto_capture] = true
end

[1] If you check the review checkbox in the admin section for Payment Methods/Paypal Express, the flow is slightly different. Instead of Pay Now on Paypal's order details page, it now says Continue. And the user is directed back to the spree app's Confirmation page showing a place order button. Use whichever suits your needs best. Personally, I leave review unchecked to cut down on the steps in the checkout flow.

spree_paypal_express's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spree_paypal_express's Issues

Credit a customer does not work

1.) User completes purchase
2.) E.g. shipping cost gets reduced/locked

3.) Capture to capture payment... will capture the full amount...
4.) Pressing 'Credit' will fail with PayPal saying that credit must be positive...

What I would like:
Adjust @order.payment.amount to the order.total_amount before capture (this will allow to charge up to 115%), fix credit...

undefined method `fail!' if payment not successful

Hi,
I'm using the following version:

rails (3.1.1)
spree (0.70.1)
spree_paypal_express (bea1aa48e0089083546bec4b19565a40e9a50a20)

If the PayPal payment fails (not cancelled) I receive the following error:

Started GET "/orders/R236516735/checkout/paypal_confirm?payment_method_id=931422125&token=EC-3GT761861S960815V&PayerID=8ZF5Q5H5H7TSG" for 127.0.0.1 at Fri Oct 21 13:34:50 +0200 2011
  Processing by CheckoutController#paypal_confirm as HTML
  Parameters: {"token"=>"EC-3GT761861S960815V", "order_id"=>"R236516735", "payment_method_id"=>"931422125", "PayerID"=>"8ZF5Q5H5H7TSG"}
  Preference Load (2.2ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 1 AND `preferences`.`owner_type` = 'Configuration'
  Configuration Load (0.4ms)  SELECT `configurations`.* FROM `configurations` WHERE `configurations`.`id` = 1 LIMIT 1
  CACHE (0.0ms)  SELECT `configurations`.* FROM `configurations` WHERE `configurations`.`id` = 1 LIMIT 1
  CACHE (0.0ms)  SELECT `configurations`.* FROM `configurations` WHERE `configurations`.`id` = 1 LIMIT 1
  CACHE (0.0ms)  SELECT `configurations`.* FROM `configurations` WHERE `configurations`.`id` = 1 LIMIT 1
  CACHE (0.0ms)  SELECT `configurations`.* FROM `configurations` WHERE `configurations`.`id` = 1 LIMIT 1
  Order Load (0.5ms)  SELECT `orders`.* FROM `orders` WHERE `orders`.`id` = 1069267046 LIMIT 1
  Adjustment Load (0.5ms)  SELECT `adjustments`.* FROM `adjustments` WHERE `adjustments`.`order_id` IN (1069267046)
   (0.4ms)  SELECT COUNT(*) FROM `line_items` WHERE `line_items`.`order_id` = 1069267046
  LineItem Load (0.5ms)  SELECT `line_items`.* FROM `line_items` WHERE `line_items`.`order_id` = 1069267046
  User Load (0.5ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
  Role Load (0.9ms)  SELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON `roles`.`id` = `roles_users`.`role_id` WHERE `roles_users`.`user_id` = 1
  SpreeAuthConfiguration Load (0.5ms)  SELECT `configurations`.* FROM `configurations` WHERE `configurations`.`type` IN ('SpreeAuthConfiguration') AND `configurations`.`name` = 'Default spree_auth configuration' LIMIT 1
  CACHE (0.0ms)  SELECT COUNT(*) FROM `line_items` WHERE `line_items`.`order_id` = 1069267046
  Variant Load (0.4ms)  SELECT `variants`.* FROM `variants` WHERE `variants`.`id` = 215054540 LIMIT 1
  Product Load (0.5ms)  SELECT `products`.* FROM `products` WHERE `products`.`id` = 459084718 LIMIT 1
  Variant Load (0.4ms)  SELECT `variants`.* FROM `variants` WHERE `variants`.`id` = 52862384 LIMIT 1
  Product Load (0.3ms)  SELECT `products`.* FROM `products` WHERE `products`.`id` = 248786582 LIMIT 1
  PaymentMethod Load (2.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  Preference Load (0.6ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 931422125 AND `preferences`.`owner_type` = 'PaymentMethod' AND `preferences`.`group_id` IS NULL AND `preferences`.`group_type` IS NULL AND `preferences`.`name` = 'currency' LIMIT 1
  PaymentMethod Load (0.5ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` =  LIMIT 1
  Preference Load (0.8ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 931422125 AND `preferences`.`owner_type` = 'PaymentMethod'
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 931422125 AND `preferences`.`owner_type` = 'PaymentMethod'
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
   (0.2ms)  BEGIN
  SQL (0.3ms)  INSERT INTO `paypal_accounts` (`email`, `payer_country`, `payer_id`, `payer_status`) VALUES ('[email protected]', 'DE', '8ZF5Q5H5H7TSG', 'verified')
   (0.6ms)  COMMIT
  PaymentMethod Load (0.4ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  Preference Load (0.4ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 931422125 AND `preferences`.`owner_type` = 'PaymentMethod' AND `preferences`.`group_id` IS NULL AND `preferences`.`group_type` IS NULL AND `preferences`.`name` = 'no_shipping' LIMIT 1
  PaymentMethod Load (0.3ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  Country Load (0.5ms)  SELECT `countries`.* FROM `countries` WHERE `countries`.`iso` = 'DE' LIMIT 1
  State Load (0.4ms)  SELECT `states`.* FROM `states` WHERE `states`.`abbr` = 'N/A' LIMIT 1
   (0.1ms)  BEGIN
  SQL (0.5ms)  INSERT INTO `addresses` (`address1`, `address2`, `alternative_phone`, `city`, `country_id`, `created_at`, `firstname`, `lastname`, `phone`, `state_id`, `state_name`, `updated_at`, `zipcode`) VALUES ('Obere Hauptstr. 50', NULL, NULL, 'Worms', 74, '2011-10-21 11:34:56', 'Test', 'User', '(not given)', NULL, 'N/A', '2011-10-21 11:34:56', '67551')
   (0.6ms)  COMMIT
  Address Load (0.5ms)  SELECT `addresses`.* FROM `addresses` WHERE `addresses`.`id` = 1072978426 LIMIT 1
   (0.1ms)  BEGIN
  Country Load (0.4ms)  SELECT `countries`.* FROM `countries` WHERE `countries`.`id` = 74 LIMIT 1
   (0.4ms)  SELECT 1 FROM `orders` WHERE (`orders`.`number` = BINARY 'R236516735' AND `orders`.`id` != 1069267046) LIMIT 1
   (0.4ms)  UPDATE `orders` SET `updated_at` = '2011-10-21 11:34:56', `ship_address_id` = 1072978428 WHERE `orders`.`id` = 1069267046
   (0.8ms)  COMMIT
  PaymentMethod Load (0.4ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  Preference Load (0.5ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 931422125 AND `preferences`.`owner_type` = 'PaymentMethod' AND `preferences`.`group_id` IS NULL AND `preferences`.`group_type` IS NULL AND `preferences`.`name` = 'review' LIMIT 1
  PaymentMethod Load (0.4ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
   (0.3ms)  SELECT COUNT(*) FROM `line_items` WHERE `line_items`.`order_id` = 1069267046
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` =  LIMIT 1
  Preference Load (0.5ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 931422125 AND `preferences`.`owner_type` = 'PaymentMethod' AND `preferences`.`group_id` IS NULL AND `preferences`.`group_type` IS NULL AND `preferences`.`name` = 'currency' LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` =  LIMIT 1
  Preference Load (1.0ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 931422125 AND `preferences`.`owner_type` = 'PaymentMethod'
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 931422125 AND `preferences`.`owner_type` = 'PaymentMethod'
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  CACHE (0.0ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  PaypalAccount Load (0.5ms)  SELECT `paypal_accounts`.* FROM `paypal_accounts` WHERE `paypal_accounts`.`payer_id` = '8ZF5Q5H5H7TSG' LIMIT 1
   (0.2ms)  BEGIN
  SQL (0.5ms)  INSERT INTO `payments` (`amount`, `avs_response`, `created_at`, `order_id`, `payment_method_id`, `response_code`, `source_id`, `source_type`, `state`, `updated_at`) VALUES (0.0, NULL, '2011-10-21 11:35:01', 1069267046, 931422125, 'Failure', 1, 'PaypalAccount', 'checkout', '2011-10-21 11:35:01')
  PaymentMethod Load (0.5ms)  SELECT `payment_methods`.* FROM `payment_methods` WHERE `payment_methods`.`deleted_at` IS NULL AND `payment_methods`.`id` = 931422125 LIMIT 1
  Order Load (0.6ms)  SELECT `orders`.* FROM `orders` WHERE `orders`.`id` = 1069267046 LIMIT 1
  Payment Load (0.6ms)  SELECT `payments`.* FROM `payments` WHERE `payments`.`order_id` = 1069267046
  Payment Load (0.5ms)  SELECT `payments`.* FROM `payments` WHERE `payments`.`order_id` = 1069267046 AND `payments`.`state` = 'completed'
  LineItem Load (0.5ms)  SELECT `line_items`.* FROM `line_items` WHERE `line_items`.`order_id` = 1069267046
  Adjustment Load (0.6ms)  SELECT `adjustments`.* FROM `adjustments` WHERE `adjustments`.`order_id` = 1069267046 AND `adjustments`.`eligible` = 1
  Shipment Load (0.8ms)  SELECT `shipments`.* FROM `shipments` WHERE `shipments`.`order_id` = 1069267046
  InventoryUnit Load (0.5ms)  SELECT `inventory_units`.* FROM `inventory_units` WHERE `inventory_units`.`shipment_id` = 1053930507
  SQL (0.6ms)  UPDATE `shipments` SET `state` = 'pending' WHERE `shipments`.`id` = 1053930507
   (0.7ms)  SELECT COUNT(*) FROM `shipments` WHERE `shipments`.`order_id` = 1069267046
   (0.6ms)  SELECT COUNT(*) FROM `shipments` WHERE `shipments`.`order_id` = 1069267046 AND `shipments`.`state` = 'shipped'
   (1.5ms)  SELECT COUNT(*) FROM `shipments` WHERE `shipments`.`order_id` = 1069267046 AND `shipments`.`state` = 'ready'
   (0.5ms)  SELECT COUNT(*) FROM `shipments` WHERE `shipments`.`order_id` = 1069267046 AND `shipments`.`state` = 'pending'
   (0.6ms)  SELECT COUNT(*) FROM `inventory_units` WHERE `inventory_units`.`order_id` = 1069267046 AND `inventory_units`.`state` = 'backordered'
  Adjustment Load (0.5ms)  SELECT `adjustments`.* FROM `adjustments` WHERE `adjustments`.`order_id` = 1069267046
  SQL (0.3ms)  UPDATE `adjustments` SET `eligible` = 1 WHERE `adjustments`.`id` = 1073043801
  ShippingMethod Load (0.4ms)  SELECT `shipping_methods`.* FROM `shipping_methods` WHERE `shipping_methods`.`id` = 574015645 LIMIT 1
  Shipment Load (1.0ms)  SELECT `shipments`.* FROM `shipments` WHERE `shipments`.`id` = 1053930507 LIMIT 1
  Calculator Load (0.5ms)  SELECT `calculators`.* FROM `calculators` WHERE `calculators`.`calculable_id` = 574015645 AND `calculators`.`calculable_type` = 'ShippingMethod' LIMIT 1
  Preference Load (0.6ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 574015645 AND `preferences`.`owner_type` = 'Calculator' AND `preferences`.`group_id` IS NULL AND `preferences`.`group_type` IS NULL AND `preferences`.`name` = 'amount' LIMIT 1
  Calculator Load (0.5ms)  SELECT `calculators`.* FROM `calculators` WHERE `calculators`.`id` = 574015645 LIMIT 1
  SQL (0.5ms)  UPDATE `adjustments` SET `amount` = 3.9 WHERE `adjustments`.`id` = 1073043801
  Adjustment Load (0.5ms)  SELECT `adjustments`.* FROM `adjustments` WHERE `adjustments`.`order_id` = 1069267046 AND `adjustments`.`eligible` = 1 AND (label LIKE 'Promotion%')
  Payment Load (0.6ms)  SELECT `payments`.* FROM `payments` WHERE `payments`.`order_id` = 1069267046 AND `payments`.`state` = 'completed'
  Adjustment Load (0.5ms)  SELECT `adjustments`.* FROM `adjustments` WHERE `adjustments`.`order_id` = 1069267046 AND `adjustments`.`eligible` = 1
  SQL (0.4ms)  UPDATE `orders` SET `shipment_state` = 'pending', `adjustment_total` = 3.9, `item_total` = 29.98, `payment_total` = 0.0, `total` = 33.88, `payment_state` = 'balance_due' WHERE `orders`.`id` = 1069267046
  SQL (0.4ms)  UPDATE `payments` SET `amount` = 33.88 WHERE `payments`.`id` = 121
   (0.7ms)  COMMIT
   (0.1ms)  BEGIN
   (0.4ms)  UPDATE `payments` SET `updated_at` = '2011-10-21 11:35:02', `state` = 'processing' WHERE `payments`.`id` = 121
  Payment Load (0.6ms)  SELECT `payments`.* FROM `payments` WHERE `payments`.`order_id` = 1069267046
  Payment Load (0.5ms)  SELECT `payments`.* FROM `payments` WHERE `payments`.`order_id` = 1069267046 AND `payments`.`state` = 'completed'
  Adjustment Load (0.5ms)  SELECT `adjustments`.* FROM `adjustments` WHERE `adjustments`.`order_id` = 1069267046 AND `adjustments`.`eligible` = 1
  SQL (0.3ms)  UPDATE `shipments` SET `state` = 'pending' WHERE `shipments`.`id` = 1053930507
   (0.4ms)  SELECT COUNT(*) FROM `shipments` WHERE `shipments`.`order_id` = 1069267046
   (0.7ms)  SELECT COUNT(*) FROM `shipments` WHERE `shipments`.`order_id` = 1069267046 AND `shipments`.`state` = 'shipped'
   (1.0ms)  SELECT COUNT(*) FROM `shipments` WHERE `shipments`.`order_id` = 1069267046 AND `shipments`.`state` = 'ready'
   (0.5ms)  SELECT COUNT(*) FROM `shipments` WHERE `shipments`.`order_id` = 1069267046 AND `shipments`.`state` = 'pending'
   (0.5ms)  SELECT COUNT(*) FROM `inventory_units` WHERE `inventory_units`.`order_id` = 1069267046 AND `inventory_units`.`state` = 'backordered'
  Adjustment Load (0.4ms)  SELECT `adjustments`.* FROM `adjustments` WHERE `adjustments`.`order_id` = 1069267046
  SQL (0.3ms)  UPDATE `adjustments` SET `eligible` = 1 WHERE `adjustments`.`id` = 1073043801
  ShippingMethod Load (0.4ms)  SELECT `shipping_methods`.* FROM `shipping_methods` WHERE `shipping_methods`.`id` = 574015645 LIMIT 1
  Shipment Load (0.3ms)  SELECT `shipments`.* FROM `shipments` WHERE `shipments`.`id` = 1053930507 LIMIT 1
  Calculator Load (0.4ms)  SELECT `calculators`.* FROM `calculators` WHERE `calculators`.`calculable_id` = 574015645 AND `calculators`.`calculable_type` = 'ShippingMethod' LIMIT 1
  Preference Load (0.9ms)  SELECT `preferences`.* FROM `preferences` WHERE `preferences`.`owner_id` = 574015645 AND `preferences`.`owner_type` = 'Calculator' AND `preferences`.`group_id` IS NULL AND `preferences`.`group_type` IS NULL AND `preferences`.`name` = 'amount' LIMIT 1
  Calculator Load (0.4ms)  SELECT `calculators`.* FROM `calculators` WHERE `calculators`.`id` = 574015645 LIMIT 1
  SQL (0.3ms)  UPDATE `adjustments` SET `amount` = 3.9 WHERE `adjustments`.`id` = 1073043801
  Adjustment Load (0.6ms)  SELECT `adjustments`.* FROM `adjustments` WHERE `adjustments`.`order_id` = 1069267046 AND `adjustments`.`eligible` = 1 AND (label LIKE 'Promotion%')
  Payment Load (0.7ms)  SELECT `payments`.* FROM `payments` WHERE `payments`.`order_id` = 1069267046 AND `payments`.`state` = 'completed'
  Adjustment Load (0.5ms)  SELECT `adjustments`.* FROM `adjustments` WHERE `adjustments`.`order_id` = 1069267046 AND `adjustments`.`eligible` = 1
  SQL (0.4ms)  UPDATE `orders` SET `shipment_state` = 'pending', `adjustment_total` = 3.9, `item_total` = 29.98, `payment_total` = 0.0, `total` = 33.88, `payment_state` = 'balance_due' WHERE `orders`.`id` = 1069267046
   (0.5ms)  COMMIT
   (0.2ms)  BEGIN
  SQL (0.4ms)  INSERT INTO `log_entries` (`created_at`, `details`, `source_id`, `source_type`, `updated_at`) VALUES ('2011-10-21 11:35:02', '--- !ruby/object:ActiveMerchant::Billing::PaypalExpressResponse \nauthorization: \navs_result: \n code: \n postal_match: \n street_match: \n message: \ncvv_result: \n code: \n message: \nfraud_review: false\nmessage: The transaction cannot complete successfully. Instruct the customer to use an alternative payment method.\nparams: \n Errors: \n LongMessage: The transaction cannot complete successfully. Instruct the customer to use an alternative payment method.\n SeverityCode: Error\n ShortMessage: Transaction cannot complete.\n ErrorCode: \"10417\"\n do_express_checkout_payment_response_details: \n timestamp: \"2011-10-21T11:35:00Z\"\n Version: \"62.0\"\n correlation_id: 5f6d49e448b45\n Timestamp: \"2011-10-21T11:35:00Z\"\n build: \"2183220\"\n error_codes: \"10417\"\n DoExpressCheckoutPaymentResponseDetails: \n version: \"62.0\"\n Build: \"2183220\"\n Ack: Failure\n CorrelationID: 5f6d49e448b45\n message: The transaction cannot complete successfully. Instruct the customer to use an alternative payment method.\n ack: Failure\nsuccess: false\ntest: true\n', 121, 'Payment', '2011-10-21 11:35:02')
   (18.6ms)  COMMIT
Completed 500 Internal Server Error in 10524ms

NoMethodError (undefined method `fail!' for #<Payment:0x105d8ec70>):


Rendered /path/to/ruby/lib/ruby/gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms)
Rendered /path/to/ruby/lib/ruby/gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.4ms)
Rendered /path/to/ruby/lib/ruby/gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (17.0ms)

Best regards,
Fabian

Payment captured/authorized but order does not move into complete state

0.) Prepare a product with one item on-hand, disable backorders
1.) Prepare two orders and move them to the payment page
2.) complete one order...

3.) complete the other order
3.1) The payment will be captured/authorized
3.2)
#need to force checkout to complete state
until @order.state == "complete"
if @order.next!
@order.update!

fails because backorders are disabled, payment is already captured though, no normal user feedback is provided...

Gateway Error: Security header is not valid

Hello Guys,

I've installed the gem, configured everything (step by step like described in the readme-file) but when I want to pay via paypal (clicking on the paypal express button in the cart) i got the message 'Gateway Error: Security header is not valid'.
I used the credentials from my Selling-paypal Sandbox account (tried them hundreds of times). What's the problem in this case? Would be great if somebody could help me.

Thanks, Tobi

Missing partial _paypalexpressuk.html.erb

Seems the _paypalexpressuk.html.erb file is missing from views/spree/checkout/payment

To fix this Ive just copied the existing _paypalexpress.html.erb over, but this does not contain a link to the UK version of the button. (but will do for now)

Use billing address as shipping address is not sent

When you set "Use billing address as shipping adress", the customer adress seems to not always be sent to Paypal and this causes issues because the user adress in Paypal may not fit your states/provinces configured in Spree.

Exemple : I have an issue because Paypal return me "Newfounland" instead of "Newfoundland and Labrador"

From what I see, the ship_address should be cloned on save with clone_billing_address but something somewhere doesn't work as expected..

Will find patch & submit pull request asap (maybe is an issue in spree itself, not sure yet)

*This specific province name issue is also a bug on Paypal side as the documation states that is should be "Newfoundland and Labrador

Payment Methods are registered incorrectly

Attempting to start a rails server using spree 1.2 yields:

/Users/jeffsquires/.rvm/gems/ruby-1.9.3-p194/bundler/gems/spree_paypal_express-28c925e1f1aa/lib/spree_paypal_express/engine.rb:24:in block in <class:Engine>': undefined method+' for nil:NilClass (NoMethodError)

Changing the section starting at: https://github.com/spree/spree_paypal_express/blob/master/lib/spree_paypal_express/engine.rb#L23

to:

initializer "spree_paypal_express.register.payment_methods" do |app|
  app.config.spree.payment_methods += [
    Spree::BillingIntegration::PaypalExpress,
    Spree::BillingIntegration::PaypalExpressUk
  ]
end

Seems to fix this issue.

Pull request coming.

URI::InvalidComponentError in Spree::CheckoutController#paypal_payment

I have in my /config/initializers/mypreferences.rb file:

Spree::Config.set(:logo => 'https://s3.amazonaws.com/rkbb-prod/site/roots_logo.png')

When I follow the Paypal express button in the checkout I get the following error

URI::InvalidComponentError in Spree::CheckoutController#paypal_payment

bad component(expected absolute path component): https://s3.amazonaws.com/rkbb-prod/site/roots_logo.png

However, if I have a local file for the logo, eg:
Spree::Config.set(:logo => 'logo')
The error doesn't occur.

(note: I had to restart spree a few times, I'm not sure why but the config changes didn't always appear to be read. Even though I'd set a local file the the server was returning the previously set remote image)

Cannot run spree....

It seems as though when I'm using this gem, spree will not load. Not sure why, but here's the stack trace of what's going on.

DEPRECATION WARNING: railtie_name is deprecated and has no effect. (called from class:Engine at /Users/jason/.rvm/gems/ruby-1.9.2-p180@cvstore/bundler/gems/spree_paypal_express-bea1aa48e008/lib/spree_paypal_express.rb:5)
/Users/jason/.rvm/gems/ruby-1.9.2-p180@cvstore/gems/railties-3.0.5/lib/rails/railtie/configuration.rb:77:in method_missing': undefined methodspree' for #Rails::Application::Configuration:0x00000100b9fbd0 (NoMethodError)
from /Users/jason/.rvm/gems/ruby-1.9.2-p180@cvstore/bundler/gems/spree_paypal_express-bea1aa48e008/lib/spree_paypal_express.rb:16:in block in <class:Engine>' from /Users/jason/.rvm/gems/ruby-1.9.2-p180@cvstore/gems/railties-3.0.5/lib/rails/initializable.rb:25:ininstance_exec'
from /Users/jason/.rvm/gems/ruby-1.9.2-p180@cvstore/gems/railties-3.0.5/lib/rails/initializable.rb:25:in run' from /Users/jason/.rvm/gems/ruby-1.9.2-p180@cvstore/gems/railties-3.0.5/lib/rails/initializable.rb:50:inblock in run_initializers'
from /Users/jason/.rvm/gems/ruby-1.9.2-p180@cvstore/gems/railties-3.0.5/lib/rails/initializable.rb:49:in each' from /Users/jason/.rvm/gems/ruby-1.9.2-p180@cvstore/gems/railties-3.0.5/lib/rails/initializable.rb:49:inrun_initializers'
from /Users/jason/.rvm/gems/ruby-1.9.2-p180@cvstore/gems/railties-3.0.5/lib/rails/application.rb:134:in initialize!' from /Users/jason/.rvm/gems/ruby-1.9.2-p180@cvstore/gems/railties-3.0.5/lib/rails/application.rb:77:inmethod_missing'
from /Users/jason/Sites/ror/cvstore/config/environment.rb:5:in `<top (required)>'

When I comment out that gem from my Gemfile, everything loads perfectly. Any thoughts or ideas as to what I can do to get this to work? Thanks so much!

Bundler could not find compatible versions for gem "spree_core"

I just updated my Gemfile from:
gem 'spree', '1.1.2.rc1'
to:
gem 'spree', :git => "git://github.com/spree/spree.git", :branch => '1-2-stable'

and now I'm getting this error when I run bundle update:

Bundler could not find compatible versions for gem "spree_core":
In Gemfile:
spree_social (>= 0) x86-mingw32 depends on
spree_core (~> 1.1.0) x86-mingw32

spree_paypal_express (>= 0) x86-mingw32 depends on
  spree_core (1.2.0)</code>

StateMachine::InvalidTransition in checkout#paypal_confirm

I am on the edge of Spree's 1-0-stable branch and a customer just got this error when returning from PayPal:

A StateMachine::InvalidTransition occurred in checkout#paypal_confirm:

  Cannot transition state via :next from "payment" (Reason(s): Transition halted)
  state_machine (1.1.1) lib/state_machine/event.rb:241:in `block in add_actions'

The backtrace is:

  state_machine (1.1.1) lib/state_machine/event.rb:241:in `block in add_actions' 
  state_machine (1.1.1) lib/state_machine/machine.rb:753:in `call'
  state_machine (1.1.1) lib/state_machine/machine.rb:753:in `block (2 levels) in define_helper'
  /data/spree/shared/bundle/ruby/1.9.1/bundler/gems/spree_paypal_express-77840ade5a48/app/controllers/spree/checkout_controller_decorator.rb:150:in `paypal_finish'
  /data/spree/shared/bundle/ruby/1.9.1/bundler/gems/spree_paypal_express-77840ade5a48/app/controllers/spree/checkout_controller_decorator.rb:98:in `paypal_confirm'
  actionpack (3.1.6) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
  actionpack (3.1.6) lib/abstract_controller/base.rb:167:in `process_action'
  actionpack (3.1.6) lib/action_controller/metal/rendering.rb:10:in `process_action'
  actionpack (3.1.6) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
  activesupport (3.1.6) lib/active_support/callbacks.rb:497:in `_run__974073426__process_action__998365959__callbacks'
  activesupport (3.1.6) lib/active_support/callbacks.rb:386:in `_run_process_action_callbacks'
  activesupport (3.1.6) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (3.1.6) lib/abstract_controller/callbacks.rb:17:in `process_action'
  actionpack (3.1.6) lib/action_controller/metal/rescue.rb:17:in `process_action'
  actionpack (3.1.6) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
  activesupport (3.1.6) lib/active_support/notifications.rb:53:in `block in instrument'
  activesupport (3.1.6) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
  activesupport (3.1.6) lib/active_support/notifications.rb:53:in `instrument'
  actionpack (3.1.6) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
  actionpack (3.1.6) lib/action_controller/metal/params_wrapper.rb:201:in `process_action'
  activerecord (3.1.6) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  newrelic_rpm (3.3.2) lib/new_relic/agent/instrumentation/rails3/action_controller.rb:34:in `block in process_action'
  newrelic_rpm (3.3.2) lib/new_relic/agent/instrumentation/controller_instrumentation.rb:255:in `block in perform_action_with_newrelic_trace'
  newrelic_rpm (3.3.2) lib/new_relic/agent/method_tracer.rb:242:in `trace_execution_scoped'
  newrelic_rpm (3.3.2) lib/new_relic/agent/instrumentation/controller_instrumentation.rb:250:in `perform_action_with_newrelic_trace'
  newrelic_rpm (3.3.2) lib/new_relic/agent/instrumentation/rails3/action_controller.rb:33:in `process_action'
  actionpack (3.1.6) lib/abstract_controller/base.rb:121:in `process'
  actionpack (3.1.6) lib/abstract_controller/rendering.rb:45:in `process'
  actionpack (3.1.6) lib/action_controller/metal.rb:193:in `dispatch'
  actionpack (3.1.6) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
  actionpack (3.1.6) lib/action_controller/metal.rb:236:in `block in action'
  actionpack (3.1.6) lib/action_dispatch/routing/route_set.rb:71:in `call'
  actionpack (3.1.6) lib/action_dispatch/routing/route_set.rb:71:in `dispatch'
  actionpack (3.1.6) lib/action_dispatch/routing/route_set.rb:35:in `call'
  rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
  rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize'
  rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `optimized_each'
  rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize'
  rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call'
  actionpack (3.1.6) lib/action_dispatch/routing/route_set.rb:538:in `call'
  /data/spree/shared/bundle/ruby/1.9.1/bundler/gems/spree-0760b901247f/core/lib/spree/core/middleware/redirect_legacy_product_url.rb:13:in `call'
  /data/spree/shared/bundle/ruby/1.9.1/bundler/gems/spree-0760b901247f/core/lib/spree/core/middleware/seo_assist.rb:27:in `call'
  railties (3.1.6) lib/rails/engine.rb:456:in `call'
  railties (3.1.6) lib/rails/railtie/configurable.rb:30:in `method_missing'
  rack-mount (0.8.3) lib/rack/mount/prefix.rb:26:in `call'
  rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
  rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize'
  rack-mount (0.8.3) lib/rack/mount/code_generation.rb:68:in `optimized_each'
  rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize'
  rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call'
  actionpack (3.1.6) lib/action_dispatch/routing/route_set.rb:538:in `call'
  newrelic_rpm (3.3.2) lib/new_relic/rack/browser_monitoring.rb:23:in `call'
  exception_notification (2.6.1) lib/exception_notifier.rb:34:in `call'
  warden (1.0.6) lib/warden/manager.rb:35:in `block in call'
  warden (1.0.6) lib/warden/manager.rb:34:in `catch'
  warden (1.0.6) lib/warden/manager.rb:34:in `call'
  actionpack (3.1.6) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
  rack (1.3.6) lib/rack/etag.rb:23:in `call'
  rack (1.3.6) lib/rack/conditionalget.rb:25:in `call'
  actionpack (3.1.6) lib/action_dispatch/middleware/head.rb:14:in `call'
  actionpack (3.1.6) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
  actionpack (3.1.6) lib/action_dispatch/middleware/flash.rb:243:in `call'
  rack (1.3.6) lib/rack/session/abstract/id.rb:195:in `context'
  rack (1.3.6) lib/rack/session/abstract/id.rb:190:in `call'
  actionpack (3.1.6) lib/action_dispatch/middleware/cookies.rb:331:in `call'
  activerecord (3.1.6) lib/active_record/query_cache.rb:64:in `call'
  activerecord (3.1.6) lib/active_record/connection_adapters/abstract/connection_pool.rb:477:in `call'
  actionpack (3.1.6) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
  activesupport (3.1.6) lib/active_support/callbacks.rb:392:in `_run_call_callbacks'
  activesupport (3.1.6) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (3.1.6) lib/action_dispatch/middleware/callbacks.rb:28:in `call'
  rack (1.3.6) lib/rack/sendfile.rb:101:in `call'
  actionpack (3.1.6) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
  actionpack (3.1.6) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'
  railties (3.1.6) lib/rails/rack/logger.rb:13:in `call'
  rack (1.3.6) lib/rack/methodoverride.rb:24:in `call'
  rack (1.3.6) lib/rack/runtime.rb:17:in `call'
  activesupport (3.1.6) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.3.6) lib/rack/lock.rb:15:in `call'
  rack-cache (1.2) lib/rack/cache/context.rb:136:in `forward'
  rack-cache (1.2) lib/rack/cache/context.rb:245:in `fetch'
  rack-cache (1.2) lib/rack/cache/context.rb:185:in `lookup'
  rack-cache (1.2) lib/rack/cache/context.rb:66:in `call!'
  rack-cache (1.2) lib/rack/cache/context.rb:51:in `call'
  railties (3.1.6) lib/rails/engine.rb:456:in `call'
  railties (3.1.6) lib/rails/application.rb:143:in `call'
  railties (3.1.6) lib/rails/railtie/configurable.rb:30:in `method_missing'
  unicorn (4.2.0) lib/unicorn/http_server.rb:530:in `process_client'
  unicorn (4.2.0) lib/unicorn/http_server.rb:604:in `worker_loop'
  newrelic_rpm (3.3.2) lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb:17:in `call'
  newrelic_rpm (3.3.2) lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb:17:in `block (4 levels) in <top (required)>'
  unicorn (4.2.0) lib/unicorn/http_server.rb:487:in `spawn_missing_workers'
  unicorn (4.2.0) lib/unicorn/http_server.rb:498:in `maintain_worker_count'
  unicorn (4.2.0) lib/unicorn/http_server.rb:272:in `join'
  unicorn (4.2.0) bin/unicorn_rails:209:in `<top (required)>'
  /data/spree/shared/bundle/ruby/1.9.1/bin/unicorn_rails:19:in `load'
  /data/spree/shared/bundle/ruby/1.9.1/bin/unicorn_rails:19:in `<main>'

TypeError (nil can't be coerced into BigDecimal) on return to site after order

After a user has paid for their order at Paypal, the user is returned to this URL:

https://mysite.heroku.com/orders/R406752060/checkout/paypal_confirm?payment_method_id=4&token=EC-4752449676867473N&PayerID=KTQXUPPTZBWMP

and gets this error:

"TypeError (nil can't be coerced into BigDecimal):"

Anyone know what could be causing this? The return URL works fine on my localhost (goes to the order-complete-page), but fails on my production server.

Gateway Error: Security header is not valid

I tried to setup the paypal gateway method in production with valid credentials.
I entered the credentials many times to be sure that I did not make any mistake as suggested in issue #39
I am using MySQL . Could the problem with preferences described in #39 still be there?
That is an urgent matter as the site is live now. all tests with Sandbox accounts are fine

Thanks
Michael

partial path is incorrect (missing leading 'spree/' in shared view)

Spree 1.1 (and i suspect 1.0) yields:

ActionView::MissingTemplate in Spree/checkout#paypal_confirm

Showing /Users/jsquires/.rvm/gems/ruby-1.9.3-p0-falcon/bundler/gems/spree_paypal_express-    fb852bc1b291/app/views/spree/shared/paypal_express_confirm.html.erb where line #6 raised:

Missing partial shared/order_details with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :rabl]}. Searched in:

Upon returning from paypal.

Pull request coming in a few minutes

uninitialized constant PaypalAccount

With spree 1.0.0, checking out with paypal express works but trying to access the order payments in the admin leads to an error: uninitialized constant PaypalAccount on line 16 of spree_core-1.0.0/app/views/spree/admin/payments/_list.html.erb

13: <%= link_to payment_method_name(payment), admin_order_payment_path(@order, payment) %>
14: <%= t(payment.state, :scope => :payment_states, :default => payment.state.capitalize) %>
15:
16: <% payment.actions.each do |action| %>
17: <%= button_to t(action), fire_admin_order_payment_path(@order, payment, :e => action), :method => :put %>
18: <% end %>
19:

Tracked this back to the paypal_finish method in the checkout_controller_decorator, the source_type field is being set to an incorrectly name-spaced class name missing the Spree:: module prefix.

Version in Documentation

documentation says: "The master branch of this repo is currently for Spree 0.40.3 and later..."

gemspec says: "add_dependency('spree_core', '>=0.70.1')"

error on admin pages

Hi there,

i seem to be having a problem with the spree paypal express plugin.

the version of spree i'm using is 0.70.1, and the spree paypal express is spree_paypal_express (1.0.1 bea1aa4)

when i go to a payment page, e.g.
*/admin/orders/R186775626/payments

it error's out with

ActionView::Template::Error (undefined method `params' for #YAML::Object:0x1376e9d70):
13: <%= link_to payment_method_name(payment), admin_order_payment_path(@order, payment) %>
14: <%= t(payment.state, :scope => :payment_states, :default => payment.state.capitalize) %>
15:
16: <% payment.actions.each do |action| %>
17: <%= button_to t(action), fire_admin_order_payment_path(@order, payment, :e => action), :method => :put %>
18: <% end %>
19:

any help sorting this would be awesome

Saving payment method preferences without re-entering password clears the password

When I go to the payment method configuration page for a previously configured payment method using paypal express, and I click Update without making any other changes, the password for the payment method is set to blank. I would expect that if I didn't enter a password, the password would not be changed.

The result of this is that when, as a customer, I try to check out using paypal, when I click on the "Check Out with PayPal" or "Save and Continue" buttons on the Payment step, I receive a "Gateway Error: Security header is not valid" error.

I'm aware of a few different ways of resolving this problem. Since the preferences are handled by Spree, changing the behaviour of the password field to perform no update when the password is blank would prevent any other plugin from setting blank passwords in its settings. The field could be changed from a password to a string field, which would be suboptimal for security (although not terrible, since the admin interface uses https by default). Alternatively, we could add a hint to the field, like "Please re-enter your API password every save", or perhaps make the field required to force the user to re-enter their password.

admin controllers

hi,
can you confirm there is currently no admin interface to do captures and void of order payments? I can see the routes for it:
capture_admin_order_paypal_payment GET /admin/orders/:order_id/paypal_payments/:id/capture(.:format) {:action=>"capture", :controller=>"admin/paypal_payments"}
but no controller in the extension.
Ta,
Enrico

undefined method `process_coupon_code' not fixed on branch master

Branch `1-0-stable contains a fix for this error message, but master does not have this fix. The relevant code is shown below

Branch Master order_controller_decorator.rb:

def redirect_to_paypal_express_form_if_needed
      return unless (params[:state] == "payment")
      return unless params[:order][:payments_attributes]
      if params[:order][:coupon_code]
        @order.update_attributes(object_params)
        @order.process_coupon_code
      end

     # . . .

Branch 1-0-stable order_controller_decorator.rb:

def redirect_to_paypal_express_form_if_needed
      return unless (params[:state] == "payment")
      return unless params[:order][:payments_attributes]

      if params[:order][:coupon_code]
        @order.update_attributes(object_params)
        if @order.coupon_code.present?
          fire_event('spree.checkout.coupon_code_added', :coupon_code => @order.coupon_code)
        end
      end

     #  . . .

clicking void `undefined method `environment' for nil:NilClass`

When I click void on a pending Bogus (don't know if this matters) payment - I get an exception

A NoMethodError occurred in payments#fire:

 undefined method `environment' for nil:NilClass
 /my/secret/server/path/shared/bundle/ruby/1.9.1/bundler/gems/spree-a8e2ea0f9455/core/app/models/spree/payment/processing.rb:185:in `check_environment'

I can provide more of a stacktrace on request.

 % cat Gemfile.lock | grep spree                  (master)
  remote: git://github.com/pferdefleisch/spree_variant_options.git
    spree_variant_options (0.5.0)
      spree_core (~> 1.1.1)
  remote: git://github.com/spree/spree
    spree (1.1.2)
      spree_api (= 1.1.2)
      spree_auth (= 1.1.2)
      spree_cmd (= 1.1.2)
      spree_core (= 1.1.2)
      spree_dash (= 1.1.2)
      spree_promo (= 1.1.2)
      spree_sample (= 1.1.2)
    spree_api (1.1.2)
      spree_auth (= 1.1.2)
      spree_core (= 1.1.2)
    spree_auth (1.1.2)
      spree_core (= 1.1.2)
    spree_cmd (1.1.2)
    spree_core (1.1.2)
    spree_dash (1.1.2)
      spree_auth (= 1.1.2)
      spree_core (= 1.1.2)
    spree_promo (1.1.2)
      spree_auth (= 1.1.2)
      spree_core (= 1.1.2)
    spree_sample (1.1.2)
      spree_core (= 1.1.2)
  remote: git://github.com/spree/spree_active_shipping
    spree_active_shipping (1.1.0)
      spree_core (~> 1.0)
  remote: git://github.com/spree/spree_gateway
    spree_gateway (1.0.0)
      spree_core (~> 1.0)
  remote: git://github.com/spree/spree_paypal_express.git
    spree_paypal_express (1.1.0)
      spree_auth (>= 1.0.0)
      spree_core (>= 1.0.0)
  spree!
  spree_active_shipping!
  spree_gateway!
  spree_paypal_express!
  spree_variant_options!

Clumsily referred to in #54

Payment process is not a true 'transaction'

I can only describe the symptoms here:

Setup:

  1. Paypal extension is configured to not auto capture
  2. Review is not ticked
  3. Currency is in EUR
  4. Live environment

Purchase
1.) Customer gets to paypal
2.) Returns to https://shop/orders/R666666666/checkout/paypal_confirm?payment_method_id=6&token=TOK&PayerID=FOO
Gets a "504 Gateway Timeout"
3.) Customer gets a Order Confirmation Email
4.) Payment is not received/known to paypal

Database:
1.) PaypalAccount has a record for this purchase

<PaypalAccount id: 666, email: "[email protected]", payer_id: "ID", payer_country: "NA", payer_status: "verified">

<Payment id: 666, order_id: 666, created_at: "2011-11-28 10:12:55", updated_at: "2011-11-28 10:12:55", amount: #<BigDecimal:some number>, source_id: 666, source_type: "PaypalAccount", payment_method_id: 6, state: "pending", response_code: "Success", avs_response: nil>

So apparently the order is confirmed before it is confirmed with paypal. My logfile configuration didn't allow me to see if the 504 was generated by my frontend (cherokee), or by spree (e.g. processing timeout) or by paypal.

Any idea of where this could have gone wrong? Is there any code that starts a timeout?

paypal_site_opts - LandingPage

How can I set the option "LandingPage" in spree_paypal_express for spree 0.60?

I need the user has the option to pay only with credit card without a paypal account.

thanks for the help !

Promotions don't go through to paypal

When you are on the payment page and enter a promotion, then check out with paypal, the promotion is not showing up in the paypal price. This is on Spree 1.0

undefined class ActiveMerchant::Billing::PaypalExpressResponse

Error when trying to access order/payments in admin:

undefined class/module ActiveMerchant::Billing::PaypalExpressResponse

To recreate, simply restart the spree site and try to view payment on a paypal express payment in the admin without first doing an order checkout using paypal express. The error disappears once you do a checkout in the store using paypal express.

This looks like a required class is not being loaded in the admin but is being loaded in the checkout process.

Superclass must be a class

Hello,
Just installed spree into rails 3.1.1 app got it running then added spree_paypal express to the gemfile bundle installed then rake spree_paypal_express:install. but it failed it copied the db migration over and that was it then tried to rake db:migrate and got -----

/Users/scott/.rvm/gems/ruby-1.8.7-p352/bundler/gems/spree_paypal_express-b597130b5ef3/app/models/spree/billing_integration/paypal_express.rb:1: superclass must be a Class (Module given) (TypeError)
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:456:in load' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:456:inload_file'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:640:in new_constants_in' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:455:inload_file'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:342:in require_or_load' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:489:inload_missing_constant'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:181:in const_missing' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:179:ineach'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:179:in const_missing' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/bundler/gems/spree_paypal_express-b597130b5ef3/lib/spree_paypal_express/engine.rb:20 from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/lazy_load_hooks.rb:34:incall'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/lazy_load_hooks.rb:34:in execute_hook' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/lazy_load_hooks.rb:43:inrun_load_hooks'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/lazy_load_hooks.rb:42:in each' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/lazy_load_hooks.rb:42:inrun_load_hooks'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/railties-3.1.1/lib/rails/application/finisher.rb:56
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/railties-3.1.1/lib/rails/initializable.rb:30:in instance_exec' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/railties-3.1.1/lib/rails/initializable.rb:30:inrun'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/railties-3.1.1/lib/rails/initializable.rb:55:in run_initializers' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/railties-3.1.1/lib/rails/initializable.rb:54:ineach'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/railties-3.1.1/lib/rails/initializable.rb:54:in run_initializers' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/railties-3.1.1/lib/rails/application.rb:96:ininitialize!'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/railties-3.1.1/lib/rails/railtie/configurable.rb:30:in send' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/railties-3.1.1/lib/rails/railtie/configurable.rb:30:inmethod_missing'
from /Users/scott/new_rails/site5/prettylulu.com/config/environment.rb:5
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:240:in require' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:240:inrequire'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:223:in load_dependency' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:640:innew_constants_in'
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:223:in load_dependency' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:240:inrequire'
from /Users/scott/new_rails/site5/prettylulu.com/config.ru:4
from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/rack-1.3.5/lib/rack/builder.rb:51:in instance_eval' from /Users/scott/.rvm/gems/ruby-1.8.7-p352/gems/rack-1.3.5/lib/rack/builder.rb:51:ininitialize'
from /Users/scott/new_rails/site5/prettylulu.com/config.ru:1:in `new'
from /Users/scott/new_rails/site5/prettylulu.com/config.ru:1

I tried to start it the app and got the same thing

1-1-stable, :review breaks collection of payment

For the 1-1-stable branch, enabling :review breaks collection of payment.

Order moves to :complete, but no actual payment is collected from the user. Just deployed 1-1-3 to production, ask me how I know...

Disabling :review moves things along nicely. Don't forget to re-enter password.

Payment confirm fails if state abbr has different casing

Payment confirm will fail if e.g.

spree state abbr = 'QLD'

paypal state = 'Qld'

works fine if paypal state is full name e.g. 'Queensland' or if paypal has same casing as spree 'QLD'

I think the search needs to be case insensitive somehow.

https://github.com/spree/spree_paypal_express/blob/master/app/controllers/checkout_controller_decorator.rb#L82

NOTE: This is only a problem for paypal accounts who have not updated their shipping address for awhile, Paypal now forces the format of the state with a dropdown. which is good.

Capturing payment through spree admin fails (works on paypal)

Processing my first test orders, using both providors:
Spree::BillingIntegration::PaypalExpress
Spree::BillingIntegration::PaypalExpressUk

Order processes fine, customer returned to spree confirmation page.

Using the 'capture' button in spree admin, error displayed:

ArgumentError in Spree::Admin::PaymentsController#fire

wrong number of arguments (3 for 1)
Rails.root: /Users/steve/Documents/ruby/rkbbspree

Application Trace | Framework Trace | Full Trace
activesupport (3.2.2) lib/active_support/core_ext/kernel/reporting.rb:68:in `capture'

However, the payment can be accepted through the paypal interface and solving this is probably beyond my coding ability right now.
If it's working for others, perhaps this is to do with the currency being in GBP but the Sandbox dev account is USD (I don't recall the option to change). When accepting the payment through paypal I had to decide whether to keep in GBP or currency convert to USD.

Incompatability of credit method between Spree 1.1.1 and PaypalExpress

Long story short, we've run into an issue attempting to process Paypal credits through the admin interface.

When attempting to fire the credit, we find that the payment method (Spree::BillingIntegration::PaypalExpress) doesn't have a credit method that the payment/processing class in Spree is looking for:

/gems/spree_core-1.1.1/app/models/spree/payment/processing.rb:76:in `block in credit!'

That particular method within Spree was is expecting the payment method to implement credit. I'm pretty sure that it used to happen through the payment source (PaypalAccount).

def credit(amount)
return if amount > credit_allowed
started_processing!
source.credit(self, amount)
end
end

I don't have the time to delve into this right now (as I am having to manually process credits on the console) but I'm pretty sure something might be been missed in the refactoring to payment/processing.rb.

"No Shipping" label is vague, does not make it clear that this overwrites the customer's details with the response from Paypal

Hi, I am reposting this from spree/spree!

The paypal express gateway takes the details from your paypal account and overwrites the shipping details from that account.

If you want to ship to someone else but use your paypal account to pay, your account's name shouldn't go on their shipping label.

Also, we added a "gift" option that people will likely use to ship directly to the recipient, so their name definitely belongs there.

https://github.com/spree/spree_paypal_express/blob/master/app/controllers/spree/checkout_controller_decorator.rb#L73-74

Here it is in action:

https://gist.github.com/3912735

If the only thing this boolean changes is this behavior, I suggest a label change. If that's all it takes, I'm more than happy to do a pull request and save you guys the trouble

Ineligible promotions being passed as credits

When promotions are ineligible, they shouldn't be passed as credits to PayPal, correct? Or should Spree be dumping the promo code adjustments before this?

  credits = order.adjustments.map do |credit|
    if credit.amount < 0.00
      { :name        => credit.label,
        :description => credit.label,
        :sku         => credit.id,
        :quantity    => 1,
        :amount      => (credit.amount*100).to_i }
    end

After returning from PayPal, Validation fails, "State can't be blank"

I have a customer in Germany who successfully goes to PayPal and completes the order there, but upon returning to our site, she gets redirected to her cart, which still has a "payment" state and looks full to her.

In production.log, on the return from PayPal, an Unprocessable Entity error is raised because an ActiveRecord validation (that state can't be blank) fails:

Started GET "/orders/R625114217/checkout/paypal_confirm?payment_method_id=5&token=EC-XXXXXXXXXXXXXXX&PayerID=XXXXXXXXXXXXX" for 217.xx.xxx.xxx at 2012-05-09 23:08:46 +0000
  Processing by CheckoutController#paypal_confirm as HTML
  Parameters: {"payment_method_id"=>"5", "token"=>"EC-XXXXXXXXXXXXXXXXX", "PayerID"=>"XXXXXXXXXXXXX", "order_id"=>"R625114217"}
Completed 422 Unprocessable Entity in 1038ms

ActiveRecord::RecordInvalid (Validation failed: State can't be blank):

I assume that the state in question is the one in the address, not the one in the state_machine. But my customer has an entry for :state_name in both billing and shipping addresses associated with her order.

One other thing is that PayPal gives me no record of the transaction in my history. I am running Spree 0.70.5.

rake error

Getting a rake error when trying to do "rake spree_paypal_express:install" in the terminal. The trace shows that the FileUtilz.mirror_files method is not found. Is there a specific ref to use for the extension when using Spree 0.70.3 or is just pulling from master ok? Please help me resolve this issue.

Cheers!

PayPal overrides/loses address information

When a payment returns from PayPal the shipping address will be replaced and this creates several problems:

1.) Any additional address information is lost. In our case it is the EUVAT id of the place we are shipping to...
2.) For PayPal to work for US customers we need them to enter the 'State' and in spree config we require the state, when an order from some European countries return the State is nil.. and then the Address fails to validate and the checkout does not complete.

We have worked around this by creating a 'Paypal Address' and setting the State to N/A in case it does not return from PayPal.

Missing Template

Having followed the install instructions on github, I get a 'Missing Template' error.
I can see the files in the github repo and rails appears to be searching all the correct places. I can also see the file locally.

---below this, error page, locating files in terminal, then Gemfile.lock spree sections--

Error

Missing partial spree/checkout/payment/paypalexpressuk with {:locale=>[:"en-GB", :en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :rabl]}. Searched in:
  * "/Users/steve/Documents/ruby/rkbbspree/app/views"
  * "/Users/steve/.rvm/gems/ruby-1.9.3-p125@rkbbspree/bundler/gems/spree_paypal_express-11c8935aac1d/app/views"
  * "/Users/steve/.rvm/gems/ruby-1.9.3-p125@rkbbspree/bundler/gems/spree_static_content-2b1a3fa42581/app/views"
  * "/Users/steve/.rvm/gems/ruby-1.9.3-p125@rkbbspree/bundler/gems/spree-498ab18ff74b/promo/app/views"
  * "/Users/steve/.rvm/gems/ruby-1.9.3-p125@rkbbspree/bundler/gems/spree-498ab18ff74b/dash/app/views"
  * "/Users/steve/.rvm/gems/ruby-1.9.3-p125@rkbbspree/bundler/gems/spree-498ab18ff74b/api/app/views"
  * "/Users/steve/.rvm/gems/ruby-1.9.3-p125@rkbbspree/bundler/gems/spree-498ab18ff74b/auth/app/views"
  * "/Users/steve/.rvm/gems/ruby-1.9.3-p125@rkbbspree/gems/devise-2.0.4/app/views"
  * "/Users/steve/.rvm/gems/ruby-1.9.3-p125@rkbbspree/bundler/gems/spree-498ab18ff74b/core/app/views"
  * "/Users/steve/.rvm/gems/ruby-1.9.3-p125@rkbbspree/gems/kaminari-0.13.0/app/views"

Finding the files in terminal:

1.9.3@rkbbspree steve@Steve-Root-MBP:payment$pwd
/Users/steve/.rvm/gems/ruby-1.9.3-p125@rkbbspree/bundler/gems/spree_paypal_express-11c8935aac1d/app/views/spree/checkout/payment
1.9.3@rkbbspree steve@Steve-Root-MBP:payment$ls
_paypalexpress.html.erb

Gemfile.lock

GIT
remote: git://github.com/spree/spree.git
revision: 34f2e319ad81f301285366bc523ec75332fafea5
branch: 1-1-stable
specs:
spree (1.1.0.rc2)
spree_api (= 1.1.0.rc2)
spree_auth (= 1.1.0.rc2)
spree_cmd (= 1.1.0.rc2)
spree_core (= 1.1.0.rc2)
spree_dash (= 1.1.0.rc2)
spree_promo (= 1.1.0.rc2)
spree_sample (= 1.1.0.rc2)
spree_api (1.1.0.rc2)
rabl (= 0.6.5)
spree_auth (= 1.1.0.rc2)
spree_core (= 1.1.0.rc2)
spree_auth (1.1.0.rc2)
cancan (= 1.6.7)
devise (> 2.0)
spree_core (= 1.1.0.rc2)
spree_cmd (1.1.0.rc2)
spree_core (1.1.0.rc2)
activemerchant (= 1.20.4)
acts_as_list (= 0.1.4)
aws-sdk (
> 1.3.4)
deface (>= 0.8.0)
ffaker (> 1.12.0)
highline (= 1.6.11)
jquery-rails (
> 2.0.0)
kaminari (>= 0.13.0)
nested_set (= 1.7.0)
paperclip (> 2.7)
rails (>= 3.2.2, <= 3.2.3)
ransack (
> 0.6.0)
state_machine (= 1.1.2)
stringex (> 1.3.2)
spree_dash (1.1.0.rc2)
httparty (
> 0.8.1)
spree_auth (= 1.1.0.rc2)
spree_core (= 1.1.0.rc2)
spree_promo (1.1.0.rc2)
spree_auth (= 1.1.0.rc2)
spree_core (= 1.1.0.rc2)
spree_sample (1.1.0.rc2)
spree_core (= 1.1.0.rc2)

GIT
remote: git://github.com/spree/spree_i18n.git
revision: 00cd5ed517fd608d8df41964383726035bed2203
specs:
spree_i18n (1.0.0)
spree_core (>= 0.30.0)

GIT
remote: git://github.com/spree/spree_paypal_express.git
revision: 11c8935
specs:
spree_paypal_express (1.1.0)
spree_core (>= 1.0.0)

GIT
remote: git://github.com/steveroot/spree_static_content
revision: 2b1a3fa425814bf13546269e7409ff01530cd066
branch: master
specs:
spree_static_content (1.1.0.beta)
spree_auth (> 1.1.0.beta)
spree_core (
> 1.1.0.beta)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.