beanstream 1.0.0.rc1 → 1.0.0.rc2

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: abe714a2b18a419e345b2f43e52ce2aacfadc260
4
- data.tar.gz: 7a42a8d0ee4870b12d79abbec7ee171441885de7
3
+ metadata.gz: 6c9a72d6147bf8de094eb500954634b6ce9585a3
4
+ data.tar.gz: bf87fd124feaa654a9dd0f24a9007889b4795877
5
5
  SHA512:
6
- metadata.gz: a3d415ae9448fe7717e59085c686b8b3f1a114c5ffdfc58d8a8fc0b4167c6e9b59abe71aaa02305dceabe8313440f60d3253dcce13fd53d353a1f3a801b40e95
7
- data.tar.gz: fe7f78d9f92f5d06a198338dcc955007c72cc824e29865fffc84e6970745e4808efa2d088fef55996558693d48a02f537c627fd0d5cc1d47f63d3f6eb4bc2f41
6
+ metadata.gz: 91b68de4e5d298b720e98b82fbf2d87aab88d7b6e7e3dfa34a361e540a3816319ee25ec9192d7bfdfb7030af76258b607d163b74f91e398b86467079b89ce5a6
7
+ data.tar.gz: 864d5dcb81d8e90ab79079d0426d4c70bf93fd1c318abafca33af0d030bae12693d1e7ad2354f0fb9a8e46ad7914f93655fe6f7562924b57b7d1264d45b551a8
@@ -3,8 +3,8 @@
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'beanstream'
6
- s.version = '1.0.0.rc1'
7
- s.date = '2015-08-14'
6
+ s.version = '1.0.0.rc2'
7
+ s.date = '2015-08-21'
8
8
  s.summary = "Beanstream Ruby SDK"
9
9
  s.description = "Accept payments using Beanstream and Ruby"
10
10
  s.authors = ["Brent Owens", "Colin Walker", "Tom Mengda"]
@@ -44,6 +44,7 @@ module Beanstream
44
44
  :code => "",
45
45
  :complete => true
46
46
  }
47
+ return request
47
48
  end
48
49
 
49
50
  #Payment Request Hash for making a payment with a credit card number
@@ -58,17 +59,19 @@ module Beanstream
58
59
  :cvd => "",
59
60
  :complete => true
60
61
  }
62
+ return request
61
63
  end
62
64
 
63
65
  #Payment Request Hash for making a payment with a Payment Profile
64
66
  def getProfilePaymentRequestTemplate()
65
67
  request = getPaymentRequestTemplate()
66
68
  request[:payment_method] = PaymentMethods::PROFILE
