spree_paypal_api_checkout 0.0.7 → 0.1.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
  SHA256:
3
- metadata.gz: 06d58fd2ed0b683b5f83542c81c695d25ba58e05807ea20db5a3391b5dc58b36
4
- data.tar.gz: 5f315cada65b5b7fc6bd0b5d20dfeefbeddea0fc02883119faddbc5eb960cf52
3
+ metadata.gz: 53c335900fbbe782e6fc7cfa78b36f258b514a9d9b9400cef65f7fb8c7cf69c7
4
+ data.tar.gz: 946f4fa867ded14d6c7f494df8d8e21377721b682df09fe7cffd312540268540
5
5
  SHA512:
6
- metadata.gz: 59b562c5c96d4ac8deacf23aa16671364ea01bbef64f467a626a04c047260f7e31d2832e340040bf6e588d8c6f9278d68e61e5c4113c05a133cde94aeb742d27
7
- data.tar.gz: b4ee8db0480d09a7bf2dc2be5ede7af6166128a54eed82367a7d95e94327c7b30affe17b67120b95f3c22c701f7ecbbc5166f877b5c0fd73dc3a33e35551fbde
6
+ metadata.gz: 0d1754cdff574bb9bbe6b798663c02686228ec3a0e7fe30281b87dea2264245d2f296e849ad44145282305766678b5956834a8a44f0ed17c38e6a644abeb0719
7
+ data.tar.gz: aef76e65dae6694919ddc17f3c290de2a49be957ac913a9a0ba4863bfe0f1a576d7a10c7e7fcce1a658e087c1b48786514f21c329354094024a124b961986801
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  1. Add this extension to your Gemfile with this line:
6
6
 
7
- gem 'spree_paypal_api_checkout', '~> 0.0.7'
7
+ gem 'spree_paypal_api_checkout', '~> 0.1.0'
8
8
 
9
9
  2. Install the gem using Bundler:
10
10
 
@@ -8,25 +8,26 @@ module Spree
8
8
  additional_adjustments = order.all_adjustments.additional
9
9
  tax_adjustments = additional_adjustments.tax
10
10
  shipping_adjustments = additional_adjustments.shipping
11
+ promotion_adjustments = additional_adjustments.promotion
11
12
 
12
13
  additional_adjustments.eligible.each do |adjustment|
13
14
  # Because PayPal doesn't accept $0 items at all. See #10
14
15
  # https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing
15
16
  # "It can be a positive or negative value but not zero."
16
17
  next if adjustment.amount.zero?
17
- next if tax_adjustments.include?(adjustment) || shipping_adjustments.include?(adjustment)
18
+ next if tax_adjustments.include?(adjustment) || shipping_adjustments.include?(adjustment) || promotion_adjustments.include?(adjustment)
18
19
 
