spree_bitcoin_checkout 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,57 @@
1
+ module Spree
2
+ module BitcoinCheckout
3
+ def self.included(base)
4
+ base.before_filter :redirect_to_bitcoin_central_if_needed,
5
+ :only => [:update]
6
+ end
7
+
8
+ def redirect_to_bitcoin_central_if_needed
9
+ if should_redirect_to_bitcoin_sci?
10
+ redirect_to create_invoice_through_api!
11
+ end
12
+ end
13
+
14
+ def should_redirect_to_bitcoin_sci?
15
+ params[:state] == "payment" &&
16
+ (PaymentMethod.find(params[:order][:payments_attributes].first[:payment_method_id]).type.to_s =~ /BitcoinCheckout/)
17
+ end
18
+
19
+ def create_invoice_through_api!
20
+ require "net/https"
21
+ require "uri"
22
+ require "json"
23
+
24
+ payment_method = PaymentMethod.find(params[:order][:payments_attributes].first[:payment_method_id])
25
+
26
+ base_url = AppConfiguration.first.preferred_site_url.gsub(/\/$/, "")
27
+ base_url = "http://#{base_url}" unless base_url =~ /^http/
28
+ callback_url = [base_url, bitcoin_checkout_notification_path].join
29
+ item_url = [base_url, order_path(@order)].join
30
+
31
+ user = payment_method.preferred_user
32
+ password = payment_method.preferred_password
33
+
34
+ uri = URI.parse("#{payment_method.preferred_api_url}.json")
35
+ http = Net::HTTP.new(uri.host, uri.port)
36
+ http.use_ssl = (uri.scheme == "https")
37
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl
38
+
39
+ request = Net::HTTP::Post.new(uri.request_uri)
40
+ request.basic_auth(user, password)
41
+ request.set_form_data({
42
+ "invoice[merchant_reference]" => @order.number,
43
+ "invoice[merchant_memo]" => "Payment for order #{@order.number}",
44
+ "invoice[amount]" => @order.total.to_s,
45
+ "invoice[callback_url]" => callback_url,
46
+ "invoice[item_url]" => item_url
47
+ }
48
+ )
49
+
50
+ response = http.request(request)
51
+ Rails.logger.warn("**********************************************************")
52
+ Rails.logger.warn(response.body)
53
+ Rails.logger.warn("**********************************************************")
54
+ JSON.parse(response.body)["invoice"]["public_url"]
55
+ end
56
+ end
57
+ end
@@ -12,6 +12,10 @@ module SpreeBitcoinCheckout
12
12
  end
13
13
 
14
14
  Billing::BitcoinCheckout.register
15
+
16
+ CheckoutController.class_eval do
17
+ include Spree::BitcoinCheckout
18
+ end
15
19
  end
16
20
 
17
21
  initializer "static assets" do |app|
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.platform = Gem::Platform::RUBY
3
3
  s.name = 'spree_bitcoin_checkout'
4
- s.version = '0.1.2'
4
+ s.version = '0.1.3'
5
5
  s.summary = "Automatically integrate bitcoin-central.net's API"
6
6
  s.description = 'Leverages the invoicing API in order to seamlessly accept bitcoin denominated payments'
7
7
  s.required_ruby_version = '>= 1.8.7'
@@ -16,4 +16,5 @@ Gem::Specification.new do |s|
16
16
  s.requirements << 'none'
17
17
 
18
18
  s.add_dependency('spree_core', '>= 0.60.0')
19
+ s.add_dependency('json', '>= 1.5.1')
19
20
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_bitcoin_checkout
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - David FRANCOIS
@@ -34,6 +34,22 @@ dependencies:
34
34
  version: 0.60.0
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: json
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 1
46
+ segments:
47
+ - 1
48
+ - 5
49
+ - 1
50
+ version: 1.5.1
51
+ type: :runtime
52
+ version_requirements: *id002
37
53
  description: Leverages the invoicing API in order to seamlessly accept bitcoin denominated payments
38
54
  email: david@bitcoin-central.net
39
55
  executables: []
@@ -49,11 +65,11 @@ files:
49
65
  - Rakefile
50
66
  - Versionfile
51
67
  - app/controllers/bitcoin_checkout_notification_controller.rb
52
- - app/controllers/checkout_controller_decorator.rb
53
68
  - app/models/billing/bitcoin_checkout.rb
54
69
  - app/views/checkout/payment/_bitcoincheckout.erb
55
70
  - config/routes.rb
56
71
  - db/migrate/20110519233636_add_bitcoin_checkout_columns_in_order.rb
72
+ - lib/spree/bitcoin_checkout.rb
57
73
  - lib/spree_bitcoin_checkout.rb
58
74
  - lib/spree_bitcoin_checkout_hooks.rb
59
75
  - lib/tasks/install.rake
@@ -1,49 +0,0 @@
1
- CheckoutController.class_eval do
2
- def update_with_redirect_to_bitcoin_sci
3
- if should_redirect_to_bitcoin_sci?
4
- create_invoice_through_api!
5
- redirect_to "https://bitcoin-central.net/invoices"
6
- else
7
- update_without_redirect_to_bitcoin_sci
8
- end
9
- end
10
-
11
- alias_method_chain :update, :redirect_to_bitcoin_sci
12
-
13
- def should_redirect_to_bitcoin_sci?
14
- params["state"] == "payment" &&
15
- (PaymentMethod.find(params[:order][:payments_attributes].first[:payment_method_id]).type.to_s =~ /BitcoinCheckout/)
16
- end
17
-
18
- def create_invoice_through_api!
19
- require "net/https"
20
- require "uri"
21
-
22
- order = current_order
23
-
24
- base_url = AppConfiguration.first.preferred_site_url.gsub(/\/$/, "")
25
- callback_url = [base_url, bitcoin_checkout_notification_path].join
26
-
27
- user = order.payments.first.payment_method.preferred_user
28
- password = order.payments.first.payment_method.preferred_password
29
-
30
- uri = URI.parse(order.payments.first.payment_method.preferred_api_url)
31
- http = Net::HTTP.new(uri.host, uri.port)
32
- http.use_ssl = true
33
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
34
-
35
- request = Net::HTTP::Post.new(uri.request_uri)
36
- request.basic_auth(user, password)
37
- request.set_form_data({
38
- "invoice[merchant_reference]" => order.number,
39
- "invoice[merchant_memo]" => "Payment for order #{order.number}",
40
- "invoice[amount]" => order.total.to_s,
41
- "invoice[callback_url]" => callback_url,
42
- "invoice[item_url]" => order_path(order)
43
- }
44
- )
45
- response = http.request(request)
46
- puts response.body
47
- # response.status
48
- end
49
- end