67
- request[:token] = {
69
+ request[:payment_profile] = {
68
70
  :customer_code => "",
69
71
  :card_id => 1,
70
72
  :complete => true
71
73
  }
74
+ return request
72
75
  end
73
76
 
74
77
  # Base Payment Request Hash for making a payments
@@ -11,6 +11,64 @@ module Beanstream
11
11
  "#{Beanstream.api_base_url()}/profiles/cards"
12
12
  end
13
13
 
14
+ def getCreateProfileWithCardTemplate()
15
+ request = getProfileTemplate()
16
+ request[:card] = {
17
+ :name => "",
18
+ :number => "",
19
+ :expiry_month => "",
20
+ :expiry_year => "",
21
+ :cvd => ""
22
+ }
23
+ return request
24
+ end
25
+
26
+ def getCreateProfileWithTokenTemplate()
27
+ request = getProfileTemplate()
28
+ request[:token] = {
29
+ :name => "",
30
+ :code => ""
31
+ }
32
+ return request
33
+ end
34
+
35
+ # a template for a Secure Payment Profile
36
+ def getProfileTemplate()
37
+ request = {
38
+ :language=> "",
39
+ :comments=> "",
40
+ :billing=> {
41
+ :name=> "",
42
+ :address_line1=> "",
43
+ :address_line2=> "",
44
+ :city=> "",
45
+ :province=> "",
46
+ :country=> "",
47
+ :postal_code=> "",
48
+ :phone_number=> "",
49
+ :email_address=> ""
50
+ },
51
+ :shipping=> {
52
+ :name=> "",
53
+ :address_line1=> "",
54
+ :address_line2=> "",
55
+ :city=> "",
56
+ :province=> "",
57
+ :country=> "",
58
+ :postal_code=> "",
59
+ :phone_number=> "",
60
+ :email_address=> ""
61
+ },
62
+ :custom=> {
63
+ :ref1=> "",
64
+ :ref2=> "",
65
+ :ref3=> "",
66
+ :ref4=> "",
67
+ :ref5=> ""
68
+ }
69
+ }
70
+ end
71
+
14
72
  def create_profile(profile)
15
73
  val = transaction_post("POST", profile_url, Beanstream.merchant_id, Beanstream.profiles_api_key, profile)
16
74
  end
@@ -14,7 +14,7 @@ module Beanstream
14
14
  enc = encode(merchant_id, api_key)
15
15
 
16
16
  path = Beanstream.api_host_url+url_path
17
- puts "processing the data: #{method} #{path} #{data.to_json}"
17
+ #puts "processing the data: #{method} #{path} #{data.to_json}"
18
18
 
19
19
  req_params = {
20
20
  :verify_ssl => OpenSSL::SSL::VERIFY_PEER,
@@ -46,7 +46,7 @@ module Beanstream
46
46
  end
47
47
 
48
48
  def handle_api_error(ex)
49
- puts "error: #{ex}"
49
+ #puts "error: #{ex}"
50
50
 
51
51
  http_status_code = ex.http_code
52
52
  message = ex.message
@@ -70,21 +70,24 @@ module Beanstream
70
70
  puts "token result: #{token}"
71
71
  assert(token != nil)
72
72
 
73
- result = Beanstream.PaymentsAPI.make_payment(
74
- {
75
- :order_number => PaymentsAPI.generateRandomOrderId("test"),
76
- :amount => 13.99,
77
- :payment_method => PaymentMethods::TOKEN,
78
- :token => {
79
- :name => "Bobby Test",
80
- :code => token,
81
- :complete => true
73
+ begin
74
+ result = Beanstream.PaymentsAPI.make_payment(
75
+ {
76
+ :order_number => PaymentsAPI.generateRandomOrderId("test"),
77
+ :amount => 13.99,
78
+ :payment_method => PaymentMethods::TOKEN,
79
+ :token => {
80
+ :name => "Bobby Test",
81
+ :code => token,
82
+ :complete => true
83
+ }
82
84
  }
83
- }
84
- )
85
- puts "result: #{result}"
86
- assert(PaymentsAPI.payment_approved(result))
87
-
85
+ )
86
+ puts "result: #{result}"
87
+ assert(PaymentsAPI.payment_approved(result))
88
+ rescue BeanstreamException => ex
89
+ assert(false)
90
+ end
88
91
  end
89
92
 
90
93
  #Card decline
@@ -106,6 +109,8 @@ module Beanstream
106
109
  :complete => true
107
110
  }
108
111
  })
112
+ puts "Success! TransactionID: #{result['id']}"
113
+
109
114
  rescue BeanstreamException => ex
110
115
  decline = true
111
116
  puts "Exception: #{ex.user_facing_message}"
@@ -120,36 +125,47 @@ module Beanstream
120
125
  #PreAuth card
121
126
  should "have successful credit card pre-auth and completion" do
122
127
 