19
20
  items << {
20
21
  name: adjustment.label,
21
22
  quantity: 1,
22
- amount: {
23
+ unit_amount: {
23
24
  currency_code: order.currency,
24
25
  value: adjustment.amount
25
26
  }
26
27
  }
27
28
  end
28
29
 
29
- pp_response = provider.create_order(order, express_checkout_request_details(order, items))
30
+ pp_response = provider.create_order(order, express_checkout_request_details(order: order, items: items, tax_adjustments: tax_adjustments, promotion_adjustments: promotion_adjustments))
30
31
 
31
32
  render json: pp_response
32
33
  end
@@ -48,15 +49,16 @@ module Spree
48
49
  def proceed
49
50
  order = current_order || raise(ActiveRecord::RecordNotFound)
50
51
  order.payments.last.source.update(transaction_id: params[:transaction_id])
52
+ order.payments.last.update(response_code: params[:transaction_id])
51
53
  order.next
54
+ path = checkout_state_path(order.state)
52
55
  if order.complete?
53
56
  flash.notice = Spree.t(:order_processed_successfully)
54
57
  flash[:order_completed] = true
55
58
  session[:order_id] = nil
56
- redirect_to completion_route(order)
57
- else
58
- redirect_to checkout_state_path(order.state)
59
+ path = completion_route(order)
59
60
  end
61
+ render json: { redirect_to: path }
60
62
  end
61
63
 
62
64
  def cancel
@@ -70,31 +72,68 @@ module Spree
70
72
  def line_item(item)
71
73
  {
72
74
  name: item.product.name,
73
- number: item.variant.sku,
75
+ sku: item.variant.sku,
74
76
  quantity: item.quantity,
75
- amount: {
77
+ description: item.product.meta_description,
78
+ unit_amount: {
76
79
  currency_code: item.order.currency,
77
80
  value: item.price
78
81
  },
79
- ItemCategory: "Physical"
82
+ item_category: "Physical"
80
83
  }
81
84
  end
82
85
 
83
- def express_checkout_request_details order, items
86
+ def express_checkout_request_details order:, items:, tax_adjustments:, promotion_adjustments:
84
87
  {
85
88
  intent: 'CAPTURE',
86
89
  purchase_units: [
87
90
  {
88
91
  amount: {
89
92
  currency_code: current_order.currency,
90
- value: order.total
93
+ value: order.total,
94
+ breakdown: {
95
+ item_total: {
96
+ currency_code: current_order.currency,
97
+ value: items.sum{|r| (r[:unit_amount][:value] * r[:quantity]) }
98
+ },
99
+ shipping: {
100
+ currency_code: current_order.currency,
101
+ value: current_order.shipments.sum(:cost)
102
+ },
103
+ tax_total: {
104
+ currency_code: current_order.currency,
105
+ value: tax_adjustments.sum(:amount)
106
+ },
107
+ discount: {
108
+ currency_code: current_order.currency,
109
+ value: promotion_adjustments.sum(:amount).abs
110
+ }
111
+ }
91
112
  },
92
- item: items
113
+ items: items,
114
+ shipping: address_options
93
115
  },
94
116
  ]
95
117
  }
96
118
  end
97
119
 
120
+ def address_options
121
+ address = current_order.ship_address
122
+ {
123
+ name: { full_name: address.try(:full_name) },
124
+ address: {
125
+ address_line_1: address.address1,
126
+ address_line_2: address.address2,
127
+ # phone: address.phone,
128
+ admin_area_1: address.state_text,
129
+ admin_area_2: address.city,
130
+ country_code: address.country.iso,
131
+ postal_code: address.zipcode
132
+ },
133
+ type: 'SHIPPING'
134
+ }
135
+ end
136
+
98
137
  def payment_method
99
138
  Spree::PaymentMethod.find(params[:payment_method_id])
100
139
  end
@@ -20,28 +20,14 @@ module Spree
20
20
  'paypal_checkout'
21
21
  end
22
22
 
23
- def generate_client_token
24
- uri = URI.parse("https://#{preferred_server}/v1/identity/generate-token")
25
- request = Net::HTTP::Post.new(uri)
26
- request['Authorization'] = "Bearer #{generate_access_token}"
27
- request.content_type = "application/json"
28
-
29
- req_options = { use_ssl: uri.scheme == "https" }
30
-
31
- response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
32
- response = http.request(request)
33
- end
34
- return response
35
- end
36
-
37
23
  def generate_access_token
38
24
  uri = URI.parse("https://#{preferred_server}/v1/oauth2/token")
39
25
  request = Net::HTTP::Post.new(uri)
40
26
  request.basic_auth("#{preferred_api_key}", "#{preferred_secret_key}")
41
- request.content_type = "application/json"
42
- request.body = "grant_type=client_credentials"
27
+ request.content_type = 'application/json'
28
+ request.body = 'grant_type=client_credentials'
43
29
 
44
- req_options = { use_ssl: uri.scheme == "https" }
30
+ req_options = { use_ssl: uri.scheme == 'https' }
45
31
 
46
32
  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
47
33
  response = http.request(request)
@@ -49,46 +35,24 @@ module Spree
49
35
  return JSON.parse(response.read_body)['access_token']
50
36
  end
51
37
 
38
+ def generate_client_token
39
+ uri = URI.parse("https://#{preferred_server}/v1/identity/generate-token")
40
+ return post_response(uri)
41
+ end
42
+
52
43
  def create_order order, body
53
44
  uri = URI.parse("https://#{preferred_server}/v2/checkout/orders")
54
- request = Net::HTTP::Post.new(uri)
55
- request['Authorization'] = "Bearer #{generate_access_token}"
56
- request.content_type = "application/json"
57
-
58
- request.body = body.to_json
59
- req_options = { use_ssl: uri.scheme == "https" }
60
-
61
- response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
62
- response = http.request(request)
63
- end
64
- return JSON.parse(response.read_body)
45
+ return post_response(uri, body)
65
46
  end
66
47
 
67
48
  def capture_payment order_id
68
49
  uri = URI.parse("https://#{preferred_server}/v2/checkout/orders/#{order_id}/capture")
69
- request = Net::HTTP::Post.new(uri)
70
- request['Authorization'] = "Bearer #{generate_access_token}"
71
- request.content_type = "application/json"
72
- req_options = { use_ssl: uri.scheme == "https" }
73
-
74
- response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
75
- response = http.request(request)
76
- end
77
- return JSON.parse(response.read_body)
50
+ return post_response(uri)
78
51
  end
79
52
 
80
53
  def refund_payment id, body
81
54
  uri = URI.parse("https://#{preferred_server}/v2/payments/captures/#{id}/refund")
82
- request = Net::HTTP::Post.new(uri)
83
- request['Authorization'] = "Bearer #{generate_access_token}"
84
- request.body = body.to_json
85
- request.content_type = "application/json"
86
- req_options = { use_ssl: uri.scheme == "https" }
87
-
88
- response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
89
- response = http.request(request)
90
- end
91
- return JSON.parse(response.read_body)
55
+ return post_response(uri, body)
92
56
  end
93
57
 
94
58
  def purchase(amount, express_checkout, gateway_options={})
@@ -134,6 +98,19 @@ module Spree
134
98
  end
135
99
  refund_transaction_response
136
100
  end
101
+
102
+ def post_response uri, body={}
103
+ request = Net::HTTP::Post.new(uri)
104
+ request['Authorization'] = "Bearer #{generate_access_token}"
105
+ request.content_type = 'application/json'
106
+ req_options = { use_ssl: uri.scheme == 'https' }
107
+
108
+ request.body = body.to_json if body.present?
109
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
110
+ response = http.request(request)
111
+ end
112
+ return JSON.parse(response.read_body)
113
+ end
137
114
  end
138
115
  end
139
116
 
@@ -1,3 +1,3 @@
1
1
  module SpreePaypalApiCheckout
2
- VERSION = '0.0.7'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "spree_paypal_api_checkout".freeze
3
- s.version = "0.0.7"
3
+ s.version = "0.1.0"
4
4
 
5
5
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
6
6
  s.require_paths = ["lib".freeze]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_paypal_api_checkout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spree Commerce