twocheckout 0.1.4 → 0.5.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
- SHA1:
3
- metadata.gz: 2a2acbfc07a3287a39e71714a070b5911d147e25
4
- data.tar.gz: c801f81540adb9d02a2075221ed5150a33a49cf7
2
+ SHA256:
3
+ metadata.gz: 6ae819e29f87aa59ae4f4756f06d8e1cdccba403f504f4e2eafd5e3e86ef64c3
4
+ data.tar.gz: dbe2d6eb71fb17e18d37585f2183976225f1da6d3849d09834f1a727cc4304fb
5
5
  SHA512:
6
- metadata.gz: 4ab8f184567bf54ef622302fef869cdbf306c63b13374ed728de7a878c62a7c52829a594ef6d564e10fd2e1c0cb29a0550faf64c4e6d29c2f1c4127986a3ffed
7
- data.tar.gz: 7523bb892b93543c8ccbf4ae000c37e3e2b38b17d3e4c57a85dfd5ab7e6e8dd2e86e3ca0b46452251fad6e0c7d854b3c69e12de0ee0f6764da8dbdcf6c597854
6
+ metadata.gz: 9957625ac830b0e2b4be232e449dd29cb9bed844526a943a3aacc0bed878eb0f5eea1b9b95329c7a10d23ca963e486d173d2801ffb623e1855c47bb6579d9f02
7
+ data.tar.gz: 7001057a88943e0c38900c38893bef7e1b9638768285a71848f240381b9c1ed6492e75df4680a5273297026d665cd60d6d550e497bca4b249ccc42412856467c
data/README.md CHANGED
@@ -12,13 +12,99 @@ gem install twocheckout
12
12
  Or import into your Gemfile.
13
13
 
14
14
  ```ruby
15
- gem "twocheckout", "~> 0.1.1"
15
+ gem "twocheckout"
16
16
  ```
17
17
 
