spree_paypal_rest 0.0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d1865d63b26deae7c342e7376af9a4e779544489
4
- data.tar.gz: 26e6b21025c41397eea41594e3605e2607696488
3
+ metadata.gz: 27c526b59dbe7e1615d629527778f61edfd4209b
4
+ data.tar.gz: 03e3fa2fe2797fce9e5a3d5ede579539b5e73d83
5
5
  SHA512:
6
- metadata.gz: 70a7191ac74db8576415841cf51c37c05239b77d14b292baaf0975c85e2c444f9176f4f3ec2f6850af253cebdf41437e0f83f6723e95dfff37319b4745e5d3e8
7
- data.tar.gz: 14050002b7ce7d5930e619d4abbbc88e38639c0832dcdc98259e5bb56cb8a0d258257dd7fd0e8115ba40cbbd990615c2c8cc53806b368952f0ff05aa2d85427a
6
+ metadata.gz: 3eb54bd0178073a50b539c4f13a103d7550ed947731fde72535d4e3922ddd24ef84a3a72aee397a105fb2350dc1bd5c2e36c85512586a4e908d39e2af87d9b0a
7
+ data.tar.gz: f885102dd498bca45ac6699b6fb79fc41d5862c48bf011566c9b1d8f3ae85d98c62c5b7903b7cc508cecfa72752bbb0b41231c6ef82876436fd7be593d3ad608
data/README.md CHANGED
@@ -1,13 +1,17 @@
1
1
  # Spree Paypal REST
