spree_paypal_rest 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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