123
- result = Beanstream.PaymentsAPI.make_payment(
124
- {
125
- :order_number => PaymentsAPI.generateRandomOrderId("test"),
126
- :amount => 100,
127
- :payment_method => PaymentMethods::CARD,
128
- :card => {
129
- :name => "Mr. Card Testerson",
130
- :number => "4030000010001234",
131
- :expiry_month => "07",
132
- :expiry_year => "22",
133
- :cvd => "123",
134
- :complete => false
128
+ decline = false
129
+ begin
130
+ result = Beanstream.PaymentsAPI.make_payment(
131
+ {
132
+ :order_number => PaymentsAPI.generateRandomOrderId("test"),
133
+ :amount => 100,
134
+ :payment_method => PaymentMethods::CARD,
135
+ :card => {
136
+ :name => "Mr. Card Testerson",
137
+ :number => "4030000010001234",
138
+ :expiry_month => "07",
139
+ :expiry_year => "22",
140
+ :cvd => "123",
141
+ :complete => false
142
+ }
135
143
  }
136
- }
137
- )
138
- puts "result: #{result}"
144
+ )
145
+ puts "result: #{result}"
146
+ assert(PaymentsAPI.payment_approved(result))
147
+ transaction_id = result['id']
148
+ puts "TransactionId: #{transaction_id}"
149
+
150
+ result = Beanstream.PaymentsAPI.complete_preauth(transaction_id, 59.50)
151
+ puts "completion result: #{result}"
152
+ assert(PaymentsAPI.payment_approved(result))
139
153
 
140
- assert(PaymentsAPI.payment_approved(result))
141
- transaction_id = result['id']
142
- puts "TransactionId: #{transaction_id}"
154
+ rescue BeanstreamException => ex
155
+ decline = true
156
+ puts "Exception: #{ex.user_facing_message}"
157
+ assert(ex.user_facing_message == "DECLINE")
158
+ assert(ex.is_user_error())
159
+ end
160
+
161
+ assert(!decline)
143
162
 
144
- result = Beanstream.PaymentsAPI.complete_preauth(transaction_id, 59.50)
145
- puts "completion result: #{result}"
146
- assert(PaymentsAPI.payment_approved(result))
147
163
  end
148
164
 
149
165
  #PreAuth token
150
166
  should "pre-auth and complete successfully with a legato token" do
151
167
 
152
- # 1) get token
168
+ # 1) get token (this is normally done in the client app)
153
169
  token = Beanstream.PaymentsAPI.get_legato_token(
154
170
  {
155
171
  :number => "4030000010001234",
@@ -162,26 +178,31 @@ module Beanstream
162
178
  assert(token != nil)
163
179
 
164
180
  # 2) make pre-auth
165
- result = Beanstream.PaymentsAPI.make_payment(
166
- {
167
- :order_number => PaymentsAPI.generateRandomOrderId("test"),
168
- :amount => 13.99,
169
- :payment_method => PaymentMethods::TOKEN,
170
- :token => {
171
- :name => "Bobby Test",
172
- :code => token,
173
- :complete => false
181
+ begin
182
+ result = Beanstream.PaymentsAPI.make_payment(
183
+ {
184
+ :order_number => PaymentsAPI.generateRandomOrderId("test"),
185
+ :amount => 13.99,
186
+ :payment_method => PaymentMethods::TOKEN,
187
+ :token => {
188
+ :name => "Bobby Test",
189
+ :code => token,
190
+ :complete => false
191
+ }
174
192
  }
175
- }
176
- )
177
- puts "result: #{result}"
178
- assert(PaymentsAPI.payment_approved(result))
179
- transaction_id = result['id']
193
+ )
194
+ puts "result: #{result}"
195
+ assert(PaymentsAPI.payment_approved(result))
196
+ transaction_id = result['id']
180
197
 
181
- # 3) complete purchase
182
- result = Beanstream.PaymentsAPI.complete_preauth(transaction_id, 10.33)
183
- puts "completion result: #{result}"
184
- assert(PaymentsAPI.payment_approved(result))
198
+ # 3) complete purchase
199
+ result = Beanstream.PaymentsAPI.complete_preauth(transaction_id, 10.33)
200
+ puts "completion result: #{result}"
201
+ assert(PaymentsAPI.payment_approved(result))
202
+ rescue BeanstreamException => ex
203
+ puts "card declined"
204
+ assert(false)
205
+ end
185
206
  end
186
207
 
187
208
  #Return
@@ -63,31 +63,70 @@ module Beanstream
63
63
 
64
64
  end
65
65
 
66
- # Profile CREATE
67
- should "have successfully created a profile" do
68
- result = Beanstream.ProfilesAPI.create_profile(
69
- {
70
- :card => {
71
- :name => "Bob Test",
72
- :number => "4030000010001234",
73
- :expiry_month => "07",
74
- :expiry_year => "22",
75
- :cvd => "123"
76
- },
77
- :billing => {
78
- :name => "Bob Test",
79
- :address_line1 => "123 Fake St.",
80
- :city => "Victoria",
81
- :province => "BC",
82
- :country => "CA",
83
- :postal_code => "v1v2v2",
84
- :phone_number => "12505551234",
85
- :email_address => "fake@example.com"
86
- }
87
- })
88
- assert(ProfilesAPI.profile_successfully_created(result))
89
- profile_id = result['customer_code']
90
- puts "Created profile with ID: #{profile_id}"
66
+ # Profile CREATE with CARD
67
+ should "have successfully created a profile with credit card" do
68
+
69
+ begin
70
+ profile = Beanstream.ProfilesAPI.getCreateProfileWithCardTemplate()
71
+ profile[:card][:name] = "Bob Test"
72
+ profile[:card][:number] = "4030000010001234"
73
+ profile[:card][:expiry_month] ="07"
74
+ profile[:card][:expiry_year] = "22"
75
+ profile[:card][:cvd] = "123"
76
+ profile[:billing][:name] = "Bob Test"
77
+ profile[:billing][:address_line1] = "123 Fake St."
78
+ profile[:billing][:city] = "Victoria"
79
+ profile[:billing][:province] = "BC"
80
+ profile[:billing][:country] = "CA"
81
+ profile[:billing][:postal_code] = "v1v2v2"
82
+ profile[:billing][:phone_number] = "12505551234"
83
+ profile[:billing][:email_address] = "fake@example.com"
84
+
85
+ result = Beanstream.ProfilesAPI.create_profile(profile)
86
+
87
+ assert(ProfilesAPI.profile_successfully_created(result))
88
+ profile_id = result['customer_code']
89
+ puts "Created profile with ID: #{profile_id}"
90
+ rescue BeanstreamException => ex
91
+ assert(false)
92
+ end
93
+ end
94
+
95
+ # Profile CREATE with TOKEN
96
+ should "have successfully created a profile with token" do
97
+
98
+ begin
99
+ token = Beanstream.PaymentsAPI.get_legato_token(
100
+ {
101
+ :number => "4030000010001234",
102
+ :expiry_month => "07",
103
+ :expiry_year => "22",
104
+ :cvd => "123"
105
+ }
106
+ )
107
+ puts "token result: #{token}"
108
+ assert(token != nil)
109
+
110
+ profile = Beanstream.ProfilesAPI.getCreateProfileWithTokenTemplate()
111
+ profile[:token][:name] = "Bob Test"
112
+ profile[:token][:code] = token
113
+ profile[:billing][:name] = "Bob Test"
114
+ profile[:billing][:address_line1] = "123 Fake St."
115
+ profile[:billing][:city] = "Victoria"
116
+ profile[:billing][:province] = "BC"
117
+ profile[:billing][:country] = "CA"
118
+ profile[:billing][:postal_code] = "v1v2v2"
119
+ profile[:billing][:phone_number] = "12505551234"
120
+ profile[:billing][:email_address] = "fake@example.com"
121
+
122
+ result = Beanstream.ProfilesAPI.create_profile(profile)
123
+
124
+ assert(ProfilesAPI.profile_successfully_created(result))
125
+ profile_id = result['customer_code']
126
+ puts "Created profile with ID: #{profile_id}"
127
+ rescue BeanstreamException => ex
128
+ assert(false)
129
+ end
91
130
  end
92
131
 
93
132
  # Profile DELETE
@@ -257,5 +296,68 @@ module Beanstream
257
296
  delete_card = Beanstream.ProfilesAPI.delete_profile_card(@profile,1)
258
297
  assert(delete_card['message']== 'Operation Successful')
259
298
  end
299
+
300
+ # Profile PAYMENT and PRE_AUTH
301
+ should "have successfully made payments with a profile" do
302
+
303
+ profile_id = ""
304
+ begin
305
+ result = Beanstream.ProfilesAPI.create_profile(
306
+ {
307
+ :card => {
308
+ :name => "Bob Test",
309
+ :number => "4030000010001234",
310
+ :expiry_month => "07",
311
+ :expiry_year => "22",
312
+ :cvd => "123"
313
+ },
314
+ :billing => {
315
+ :name => "Bob Test",
316
+ :address_line1 => "123 Fake St.",
317
+ :city => "Victoria",
318
+ :province => "BC",
319
+ :country => "CA",
320
+ :postal_code => "v1v2v2",
321
+ :phone_number => "12505551234",
322
+ :email_address => "fake@example.com"
323
+ }
324
+ })
325
+ assert(ProfilesAPI.profile_successfully_created(result))
326
+ profile_id = result['customer_code']
327
+ puts "Created profile with ID: #{profile_id}"
328
+ rescue BeanstreamException => ex
329
+ puts "Error: #{ex.user_facing_message()}"
330
+ assert(false)
331
+ end
332
+
333
+ begin
334
+ # payment
335
+ profile_payment = Beanstream.PaymentsAPI.getProfilePaymentRequestTemplate()
336
+ profile_payment[:payment_profile][:customer_code] = profile_id
337
+ profile_payment[:amount] = 77.50
338
+ result = Beanstream.PaymentsAPI.make_payment(profile_payment)
339
+ rescue BeanstreamException => ex
340
+ puts "Error: #{ex.user_facing_message()}"
341
+ assert(false) #declined
342
+ end
343
+
344
+ begin
345
+ # pre-auth
346
+ profile_payment = Beanstream.PaymentsAPI.getProfilePaymentRequestTemplate()
347
+ profile_payment[:amount] = 80
348
+ profile_payment[:payment_profile][:customer_code] = profile_id
349
+ profile_payment[:payment_profile][:complete] = false #false for pre-auth
350
+ result = Beanstream.PaymentsAPI.make_payment(profile_payment)
351
+
352
+ #complete pre-auth
353
+ result = Beanstream.PaymentsAPI.complete_preauth(result['id'], 40.50)
354
+ puts "completion result: #{result}"
355
+ assert(PaymentsAPI.payment_approved(result))
356
+ rescue BeanstreamException => ex
357
+ puts "Error: #{ex.user_facing_message()}"
358
+ assert(false) #declined
359
+ end
360
+ end
361
+
260
362
  end
261
363
  end
@@ -6,13 +6,11 @@ module Beanstream
6
6
 
7
7
  class ReportingAPITest < Test::Unit::TestCase
8
8
 
9
- =begin
10
9
  setup do
11
10
  Beanstream.merchant_id = "300200578"
12
11
  Beanstream.payments_api_key = "4BaD82D9197b4cc4b70a221911eE9f70"
13
12
  Beanstream.reporting_api_key = "4e6Ff318bee64EA391609de89aD4CF5d"
14
13
  end
15
- =end
16
14
 
17
15
  should "make reports url be the same" do
18
16
  assert_equal("/api/v1/reports", ReportingAPI.new.reports_url())
@@ -21,11 +19,14 @@ module Beanstream
21
19
  end
22
20
 
23
21
  class ReportingAPIIntegrationTest < Test::Unit::TestCase
24
- should "have successfully found my payments" do
25
-
22
+
23
+ setup do
26
24
  Beanstream.merchant_id = "300200578"
27
25
  Beanstream.payments_api_key = "4BaD82D9197b4cc4b70a221911eE9f70"
28
26
  Beanstream.reporting_api_key = "4e6Ff318bee64EA391609de89aD4CF5d"
27
+ end
28
+
29
+ should "have successfully found my payments" do
29
30
 
30
31
  prefix = SecureRandom.hex(4)
31
32
  #prepare a payment
@@ -79,9 +80,17 @@ module Beanstream
79
80
 
80
81
 
81
82
  #find transaction 1 from order number
82
- results = Beanstream.ReportingAPI.search_transactions(last3Hours, next3Hours, 1, 10,
83
- Criteria.new(Fields::OrderNumber, Operators::EQUALS, orderNum1)
84
- )
83
+ results = Beanstream.ReportingAPI.search_transactions(
84
+ last3Hours,
85
+ next3Hours,
86
+ 1,
87
+ 10,
88
+ Criteria.new(
89
+ Fields::OrderNumber,
90
+ Operators::EQUALS,
91
+ orderNum1
92
+ )
93
+ )
85
94
  assert(results != nil)
86
95
  puts "Report search by order number\n: #{results}"
87
96
  assert(results.length == 1, "Found #{results.length} instead")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beanstream
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc1
4
+ version: 1.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brent Owens
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-08-14 00:00:00.000000000 Z
13
+ date: 2015-08-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client