2
+ [![Gem Version](https://badge.fury.io/rb/spree_paypal_rest.svg)](https://badge.fury.io/rb/spree_paypal_rest)
3
+ [![Build Status](https://travis-ci.org/hugomarquez/spree_paypal_rest.svg?branch=master)](https://travis-ci.org/hugomarquez/spree_paypal_rest)
4
+ [![Coverage Status](https://coveralls.io/repos/github/hugomarquez/spree_paypal_rest/badge.svg?branch=master)](https://coveralls.io/github/hugomarquez/spree_paypal_rest?branch=master)
5
+
6
+
7
+ This is a Paypal REST SDK extension for Spree.
2
8
 
3
- This is a Paypal REST SDK extension for Spree
4
9
  Behind the scenes, this extension uses [Paypal Ruby SDK](https://github.com/paypal/PayPal-Ruby-SDK).
5
10
 
6
11
  ### Why?
7
12
  * The Official [Spree Paypal Express](https://github.com/spree-contrib/better_spree_paypal_express) extension for Spree latest update was a year ago.
8
13
  * Braintree is not available in some countries.
9
- * Support for latest stable Spree release 3.1
10
- *
14
+ * Support for Spree latest stable release 3.1
11
15
 
12
16
  ## Features
13
17
  * Paypal Express Checkout/Payment Experience API integration.
@@ -19,7 +23,7 @@ Behind the scenes, this extension uses [Paypal Ruby SDK](https://github.com/payp
19
23
  Before installing this extension please follow Spree installation Guide.
20
24
 
21
25
  cd my_project
22
- echo "gem 'spree_paypal_rest', '0.0.1'" >> Gemfile
26
+ echo "gem 'spree_paypal_rest', '1.0.0'" >> Gemfile
23
27
  bundle
24
28
  rails g spree_paypal_rest:install
25
29
  rails server
@@ -59,16 +63,15 @@ Then enter the following information for your paypal **Business** Account:
59
63
  * [Payments API](https://developer.paypal.com/docs/api/payments/)
60
64
 
61
65
  ## TO-DO
62
- * Refund action in Spree::Gateway::PaypalExpress.
63
- * Cancel action in Spree::Gateway::PaypalExpress.
64
66
  * Internationalization.
65
- * More testing and specs always welcome.
67
+ * More testing.
66
68
  * Follow Spree versioning style.
69
+ * Add store return and cancel url paths for PaypalPayment#payment_payload
67
70
 
68
71
 
69
72
  ## Contributing
70
73
 
71
- In the spirit of [free software](1), **everyone** is encouraged to help improve this project.
74
+ In the spirit of free software, **everyone** is encouraged to help improve this project.
72
75
 
73
76
  Here are some ways *you* can contribute:
74
77
 
@@ -91,7 +94,6 @@ Starting point:
91
94
  * Ensure specs pass by running `bundle exec rspec spec`
92
95
  * Submit your pull request
93
96
 
94
- [1]: http://www.fsf.org/licensing/essays/free-sw.html
95
97
  [2]: https://github.com/spree/better_spree_paypal_express/issues
96
98
 
97
99
  ## License
@@ -20,14 +20,23 @@ module Spree
20
20
  paypal_checkout = Spree::PaypalRestCheckout.new(
21
21
  token: params[:token],
22
22
  payer_id: params[:PayerID],
23
- transaction_id: params[:paymentId],
23
+ payment_id: params[:paymentId],
24
24
  state: params[:state]
25
25
  )
26
- @order.payments.create!({
27
- source: paypal_checkout,
28
- amount: @order.total,
29
- payment_method: @order.payments.last.payment_method
30
- })
26
+
27
+ payment = @order.payments.last
28
+
29
+ if payment.present?
30
+ if payment.payment_method.kind_of?(Spree::Gateway::PaypalExpress)
31
+ payment.update!({source: paypal_checkout})
32
+ end
33
+ else
34
+ @order.payments.create!({
35
+ source: paypal_checkout,
36
+ amount: @order.total,
37
+ payment_method: @order.payments.last.payment_method
38
+ })
39
+ end
31
40
 
32
41
  until @order.state == "complete"
33
42
  if @order.next!
@@ -13,6 +13,7 @@ module Spree
13
13
  preference :profile_name, :string
14
14
  preference :logo_url, :string, default: 'https://www.paypalobjects.com/webstatic/en_US/i/btn/png/blue-rect-paypal-60px.png'
15
15
 
16
+ # Force auto_capture
16
17
  alias_method :purchase, :authorize
17
18
 
18
19
  def source_required?
@@ -33,18 +34,45 @@ module Spree
33
34
  end
34
35
 
35
36
  def purchase(amount, source, options)
36
- response = payment_source_class.find(source.transaction_id)
37
- source.update(state: response.state)
38
- case response.state
39
- when 'created'
40
- ActiveMerchant::Billing::Response.new(true, 'success', {}, {})
41
- when 'failed'
42
- ActiveMerchant::Billing::Response.new(true, 'failed', {}, {})
37
+ payment = payment_source_class.find(source.payment_id)
38
+ executed_payment = payment.execute(payer_id: source.payer_id)
39
+ source.update(state: payment.state)
40
+ if executed_payment
41
+ sale_id = payment.transactions.first.related_resources.first.sale.id
42
+ source.update(sale_id: sale_id)
43
+ ActiveMerchant::Billing::Response.new(true, 'Success', payment.to_hash, options)
44
+ else
45
+ ActiveMerchant::Billing::Response.new(false, payment.error.message, payment.to_hash, options)
43
46
  end
44
47
  end
45
48
 
46
- def refund(order)
47
- # TODO
49
+ def refund(amount, source, options)
50
+ provider
51
+ payment = payment_source_class.find(source.payment_id)
52
+ sale_id = payment.transactions.first.related_resources.first.sale.id
53
+ sale = PayPal::SDK::REST::Sale.find(sale_id)
54
+ paypal_refund = sale.refund_request({
55
+ amount:{
56
+ total: amount,
57
+ currency: options[:currency]
58
+ }
59
+ })
60
+ if paypal_refund.success?
61
+ refund_type = payment.amount == amount.to_f ? 'Full' : 'Partial'
62
+ source.update(
63
+ refund_id: paypal_refund.id,
64
+ refund_type: refund_type,
65
+ refunded_at: paypal_refund.create_time
66
+ )
67
+ ActiveMerchant::Billing::Response.new(true, 'Refund Successful', paypal_refund.to_hash, options)
68
+ else
69
+ ActiveMerchant::Billing::Response.new(false, paypal_refund.error.message, paypal_refund.to_hash, options)
70
+ end
71
+ end
72
+
73
+ def cancel(spree_payment_id)
74
+ spree_payment = Spree::Payment.find(spree_payment_id)
75
+ refund(spree_payment.amount, spree_payment.source, {currency: spree_payment.currency})
48
76
  end
49
77
 
50
78
  def profile_options
@@ -59,6 +87,5 @@ module Spree
59
87
  temporary: preferred_temporary
60
88
  }
61
89
  end
62
-
63
90
  end
64
91
  end
@@ -14,9 +14,9 @@ module Spree
14
14
  payer:{
15
15
  payment_method: 'paypal',
16
16
  payer_info:{
17
- first_name: order.user.billing_address.first_name,
18
- last_name: order.user.billing_address.last_name,
19
- email: order.user.email,
17
+ first_name: order.billing_address.first_name,
18
+ last_name: order.billing_address.last_name,
19
+ email: order.email,
20
20
  billing_address: billing_address(order)
21
21
  }
22
22
  },
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ Payment::Processing.module_eval do
3
+
4
+ def cancel!
5
+ if payment_method.kind_of?(Spree::Gateway::PaypalExpress)
6
+ response = payment_method.cancel(id)
7
+ handle_response(response, :void, :failure)
8
+ else
9
+ response = payment_method.cancel(response_code)
10
+ handle_response(response, :void, :failure)
11
+ end
12
+ end
13
+
14
+ end
15
+ end
@@ -1,33 +1,19 @@
1
1
  <fieldset>
2
- <legend>Paypal Express Checkout </legend>
2
+ <h3><%= Spree.t(:paypal_express_checkout) %></h3>
3
3
 
4
- <table class="index">
4
+ <table class="table table-condensed">
5
5
  <tr>
6
- <th colspan="6">Transaction</th>
6
+ <th><label><%= Spree.t(:paypal_state) %></label></th>
7
+ <th><label><%= Spree.t(:token) %></label></th>
8
+ <th><label><%= Spree.t(:paypal_payer_id) %></label></th>
9
+ <th><label><%= Spree.t(:paypal_payment_id) %></label></th>
7
10
  </tr>
8
11
  <tr>
9
- <td>State: </td>
10
- <td>
11
- <%= payment.source.state %>
12
- </td>
13
- </tr>
14
- <tr>
15
- <td><label>Token: </label></td>
16
- <td>
17
- <%= payment.source.token %>
18
- </td>
19
- </tr>
20
- <tr>
21
- <td><label>Payer Id: </label></td>
22
- <td>
23
- <%= payment.source.payer_id %>
24
- </td>
25
- </tr>
26
- <tr>
27
- <td><label>Transaction Id: </label></td>
28
- <td>
29
- <%= payment.source.transaction_id %>
30
- </td>
12
+ <td><%= payment.source.state %></td>
13
+ <td><%= payment.source.token %></td>
14
+ <td><%= payment.source.payer_id %></td>
15
+ <td><%= payment.source.payment_id %></td>
31
16
  </tr>
32
17
  </table>
18
+
33
19
  </fieldset>
@@ -1,3 +1,4 @@
1
1
  <div class="well clearfix">
2
- <p class="field">Paypal translation of instructions here...</p>
2
+ <p><%= Spree.t(:paypal_information) %></p>
3
+ <%= image_tag payment_method.preferred_logo_url %>
3
4
  </div>
@@ -0,0 +1,15 @@
1
+ ---
2
+ en:
3
+ spree:
4
+ payment_has_been_cancelled: The payment has been cancelled.
5
+ complete_checkout: Please complete Paypal Express Checkout before continuing
6
+ paypal_express_checkout: Paypal Express Checkout
7
+ paypal_transaction: Transaction
8
+ paypal_state: Payment Status
9
+ paypal_token: Token
10
+ paypal_payer_id: Payer ID
11
+ paypal_payment_id: Transaction ID
12
+ paypal_refund_id: Refund ID
13
+ paypal_refund_type: Refund Type
14
+ paypal_refunded_at: Refunded At
15
+ paypal_information: PayPal is an easy and secure payment method that allows you to shop on websites and applications around the world without having to share your credit card details.
@@ -3,11 +3,12 @@ class CreateSpreePaypalRestCheckouts < ActiveRecord::Migration
3
3
  create_table :spree_paypal_rest_checkouts do |t|
4
4
  t.string :token
5
5
  t.string :payer_id
6
- t.string :transaction_id, index: true
6
+ t.string :payment_id, index: true
7
7
  t.string :refund_id, index: true
8
8
  t.string :web_profile_id
9
9
  t.string :refund_type
10
10
  t.string :state
11
+ t.string :sale_id, index: true
11
12
  t.datetime :refunded_at
12
13
  t.timestamps null: false
13
14
  end
@@ -0,0 +1,21 @@
1
+ module SpreePaypalRest
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ class_option :auto_run_migrations, type: :boolean, default: false
5
+
6
+ def add_migrations
7
+ run 'bundle exec rake railties:install:migrations FROM=spree_paypal_rest'
8
+ end
9
+
10
+ def run_migrations
11
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]'))
12
+ if run_migrations
13
+ run 'bundle exec rake db:migrate'
14
+ else
15
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
16
+ end
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module SpreePaypalRest
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_paypal_rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hugomarquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-18 00:00:00.000000000 Z
11
+ date: 2016-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -191,12 +191,15 @@ files:
191
191
  - app/models/spree/gateway/paypal_payment.rb
192
192
  - app/models/spree/gateway/paypal_rest_base.rb
193
193
  - app/models/spree/gateway/paypal_web_profile.rb
194
+ - app/models/spree/payment/processing_decorator.rb
194
195
  - app/models/spree/paypal_rest_checkout.rb
195
196
  - app/views/spree/admin/payments/source_forms/_paypal_express.html.erb
196
197
  - app/views/spree/admin/payments/source_views/_paypal_express.html.erb
197
198
  - app/views/spree/checkout/payment/_paypal_express.html.erb
199
+ - config/locales/en.yml
198
200
  - config/routes.rb
199
201
  - db/migrate/20161212151705_create_spree_paypal_rest_checkouts.rb
202
+ - lib/generators/spree_paypal_rest/install/install_generator.rb
200
203
  - lib/spree_paypal_rest.rb
201
204
  - lib/spree_paypal_rest/engine.rb
202
205
  - lib/spree_paypal_rest/version.rb