18
- Full documentation for each binding is provided in the **[Wiki](https://github.com/2checkout/2checkout-ruby/wiki)**.
18
+ Full documentation for each binding is provided in the **[wiki](https://github.com/2Checkout/2checkout-ruby/wiki)**.
19
19
 
20
20
 
21
- Example API Usage
21
+ Example Purchase API Usage
22
+ -----------------
23
+
24
+ *Example Usage:*
25
+
26
+ ```ruby
27
+ Twocheckout::API.credentials = {
28
+ :seller_id => '1817037',
29
+ :private_key => '3508079E-5383-44D4-BF69-DC619C0D9811'
30
+ }
31
+
32
+ params = {
33
+ :merchantOrderId => '123',
34
+ :token => 'ZmYyMzMyZGMtZTY2NS00NDAxLTlhYTQtMTgwZWIyZTgwMzQx',
35
+ :currency => 'USD',
36
+ :total => '1.00',
37
+ :billingAddr => {
38
+ :name => 'Testing Tester',
39
+ :addrLine1 => '123 Test St',
40
+ :city => 'Columbus',
41
+ :state => 'OH',
42
+ :zipCode => '43123',
43
+ :country => 'USA',
44
+ :email => 'cchristenson@2co.com',
45
+ :phoneNumber => '555-555-5555'
46
+ }
47
+ }
48
+
49
+ begin
50
+ result = Twocheckout::Checkout.authorize(params)
51
+ rescue Exception => e
52
+ puts e.message
53
+ end
54
+ ```
55
+
56
+ *Example Response:*
57
+
58
+ ```ruby
59
+ #<Twocheckout::Checkout>{
60
+ "type"=>"AuthResponse",
61
+ "lineItems"=>
62
+ [{"options"=>[],
63
+ "price"=>"1.00",
64
+ "quantity"=>"1",
65
+ "recurrence"=>nil,
66
+ "startupFee"=>nil,
67
+ "productId"=>"",
68
+ "tangible"=>"N",
69
+ "name"=>"123",
70
+ "type"=>"product",
71
+ "description"=>"",
72
+ "duration"=>nil}],
73
+ "transactionId"=>"205180760223",
74
+ "billingAddr"=>
75
+ {"addrLine1"=>"123 Test St",
76
+ "addrLine2"=>nil,
77
+ "city"=>"Columbus",
78
+ "zipCode"=>"43123",
79
+ "phoneNumber"=>"555-555-5555",
80
+ "phoneExtension"=>nil,
81
+ "email"=>"cchristenson@2co.com",
82
+ "name"=>"Testing Tester",
83
+ "state"=>"OH",
84
+ "country"=>"USA"},
85
+ "shippingAddr"=>
86
+ {"addrLine1"=>nil,
87
+ "addrLine2"=>nil,
88
+ "city"=>nil,
89
+ "zipCode"=>nil,
90
+ "phoneNumber"=>nil,
91
+ "phoneExtension"=>nil,
92
+ "email"=>nil,
93
+ "name"=>nil,
94
+ "state"=>nil,
95
+ "country"=>nil},
96
+ "merchantOrderId"=>"123",
97
+ "orderNumber"=>"205180760214",
98
+ "recurrentInstallmentId"=>nil,
99
+ "responseMsg"=>"Successfully authorized the provided credit card",
100
+ "responseCode"=>"APPROVED",
101
+ "total"=>"1.00",
102
+ "currencyCode"=>"USD",
103
+ "errors"=>nil}
104
+ ```
105
+
106
+
107
+ Example Admin API Usage
22
108
  -----------------
23
109
 
24
110
  *Example Usage:*
@@ -198,4 +284,4 @@ end
198
284
  "Lineitem is not scheduled to recur."
199
285
  ```
200
286
 
201
- Full documentation for each binding is provided in the **[Wiki](https://github.com/2checkout/2checkout-ruby/wiki)**.
287
+ Full documentation for each binding is provided in the **[wiki](https://github.com/2Checkout/2checkout-ruby/wiki)**.
@@ -1,13 +1,11 @@
1
- require "twocheckout/version"
2
- require "twocheckout/api"
3
- require "twocheckout/hash_object"
4
- require "twocheckout/validate_response"
5
- require "twocheckout/company"
6
- require "twocheckout/lineitem"
7
- require "twocheckout/invoice"
8
- require "twocheckout/sale"
9
- require "twocheckout/coupon"
10
- require "twocheckout/product"
11
- require "twocheckout/option"
12
- require "twocheckout/checkout"
13
- require "twocheckout/twocheckout_error"
1
+ require 'twocheckout/version'
2
+ require 'twocheckout/api'
3
+ require 'twocheckout/hash_object'
4
+ require 'twocheckout/validate_response'
5
+ require 'twocheckout/company'
6
+ require 'twocheckout/lineitem'
7
+ require 'twocheckout/invoice'
8
+ require 'twocheckout/sale'
9
+ require 'twocheckout/product'
10
+ require 'twocheckout/checkout'
11
+ require 'twocheckout/twocheckout_error'
@@ -3,47 +3,77 @@ require 'json'
3
3
 
4
4
  module Twocheckout
5
5
  class API
6
- API_BASE = 'https://www.2checkout.com/api/'
6
+ PROD_BASE = 'https://www.2checkout.com'.freeze
7
+ API_VERSION = '1'.freeze
7
8
 
8
9
  def self.credentials=(opts)
9
- @@username = opts[:username]
10
- @@password = opts[:password]
11
- opts
10
+ @username = opts[:username]
11
+ @password = opts[:password]
12
+ @private_key = opts[:private_key]
13
+ @seller_id = opts[:seller_id]
12
14
  end
13
15
 
14
16
  def self.request(http_method, api_call, params = nil)
15
- url = API_BASE + api_call
16
- if http_method == :get
17
- url += hash_to_querystring(params)
18
- params = nil
19
- end
20
- opts = {
21
- :method => http_method,
22
- :url => url,
23
- :headers => {
24
- :accept => :json,
25
- :content_type => :json,
26
- :user_agent => "2Checkout/Ruby/," + Twocheckout::VERSION
27
- },
28
- :user => @@username,
29
- :password => @@password,
30
- :payload => params,
31
- }
17
+ opts = set_opts(http_method, api_call, params)
32
18
  begin
33
19
  response = RestClient::Request.execute(opts)
34
20
  JSON.parse(response)
35
21
  rescue => e
36
22
  error_hash = JSON.parse(e.response)
37
- raise TwocheckoutError.new(error_hash['errors'][0]['message']).retrieve
23
+ if error_hash['exception']
24
+ raise TwocheckoutError.new(error_hash['exception']['errorMsg'], error_hash['exception']['errorCode'])
25
+ else
26
+ raise TwocheckoutError.new(error_hash['errors'][0]['message'])
27
+ end
38
28
  end
39
29
  end
40
30
 
41
31
  private
42
32
 
33
+ def self.set_opts(http_method, api_call, params = null)
34
+ url = PROD_BASE
35
+ if api_call == 'authService'
36
+ url += '/checkout/api/' + API_VERSION + '/' + @seller_id + '/rs/' + api_call
37
+ params['sellerId'] = @seller_id
38
+ params['privateKey'] = @private_key
39
+ opts = {
40
+ :method => http_method,
41
+ :url => url,
42
+ :headers => {
43
+ :accept => :json,
44
+ :content_type => :json,
45
+ :user_agent => "2Checkout/Ruby/," + Twocheckout::VERSION
46
+ },
47
+ :payload => params.to_json,
48
+ }
49
+ else
50
+ url += '/api/' + api_call
51
+ if http_method == :get
52
+ url += hash_to_querystring(params)
53
+ params = nil
54
+ end
55
+
56
+ opts = {
57
+ :method => http_method,
58
+ :url => url,
59
+ :headers => {
60
+ :accept => :json,
61
+ :content_type => :json,
62
+ :user_agent => "2Checkout/Ruby/," + Twocheckout::VERSION
63
+ },
64
+ :user => @username,
65
+ :password => @password,
66
+ :payload => params,
67
+ }
68
+ end
69
+
70
+ return opts
71
+ end
72
+
43
73
  def self.hash_to_querystring(hash)
44
74
  return '' if hash.nil? || hash.empty?
45
75
  '?' + hash.map { |k,v| "#{URI.encode(k.to_s)}=#{URI.encode(v.to_s)}" }.join('&')
46
76
  end
47
77
 
48
78
  end
49
- end
79
+ end
@@ -1,8 +1,10 @@
1
1
  module Twocheckout
2
- class Checkout
2
+ class Checkout < HashObject
3
+
4
+ @checkout_url = 'https://www.2checkout.com/checkout/purchase'
3
5
 
4
6
  def self.form(params={}, button_text='Proceed to Checkout')
5
- @form = "<form id=\"2checkout\" action=\"https://www.2checkout.com/checkout/purchase\" method=\"post\">\n";
7
+ @form = "<form id=\"2checkout\" action=\"#{@checkout_url}\" method=\"post\">\n";
6
8
  params.each do |k,v|
7
9
  @form = @form + "<input type=\"hidden\" name=\"" + k + "\" value=\"" + v.to_s + "\" />\n"
8
10
  end
@@ -10,7 +12,7 @@ module Twocheckout
10
12
  end
11
13
 
12
14
  def self.submit(params={})
13
- @form = "<form id=\"2checkout\" action=\"https://www.2checkout.com/checkout/purchase\" method=\"post\">\n";
15
+ @form = "<form id=\"2checkout\" action=\"#{@checkout_url}\" method=\"post\">\n";
14
16
  params.each do |k,v|
15
17
  @form = @form + "<input type=\"hidden\" name=\"" + k + "\" value=\"" + v.to_s + "\" />\n"
16
18
  end
@@ -19,7 +21,7 @@ module Twocheckout
19
21
  end
20
22
 
21
23
  def self.direct(params={}, button_text='Proceed to Checkout')
22
- @form = "<form id=\"2checkout\" action=\"https://www.2checkout.com/checkout/purchase\" method=\"post\">\n";
24
+ @form = "<form id=\"2checkout\" action=\"#{@checkout_url}\" method=\"post\">\n";
23
25
  params.each do |k,v|
24
26
  @form = @form + "<input type=\"hidden\" name=\"" + k + "\" value=\"" + v.to_s + "\" />\n"
25
27
  end
@@ -27,9 +29,14 @@ module Twocheckout
27
29
  @form = @form + "<script src=\"https://www.2checkout.com/static/checkout/javascript/direct.min.js\"></script>"
28
30
  end
29
31
 
30
- def self.link(params={}, url="https://www.2checkout.com/checkout/purchase?")
32
+ def self.link(params={})
31
33
  @querystring = params.map{|k,v| "#{CGI.escape(k)}=#{CGI.escape(v)}"}.join("&")
32
- @purchase_url = url + @querystring
34
+ @purchase_url = @checkout_url + '?' + @querystring
35
+ end
36
+
37
+ def self.authorize(params={})
38
+ response = Twocheckout::API.request(:post, 'authService', params)
39
+ response['response']
33
40
  end
34
41
  end
35
42
  end
@@ -75,13 +75,6 @@ module Twocheckout
75
75
  Twocheckout::API.request(:post, 'sales/mark_shipped', opts)
76
76
  end
77
77
 
78
- #
79
- # Reauthorize sale
80
- #
81
- def reauth
82
- Twocheckout::API.request(:post, 'sales/reauth', sale_id: self.sale_id)
83
- end
84
-
85
78
  #
86
79
  # Get sale list in an array
87
80
  #
@@ -1,18 +1,11 @@
1
1
  module Twocheckout
2
2
  class TwocheckoutError < StandardError
3
3
  attr_reader :message
4
+ attr_reader :code
4
5
 
5
- def initialize(message)
6
+ def initialize(message, code = nil)
6
7
  @message = message
7
- end
8
-
9
- def retrieve
10
- if @message.is_a?(Hash)
11
- @message = JSON.generate(@message)
12
- "#{@message}"
13
- else
14
- "#{@message}"
15
- end
8
+ @code = code
16
9
  end
17
10
  end
18
- end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Twocheckout
2
- VERSION = "0.1.1"
2
+ VERSION = '0.5.0'.freeze
3
3
  end
@@ -1,5 +1,9 @@
1
- require "minitest/spec"
2
1
  require "minitest/autorun"
3
2
  require "twocheckout"
4
3
 
5
- Twocheckout::API.credentials = { :username => 'APIuser1817037', :password => 'APIpass1817037' }
4
+ Twocheckout::API.credentials = {
5
+ :username => 'CREDENTIALS HERE',
6
+ :password => 'CREDENTIALS HERE',
7
+ :seller_id => 'CREDENTIALS HERE',
8
+ :private_key => 'CREDENTIALS HERE',
9
+ }
@@ -7,14 +7,14 @@ describe Twocheckout::Sale do
7
7
 
8
8
  #retrieve sale
9
9
  it "Sale retrieve returns sale" do
10
- sale = Twocheckout::Sale.find(:sale_id => 4786293822)
11
- assert_equal('4786293822', sale.sale_id)
10
+ sale = Twocheckout::Sale.find(:sale_id => 250335346812)
11
+ assert_equal('250335346812', sale.sale_id)
12
12
  end
13
13
 
14
14
  #retrieve invoice
15
15
  it "Sale retrieve returns invoice" do
16
- invoice = Twocheckout::Sale.find({:invoice_id => 4786293831})
17
- assert_equal('4786293831', invoice.invoice_id)
16
+ invoice = Twocheckout::Sale.find({:invoice_id => 250334725631})
17
+ assert_equal('250334725631', invoice.invoice_id)
18
18
  end
19
19
 
20
20
  #retrieve sale list
@@ -24,85 +24,75 @@ describe Twocheckout::Sale do
24
24
  end
25
25
 
26
26
  #refund sale
27
- it "Refunding a refunded sale returns exception" do
28
- begin
29
- sale = Twocheckout::Sale.find(:sale_id => 4786293822)
30
- sale.refund!({:comment => "test refund", :category => 1})
31
- rescue Exception => e
32
- assert_equal("Invoice too old to refund.", e.message)
27
+ it "Refunding a refunded sale returns Twocheckout::TwocheckoutError" do
28
+ begin
29
+ sale = Twocheckout::Sale.find(:sale_id => 250335365202)
30
+ sale.refund!({:comment => "test refund", :category => 1})
31
+ rescue Twocheckout::TwocheckoutError => e
32
+ assert_equal("Amount greater than remaining balance on invoice.", e.message)
33
33
  end
34
34
  end
35
35
 
36
36
  #refund invoice
37
- it "Refunding a refunded invoice returns exception" do
38
- begin
39
- sale = Twocheckout::Sale.find(:sale_id => 4786293822)
40
- invoice = sale.invoices.first
41
- invoice.refund!({:comment => "test refund", :category => 1})
42
- rescue Exception => e
43
- assert_equal("Invoice too old to refund.", e.message)
37
+ it "Refunding a refunded invoice returns Twocheckout::TwocheckoutError" do
38
+ begin
39
+ sale = Twocheckout::Sale.find(:sale_id => 250335365202)
40
+ invoice = sale.invoices.first
41
+ invoice.refund!({:comment => "test refund", :category => 1})
42
+ rescue Twocheckout::TwocheckoutError => e
43
+ assert_equal("Amount greater than remaining balance on invoice.", e.message)
44
44
  end
45
45
  end
46
46
 
47
47
  #refund lineitem
48
- it "Refunding a refunded lineitem returns exception" do
49
- begin
50
- sale = Twocheckout::Sale.find(:sale_id => 4786293822)
51
- first_invoice = sale.invoices.first
52
- last_lineitem = first_invoice.lineitems.last
53
- last_lineitem.refund!({:comment => "test refund", :category => 1})
54
- rescue Exception => e
55
- assert_equal("This lineitem cannot be refunded.", e.message)
48
+ it "Refunding a refunded lineitem returns Twocheckout::TwocheckoutError" do
49
+ begin
50
+ sale = Twocheckout::Sale.find(:sale_id => 250192108517)
51
+ first_invoice = sale.invoices.first
52
+ last_lineitem = first_invoice.lineitems.last
53
+ last_lineitem.refund!({:comment => "test refund", :category => 1})
54
+ rescue Twocheckout::TwocheckoutError => e
55
+ assert_equal("Lineitem amount greater than remaining balance on invoice.", e.message)
56
56
  end
57
57
  end
58
58
 
59
59
  #stop recurring lineitem
60
- it "Stopping a stopped recurring lineitem returns exception" do
61
- begin
62
- sale = Twocheckout::Sale.find(:sale_id => 4786293822)
63
- result = sale.stop_recurring!
64
- assert_equal(result, [])
65
- rescue Exception => e
66
- assert_equal("Lineitem is not scheduled to recur.", e.message)
60
+ it "Stopping a stopped recurring lineitem returns Twocheckout::TwocheckoutError" do
61
+ begin
62
+ sale = Twocheckout::Sale.find(:sale_id => 250192108517)
63
+ result = sale.stop_recurring!
64
+ assert_equal(result, [])
65
+ rescue Twocheckout::TwocheckoutError => e
66
+ assert_equal("Lineitem is not scheduled to recur.", e.message)
67
67
  end
68
68
  end
69
69
 
70
70
  #stop recurring sale
71
- it "Stopping a stopped recurring sale returns exception" do
72
- begin
73
- sale = Twocheckout::Sale.find(:sale_id => 4786293822)
74
- last_invoice = sale.invoices.last
75
- last_lineitem = last_invoice.lineitems.last
76
- last_lineitem.stop_recurring!
77
- rescue Exception => e
78
- assert_equal("Lineitem is not scheduled to recur.", e.message)
71
+ it "Stopping a stopped recurring sale returns Twocheckout::TwocheckoutError" do
72
+ begin
73
+ sale = Twocheckout::Sale.find(:sale_id => 250192108517)
74
+ last_invoice = sale.invoices.last
75
+ last_lineitem = last_invoice.lineitems.last
76
+ last_lineitem.stop_recurring!
77
+ rescue Twocheckout::TwocheckoutError => e
78
+ assert_equal("Lineitem is not scheduled to recur.", e.message)
79
79
  end
80
80
  end
81
81
 
82
82
  #create comment
83
83
  it "Creates a sale comment" do
84
- sale = Twocheckout::Sale.find(:sale_id => 4786293822)
84
+ sale = Twocheckout::Sale.find(:sale_id => 250334624367)
85
85
  result = sale.comment({:sale_comment => "test"})
86
86
  assert_equal('Created comment successfully.', result['response_message'])
87
87
  end
88
88
 
89
89
  #mark shipped
90
- it "Shipping an intangible sale returns exception" do
91
- begin
92
- sale = Twocheckout::Sale.find(:sale_id => 4786293822)
93
- sale.ship({:tracking_number => "123"})
94
- rescue Exception => e
95
- assert_equal("Item not shippable.", e.message)
96
- end
97
- end
98
-
99
- #reauth
100
- it "Reauthorizing a pending sale returns exception" do
101
- begin
102
- sale = Twocheckout::Sale.find(:sale_id => 4786293822)
103
- sale.reauth
104
- rescue Exception => e
105
- assert_equal("Payment is already pending or deposited and cannot be reauthorized.", e.message)
90
+ it "Shipping an intangible sale returns Twocheckout::TwocheckoutError" do
91
+ begin
92
+ sale = Twocheckout::Sale.find(:sale_id => 250335377097)
93
+ sale.ship({:tracking_number => "123"})
94
+ rescue Twocheckout::TwocheckoutError => e
95
+ assert_equal("Sale already marked shipped.", e.message)
106
96
  end
107
97
  end
108
98
  end
@@ -115,98 +105,46 @@ describe Twocheckout::Product do
115
105
 
116
106
  # Product list
117
107
  it "Product list returns array of products" do
118
- product_list = Twocheckout::Product.list({ :pagesize => 5 })
119
- assert_equal(product_list.size, 5)
108
+ product_list = Twocheckout::Product.list({ :pagesize => 3 })
109
+ assert_equal(product_list.size, 3)
120
110
  end
121
111
 
122
112
  # Product CRUD
123
- it "Product create, find, update, delete is successful" do
124
- # create
113
+ it "Product create, find, update, delete is successful" do
114
+ # create
125
115
  new_product = Twocheckout::Product.create({:name => "test product", :price => 1.00})
126
- assert_equal("test product", new_product.name)
127
- # find
128
- product = Twocheckout::Product.find({:product_id => new_product.product_id})
129
- assert_equal(new_product.product_id, product.product_id)
130
- # update
131
- product = product.update({:name => "new name"})
132
- assert_equal("new name", product.name)
133
- # delete
134
- result = product.delete!
135
- assert_equal("Product successfully deleted.", result['response_message'])
136
- end
137
- end
138
-
139
- describe Twocheckout::Option do
140
-
141
- # Option list
142
- it "Option list returns array of options" do
143
- option_list = Twocheckout::Option.list({ :pagesize => 5 })
144
- assert_equal(5, option_list.size)
145
- end
146
-
147
- # Option CRUD
148
- it "Option create, find, update, delete is successful" do
149
- # create
150
- new_option = Twocheckout::Option.create({:option_name => "test option",
151
- :option_value_name => "test option value", :option_value_surcharge => 1.00})
152
- assert_equal("test option", new_option.option_name)
153
- # find
154
- option = Twocheckout::Option.find({:option_id => new_option.option_id})
155
- assert_equal(new_option.option_id, option.option_id)
156
- # update
157
- option = option.update({:option_name => "new name"})
158
- assert_equal("new name", option.option_name)
159
- # delete
160
- result = option.delete!
161
- assert_equal("Option deleted successfully", result['response_message'])
162
- end
163
- end
164
-
165
- describe Twocheckout::Coupon do
166
-
167
- # Coupon list
168
- it "Coupon list returns array of coupons" do
169
- coupon_list = Twocheckout::Coupon.list({ :pagesize => 4 })
170
- assert_equal(4, coupon_list.size)
171
- end
172
-
173
- # Coupon CRUD
174
- it "Coupon create, find, update, delete is successful" do
175
- # create
176
- new_coupon = Twocheckout::Coupon.create({:date_expire => "2020-01-01",
177
- :type => "shipping", :minimum_purchase => 1.00})
178
- assert_equal("2020-01-01", new_coupon.date_expire)
179
- # find
180
- coupon = Twocheckout::Coupon.find({:coupon_code => new_coupon.coupon_code})
181
- assert_equal(new_coupon.coupon_code, coupon.coupon_code)
182
- # update
183
- coupon = coupon.update({:date_expire => "2020-01-02"})
184
- assert_equal("2020-01-02", coupon.date_expire)
185
- # delete
186
- result = coupon.delete!
187
- assert_equal("Coupon successfully deleted.", result['response_message'])
116
+ assert_equal("test product", new_product.name)
117
+ # find
118
+ product = Twocheckout::Product.find({:product_id => new_product.product_id})
119
+ assert_equal(new_product.product_id, product.product_id)
120
+ # update
121
+ product = product.update({:name => "new name"})
122
+ assert_equal("new name", product.name)
123
+ # delete
124
+ result = product.delete!
125
+ assert_equal("Product successfully deleted.", result['response_message'])
188
126
  end
189
127
  end
190
128
 
191
129
  describe Twocheckout::ValidateResponse do
192
- #demo
130
+
193
131
  it "Validates Purchase MD5 Hash" do
194
132
  result = Twocheckout::ValidateResponse.purchase({:sid => 1817037, :secret => "tango", :order_number => 1, :total => 0.01,
195
- :key => '1BC47EA0D63EB76496E294F434138AD3'})
133
+ :key => '1BC47EA0D63EB76496E294F434138AD3'})
196
134
  assert_equal('PASS', result[:code])
197
135
  end
198
136
 
199
137
  #purchase
200
138
  it "Validates Purchase MD5 Hash" do
201
139
  result = Twocheckout::ValidateResponse.purchase({:sid => 1817037, :secret => "tango", :order_number => 4789848870, :total => 0.01,
202
- :key => 'CDF3E502AA1597DD4401760783432337'})
140
+ :key => 'CDF3E502AA1597DD4401760783432337'})
203
141
  assert_equal('PASS', result[:code])
204
142
  end
205
143
 
206
144
  #notification
207
145
  it "Validates Notification MD5 Hash" do
208
146
  result = Twocheckout::ValidateResponse.notification({:sale_id => 4789848870, :vendor_id => 1817037, :invoice_id => 4789848879, :secret => "tango",
209
- :md5_hash => '827220324C722873694758F38D8D3624'})
147
+ :md5_hash => '827220324C722873694758F38D8D3624'})
210
148
  assert_equal('PASS', result[:code])
211
149
  end
212
150
  end
@@ -216,11 +154,11 @@ describe Twocheckout::Checkout do
216
154
  it "Submit return a form + JS to submit" do
217
155
  form = Twocheckout::Checkout.submit({ 'sid' => '1817037', 'cart_order_id' => 'Example Sale', 'total' => '1.00'})
218
156
  @form = "<form id=\"2checkout\" action=\"https://www.2checkout.com/checkout/purchase\" method=\"post\">\n" +
219
- "<input type=\"hidden\" name=\"sid\" value=\"1817037\" />\n" +
220
- "<input type=\"hidden\" name=\"cart_order_id\" value=\"Example Sale\" />\n" +
221
- "<input type=\"hidden\" name=\"total\" value=\"1.00\" />\n" +
222
- "</form>\n" +
223
- "<script type=\"text/javascript\">document.getElementById('2checkout').submit();</script>"
157
+ "<input type=\"hidden\" name=\"sid\" value=\"1817037\" />\n" +
158
+ "<input type=\"hidden\" name=\"cart_order_id\" value=\"Example Sale\" />\n" +
159
+ "<input type=\"hidden\" name=\"total\" value=\"1.00\" />\n" +
160
+ "</form>\n" +
161
+ "<script type=\"text/javascript\">document.getElementById('2checkout').submit();</script>"
224
162
  assert_equal(form, @form)
225
163
  end
226
164
 
@@ -228,11 +166,11 @@ describe Twocheckout::Checkout do
228
166
  it "Form returns a form" do
229
167
  form = Twocheckout::Checkout.form({ 'sid' => '1817037', 'cart_order_id' => 'Example Sale', 'total' => '1.00'}, "Proceed")
230
168
  @form = "<form id=\"2checkout\" action=\"https://www.2checkout.com/checkout/purchase\" method=\"post\">\n" +
231
- "<input type=\"hidden\" name=\"sid\" value=\"1817037\" />\n" +
232
- "<input type=\"hidden\" name=\"cart_order_id\" value=\"Example Sale\" />\n" +
233
- "<input type=\"hidden\" name=\"total\" value=\"1.00\" />\n" +
234
- "<input type=\"submit\" value=\"Proceed\" />\n" +
235
- "</form>"
169
+ "<input type=\"hidden\" name=\"sid\" value=\"1817037\" />\n" +
170
+ "<input type=\"hidden\" name=\"cart_order_id\" value=\"Example Sale\" />\n" +
171
+ "<input type=\"hidden\" name=\"total\" value=\"1.00\" />\n" +
172
+ "<input type=\"submit\" value=\"Proceed\" />\n" +
173
+ "</form>"
236
174
  assert_equal(form, @form)
237
175
  end
238
176
 
@@ -248,21 +186,21 @@ describe Twocheckout::Checkout do
248
186
  'zip' => '43123',
249
187
  'country' => 'USA',
250
188
  'email' => 'no-reply@2co.com'
251
- })
189
+ })
252
190
  @form = "<form id=\"2checkout\" action=\"https://www.2checkout.com/checkout/purchase\" method=\"post\">\n" +
253
- "<input type=\"hidden\" name=\"sid\" value=\"1817037\" />\n" +
254
- "<input type=\"hidden\" name=\"cart_order_id\" value=\"Example Sale\" />\n" +
255
- "<input type=\"hidden\" name=\"total\" value=\"1.00\" />\n" +
256
- "<input type=\"hidden\" name=\"card_holder_name\" value=\"Testing Tester\" />\n" +
257
- "<input type=\"hidden\" name=\"street_address\" value=\"123 Test St\" />\n" +
258
- "<input type=\"hidden\" name=\"city\" value=\"Columbus\" />\n" +
259
- "<input type=\"hidden\" name=\"state\" value=\"Ohio\" />\n" +
260
- "<input type=\"hidden\" name=\"zip\" value=\"43123\" />\n" +
261
- "<input type=\"hidden\" name=\"country\" value=\"USA\" />\n" +
262
- "<input type=\"hidden\" name=\"email\" value=\"no-reply@2co.com\" />\n" +
263
- "<input type=\"submit\" value=\"Proceed to Checkout\" />\n" +
264
- "</form>\n" +
265
- "<script src=\"https://www.2checkout.com/static/checkout/javascript/direct.min.js\"></script>"
191
+ "<input type=\"hidden\" name=\"sid\" value=\"1817037\" />\n" +
192
+ "<input type=\"hidden\" name=\"cart_order_id\" value=\"Example Sale\" />\n" +
193
+ "<input type=\"hidden\" name=\"total\" value=\"1.00\" />\n" +
194
+ "<input type=\"hidden\" name=\"card_holder_name\" value=\"Testing Tester\" />\n" +
195
+ "<input type=\"hidden\" name=\"street_address\" value=\"123 Test St\" />\n" +
196
+ "<input type=\"hidden\" name=\"city\" value=\"Columbus\" />\n" +
197
+ "<input type=\"hidden\" name=\"state\" value=\"Ohio\" />\n" +
198
+ "<input type=\"hidden\" name=\"zip\" value=\"43123\" />\n" +
199
+ "<input type=\"hidden\" name=\"country\" value=\"USA\" />\n" +
200
+ "<input type=\"hidden\" name=\"email\" value=\"no-reply@2co.com\" />\n" +
201
+ "<input type=\"submit\" value=\"Proceed to Checkout\" />\n" +
202
+ "</form>\n" +
203
+ "<script src=\"https://www.2checkout.com/static/checkout/javascript/direct.min.js\"></script>"
266
204
  assert_equal(form, @form)
267
205
  end
268
206
 
@@ -272,4 +210,31 @@ describe Twocheckout::Checkout do
272
210
  @link = "https://www.2checkout.com/checkout/purchase?sid=1817037&cart_order_id=Example+Sale&total=1.00"
273
211
  assert_equal(link, @link)
274
212
  end
275
- end
213
+
214
+ #authorize
215
+ it "Authorize creates authorization" do
216
+ params = {
217
+ :merchantOrderId => '123',
218
+ :token => 'OWM5OTAxM2YtNDhiMC00YjMyLTlkNDQtOWQ5MGRlOGExNDE0',
219
+ :currency => 'USD',
220
+ :total => '1.00',
221
+ :demo => true,
222
+ :billingAddr => {
223
+ :name => 'John Doe',
224
+ :addrLine1 => '123 Test St',
225
+ :city => 'Columbus',
226
+ :state => 'OH',
227
+ :zipCode => '43123',
228
+ :country => 'USA',
229
+ :email => 'cchristenson@2co.com',
230
+ :phoneNumber => '555-555-5555'
231
+ }
232
+ }
233
+ begin
234
+ result = Twocheckout::Checkout.authorize(params)
235
+ assert_equal("APPROVED", result['responseCode'])
236
+ rescue Twocheckout::TwocheckoutError => e
237
+ assert_equal("Unauthorized", e.message)
238
+ end
239
+ end
240
+ end
@@ -4,18 +4,18 @@ $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
4
4
  Gem::Specification.new do |s|
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.name = 'twocheckout'
7
- s.version = '0.1.4'
7
+ s.version = '0.5.0'
8
8
  s.summary = '2Checkout Ruby Library'
9
- s.description = '0.1.4'
9
+ s.description = '0.5.0'
10
10
  s.summary = '2Checkout Ruby Library'
11
- s.author = "Craig Christenson", "Ernesto Garcia"
12
- s.email = 'christensoncraig@gmail.com'
13
- s.homepage = 'https://github.com/craigchristenson'
11
+ s.author = "Craig Christenson", "Ernesto Garcia", "Andrei Popa"
12
+ s.email = 'supportplus@2checkout.com'
13
+ s.homepage = 'https://github.com/2Checkout/2checkout-ruby'
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
- s.add_dependency('rest-client', '~> 1.4')
17
+ s.add_dependency('rest-client', '>= 1.4')
18
18
  s.require_paths = %w{lib}
19
19
  s.requirements << 'none'
20
-
20
+ s.license = 'MIT'
21
21
  end
metadata CHANGED
@@ -1,48 +1,47 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twocheckout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig Christenson
8
8
  - Ernesto Garcia
9
+ - Andrei Popa
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-06-06 00:00:00.000000000 Z
13
+ date: 2020-06-01 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rest-client
16
17
  requirement: !ruby/object:Gem::Requirement
17
18
  requirements:
18
- - - ~>
19
+ - - ">="
19
20
  - !ruby/object:Gem::Version
20
21
  version: '1.4'
21
22
  type: :runtime
22
23
  prerelease: false
23
24
  version_requirements: !ruby/object:Gem::Requirement
24
25
  requirements:
25
- - - ~>
26
+ - - ">="
26
27
  - !ruby/object:Gem::Version
27
28
  version: '1.4'
28
- description: 0.1.4
29
- email: christensoncraig@gmail.com
29
+ description: 0.5.0
30
+ email: supportplus@2checkout.com
30
31
  executables: []
31
32
  extensions: []
32
33
  extra_rdoc_files: []
33
34
  files:
34
- - .gitignore
35
+ - ".gitignore"
35
36
  - LICENSE
36
37
  - README.md
37
38
  - lib/twocheckout.rb
38
39
  - lib/twocheckout/api.rb
39
40
  - lib/twocheckout/checkout.rb
40
41
  - lib/twocheckout/company.rb
41
- - lib/twocheckout/coupon.rb
42
42
  - lib/twocheckout/hash_object.rb
43
43
  - lib/twocheckout/invoice.rb
44
44
  - lib/twocheckout/lineitem.rb
45
- - lib/twocheckout/option.rb
46
45
  - lib/twocheckout/product.rb
47
46
  - lib/twocheckout/sale.rb
48
47
  - lib/twocheckout/twocheckout_error.rb
@@ -50,10 +49,10 @@ files:
50
49
  - lib/twocheckout/version.rb
51
50
  - test/minitest_helper.rb
52
51
  - test/twocheckout_test.rb
53
- - twocheckout-0.1.3.gem
54
52
  - twocheckout.gemspec
55
- homepage: https://github.com/craigchristenson
56
- licenses: []
53
+ homepage: https://github.com/2Checkout/2checkout-ruby
54
+ licenses:
55
+ - MIT
57
56
  metadata: {}
58
57
  post_install_message:
59
58
  rdoc_options: []
@@ -61,19 +60,20 @@ require_paths:
61
60
  - lib
62
61
  required_ruby_version: !ruby/object:Gem::Requirement
63
62
  requirements:
64
- - - '>='
63
+ - - ">="
65
64
  - !ruby/object:Gem::Version
66
65
  version: '0'
67
66
  required_rubygems_version: !ruby/object:Gem::Requirement
68
67
  requirements:
69
- - - '>='
68
+ - - ">="
70
69
  - !ruby/object:Gem::Version
71
70
  version: '0'
72
71
  requirements:
73
72
  - none
74
- rubyforge_project:
75
- rubygems_version: 2.0.3
73
+ rubygems_version: 3.0.3
76
74
  signing_key:
77
75
  specification_version: 4
78
76
  summary: 2Checkout Ruby Library
79
- test_files: []
77
+ test_files:
78
+ - test/minitest_helper.rb
79
+ - test/twocheckout_test.rb
@@ -1,41 +0,0 @@
1
- module Twocheckout
2
- class Coupon < HashObject
3
-
4
- def self.find(options)
5
- response = Twocheckout::API.request(:get, 'products/detail_coupon', options)
6
- Coupon.new(response['coupon'])
7
- end
8
-
9
- def self.with_coupon_code(coupon_code)
10
- find(:coupon_code => coupon_code)
11
- end
12
-
13
- def self.create(opts)
14
- response = Twocheckout::API.request(:post, 'products/create_coupon', opts)
15
- find(:coupon_code => response['coupon_code'])
16
- end
17
-
18
- def update(opts)
19
- opts = opts.merge(:coupon_code => self.coupon_code)
20
- Twocheckout::API.request(:post, 'products/update_coupon', opts)
21
- response = Twocheckout::API.request(:get, 'products/detail_coupon', opts)
22
- Coupon.new(response['coupon'])
23
- end
24
-
25
- def delete!
26
- opts = {:coupon_code => self.coupon_code}
27
- Twocheckout::API.request(:post, 'products/delete_coupon', opts)
28
- end
29
-
30
- def self.list(opts=nil)
31
- Twocheckout::API.request(:get, 'products/list_coupons', opts)
32
- end
33
-
34
- protected
35
-
36
- def _key
37
- self.coupon_code
38
- end
39
-
40
- end
41
- end
@@ -1,57 +0,0 @@
1
- module Twocheckout
2
- class Option < HashObject
3
-
4
- #
5
- # Finds option by ID and returns a Option object
6
- #
7
- def self.find(options)
8
- response = Twocheckout::API.request(:get, 'products/detail_option', options)
9
- Option.new(response['option'][0])
10
- end
11
-
12
- def self.with_option_id(option_id)
13
- find(:option_id => option_id)
14
- end
15
-
16
- #
17
- # Creates a new product option
18
- #
19
- def self.create(opts)
20
- response = Twocheckout::API.request(:post, 'products/create_option', opts)
21
- find(:option_id => response['option_id'])
22
- end
23
-
24
- #
25
- # Updates option and returns a new object
26
- #
27
- def update(opts)
28
- opts = opts.merge(:option_id => self.option_id)
29
- Twocheckout::API.request(:post, 'products/update_option', opts)
30
- response = Twocheckout::API.request(:get, 'products/detail_option', opts)
31
- Option.new(response['option'][0])
32
- end
33
-
34
- #
35
- # Deletes the option and returns the response
36
- #
37
- def delete!
38
- opts = {:option_id => self.option_id}
39
- Twocheckout::API.request(:post, 'products/delete_option', opts)
40
- end
41
-
42
- #
43
- # An array to index options list
44
- #
45
- def self.list(opts=nil)
46
- response = Twocheckout::API.request(:get, 'products/list_options', opts)
47
- response['options']
48
- end
49
-
50
- protected
51
-
52
- def _key
53
- self.option_id
54
- end
55
-
56
- end
57
- end
Binary file