blockchyp 2.0.0.pre.alpha7
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 +7 -0
- data/Makefile +38 -0
- data/README.md +807 -0
- data/Rakefile +39 -0
- data/lib/blockchyp.rb +137 -0
- data/lib/blockchyp/version.rb +5 -0
- data/lib/blockchyp_client.rb +334 -0
- data/lib/crypto_utils.rb +25 -0
- data/test/boolean_prompt_test.rb +35 -0
- data/test/heartbeat_test.rb +27 -0
- data/test/new_transaction_display_test.rb +70 -0
- data/test/pan_charge_test.rb +44 -0
- data/test/pan_enroll_test.rb +42 -0
- data/test/pan_preauth_test.rb +43 -0
- data/test/simple_batch_close_test.rb +40 -0
- data/test/simple_capture_test.rb +38 -0
- data/test/simple_gift_activate_test.rb +33 -0
- data/test/simple_message_test.rb +32 -0
- data/test/simple_ping_test.rb +31 -0
- data/test/simple_refund_test.rb +39 -0
- data/test/simple_reversal_test.rb +39 -0
- data/test/simple_void_test.rb +39 -0
- data/test/terminal_charge_test.rb +42 -0
- data/test/terminal_clear_test.rb +31 -0
- data/test/terminal_ebt_balance_test.rb +33 -0
- data/test/terminal_ebt_charge_test.rb +44 -0
- data/test/terminal_enroll_test.rb +41 -0
- data/test/terminal_gift_card_balance_test.rb +32 -0
- data/test/terminal_keyed_charge_test.rb +43 -0
- data/test/terminal_manual_ebt_charge_test.rb +45 -0
- data/test/terminal_preauth_test.rb +42 -0
- data/test/terms_and_conditions_test.rb +36 -0
- data/test/test_helper.rb +65 -0
- data/test/text_prompt_test.rb +33 -0
- data/test/update_transaction_display_test.rb +70 -0
- metadata +77 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7a9aa280f6f893a65d19ac1cc81c1fbb2787138110a4cf422e696cf196153322
|
4
|
+
data.tar.gz: afa2bebafe119454a5ce2ec9b39bd15686c7c5ebb215add0186197dee1489968
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b3a3e83881142f842869e0bf48aeb3fe37cd2e0f4a183f56624b8ff256472b4491af6a28cc4f56eeb73501b6ec0db2948fef77b8956ca52bdc022bc05193f028
|
7
|
+
data.tar.gz: 51d975d45c58bbbeb722027e3bb3fa5b63e75e969ef30bf2551891da2f3605d2b6aa4526465b49b80de2d42b983f3afd313d308d6ff9f619fa8b85dbb730361f
|
data/Makefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# Version config
|
2
|
+
TAG := $(shell git tag --points-at HEAD | sort --version-sort | tail -n 1)
|
3
|
+
LASTTAG := $(or $(shell git tag -l | sort -r -V | head -n 1),0.1.0)
|
4
|
+
SNAPINFO := $(shell date +%Y%m%d%H%M%S)git$(shell git log -1 --pretty=%h)
|
5
|
+
RELEASE := $(or $(BUILD_NUMBER), 1)
|
6
|
+
VERSION := $(or $(TAG:v%=%),$(LASTTAG:v%=%))-$(or $(BUILD_NUMBER), 1)$(if $(TAG),,.$(SNAPINFO))
|
7
|
+
|
8
|
+
# Executables
|
9
|
+
SED = sed
|
10
|
+
|
11
|
+
# Default target
|
12
|
+
.PHONY: all
|
13
|
+
all: clean build test
|
14
|
+
|
15
|
+
# Clean build artifacts
|
16
|
+
.PHONY: clean
|
17
|
+
clean:
|
18
|
+
|
19
|
+
# Build compiles the package
|
20
|
+
.PHONY: build
|
21
|
+
build:
|
22
|
+
|
23
|
+
# Runs unit tests
|
24
|
+
.PHONY: test
|
25
|
+
test:
|
26
|
+
|
27
|
+
# Runs integration tests
|
28
|
+
.PHONY: integration
|
29
|
+
integration:
|
30
|
+
|
31
|
+
# Performs any tasks necessary before a release build
|
32
|
+
.PHONY: stage
|
33
|
+
stage:
|
34
|
+
$(SED) -i "s/VERSION = '.*'/VERSION = '$(shell sed 's/-/.pre./' <<<$(VERSION))'/" lib/blockchyp/version.rb
|
35
|
+
|
36
|
+
# Publish
|
37
|
+
.PHONY: publish
|
38
|
+
publish:
|
data/README.md
ADDED
@@ -0,0 +1,807 @@
|
|
1
|
+
# BlockChyp Ruby SDK
|
2
|
+
|
3
|
+
[](https://circleci.com/gh/blockchyp/blockchyp-ruby/tree/master)
|
4
|
+
[](https://rubygems.org/gems/blockchyp)
|
5
|
+
[](https://github.com/blockchyp/blockchyp-ruby/blob/master/LICENSE)
|
6
|
+
|
7
|
+
This is the SDK for Ruby. Like all BlockChyp SDKs, it provides a full client
|
8
|
+
for the BlockChyp gateway and BlockChyp payment terminals.
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
This SDK is best consumed as a Ruby Gem. Type the following command to install
|
13
|
+
the BlockChyp Gem in your project.
|
14
|
+
|
15
|
+
```
|
16
|
+
gem install blockchyp
|
17
|
+
```
|
18
|
+
|
19
|
+
## A Simple Example
|
20
|
+
|
21
|
+
Running your first transaction is easy. Make sure you have a BlockChyp terminal,
|
22
|
+
activate it, and generate a set of API keys. The sample code below show how
|
23
|
+
to run a basic terminal transaction.
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
require 'blockchyp'
|
27
|
+
|
28
|
+
blockchyp = BlockChyp.new("SPBXTSDAQVFFX5MGQMUMIRINVI", "7BXBTBUPSL3BP7I6Z2CFU6H3WQ", "bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e")
|
29
|
+
|
30
|
+
# setup request object
|
31
|
+
request = Hash.new
|
32
|
+
request["test"] = true
|
33
|
+
request["terminalName"] = "Test Terminal"
|
34
|
+
request["amount"] = "55.00"
|
35
|
+
|
36
|
+
response = blockchyp.charge(request)
|
37
|
+
|
38
|
+
if (response["approved"])
|
39
|
+
puts "Approved"
|
40
|
+
puts "authCode:" + response["authCode"]
|
41
|
+
puts "authorizedAmount:" + response["authorizedAmount"]
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
## The Rest APIs
|
48
|
+
|
49
|
+
All BlockChyp SDKs provide a convenient way of accessing the BlockChyp REST APIs.
|
50
|
+
You can checkout the REST API documentation via the links below.
|
51
|
+
|
52
|
+
[Terminal REST API Docs](https://docs.blockchyp.com/rest-api/terminal/index.html)
|
53
|
+
|
54
|
+
[Gateway REST API Docs](https://docs.blockchyp.com/rest-api/gateway/index.html)
|
55
|
+
|
56
|
+
## Other SDKs
|
57
|
+
|
58
|
+
BlockChyp has officially supported SDKs for eight different development platforms and counting.
|
59
|
+
Here's the full list with links to their GitHub repositories.
|
60
|
+
|
61
|
+
[Go SDK](https://github.com/blockchyp/blockchyp-go)
|
62
|
+
|
63
|
+
[Node.js/JavaScript SDK](https://github.com/blockchyp/blockchyp-js)
|
64
|
+
|
65
|
+
[Java SDK](https://github.com/blockchyp/blockchyp-java)
|
66
|
+
|
67
|
+
[.net/C# SDK](https://github.com/blockchyp/blockchyp-csharp)
|
68
|
+
|
69
|
+
[Ruby SDK](https://github.com/blockchyp/blockchyp-ruby)
|
70
|
+
|
71
|
+
[PHP SDK](https://github.com/blockchyp/blockchyp-php)
|
72
|
+
|
73
|
+
[Python SDK](https://github.com/blockchyp/blockchyp-python)
|
74
|
+
|
75
|
+
[iOS (Objective-C/Swift) SDK](https://github.com/blockchyp/blockchyp-ios)
|
76
|
+
|
77
|
+
## Getting a Developer Kit
|
78
|
+
|
79
|
+
In order to test your integration with real terminals, you'll need a BlockChyp
|
80
|
+
Developer Kit. Our kits include a fully functioning payment terminal with
|
81
|
+
test pin encryption keys. Every kit includes a comprehensive set of test
|
82
|
+
cards with test cards for every major card brand and entry method, including
|
83
|
+
Contactless and Contact EMV and mag stripe cards. Each kit also includes
|
84
|
+
test gift cards for our blockchain gift card system.
|
85
|
+
|
86
|
+
Access to BlockChyp's developer program is currently invite only, but you
|
87
|
+
can request an invitation by contacting our engineering team at **nerds@blockchyp.com**.
|
88
|
+
|
89
|
+
You can also view a number of long form demos and learn more about us on our [YouTube Channel](https://www.youtube.com/channel/UCE-iIVlJic_XArs_U65ZcJg).
|
90
|
+
|
91
|
+
## Transaction Code Examples
|
92
|
+
|
93
|
+
You don't want to read words. You want examples. Here's a quick rundown of the
|
94
|
+
stuff you can do with the BlockChyp Ruby SDK and a few basic examples.
|
95
|
+
|
96
|
+
#### Charge
|
97
|
+
|
98
|
+
Executes a standard direct preauth and capture.
|
99
|
+
|
100
|
+
```ruby
|
101
|
+
# frozen_string_literal: true
|
102
|
+
|
103
|
+
require 'blockchyp'
|
104
|
+
|
105
|
+
blockchyp = BlockChyp.new(
|
106
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
107
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
108
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
109
|
+
)
|
110
|
+
|
111
|
+
# setup request object
|
112
|
+
request = {}
|
113
|
+
request['test'] = true
|
114
|
+
request['terminalName'] = 'Test Terminal'
|
115
|
+
request['amount'] = '55.00'
|
116
|
+
|
117
|
+
response = blockchyp.charge(request)
|
118
|
+
|
119
|
+
if response['approved']
|
120
|
+
puts 'Approved'
|
121
|
+
end
|
122
|
+
|
123
|
+
puts 'authCode:' + response['authCode']
|
124
|
+
puts 'authorizedAmount:' + response['authorizedAmount']
|
125
|
+
|
126
|
+
|
127
|
+
```
|
128
|
+
|
129
|
+
#### Preauthorization
|
130
|
+
|
131
|
+
Executes a preauthorization intended to be captured later.
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
# frozen_string_literal: true
|
135
|
+
|
136
|
+
require 'blockchyp'
|
137
|
+
|
138
|
+
blockchyp = BlockChyp.new(
|
139
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
140
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
141
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
142
|
+
)
|
143
|
+
|
144
|
+
# setup request object
|
145
|
+
request = {}
|
146
|
+
request['test'] = true
|
147
|
+
request['terminalName'] = 'Test Terminal'
|
148
|
+
request['amount'] = '27.00'
|
149
|
+
|
150
|
+
response = blockchyp.preauth(request)
|
151
|
+
|
152
|
+
if response['approved']
|
153
|
+
puts 'Approved'
|
154
|
+
end
|
155
|
+
|
156
|
+
puts 'authCode:' + response['authCode']
|
157
|
+
puts 'authorizedAmount:' + response['authorizedAmount']
|
158
|
+
|
159
|
+
|
160
|
+
```
|
161
|
+
|
162
|
+
#### Terminal Ping
|
163
|
+
|
164
|
+
Tests connectivity with a payment terminal.
|
165
|
+
|
166
|
+
```ruby
|
167
|
+
# frozen_string_literal: true
|
168
|
+
|
169
|
+
require 'blockchyp'
|
170
|
+
|
171
|
+
blockchyp = BlockChyp.new(
|
172
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
173
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
174
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
175
|
+
)
|
176
|
+
|
177
|
+
# setup request object
|
178
|
+
request = {}
|
179
|
+
request['terminalName'] = 'Test Terminal'
|
180
|
+
|
181
|
+
response = blockchyp.ping(request)
|
182
|
+
|
183
|
+
if response['success']
|
184
|
+
puts 'Success'
|
185
|
+
end
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
```
|
190
|
+
|
191
|
+
#### Balance
|
192
|
+
|
193
|
+
Checks the remaining balance on a payment method.
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
# frozen_string_literal: true
|
197
|
+
|
198
|
+
require 'blockchyp'
|
199
|
+
|
200
|
+
blockchyp = BlockChyp.new(
|
201
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
202
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
203
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
204
|
+
)
|
205
|
+
|
206
|
+
# setup request object
|
207
|
+
request = {}
|
208
|
+
request['test'] = true
|
209
|
+
request['terminalName'] = 'Test Terminal'
|
210
|
+
request['cardType'] = CardType::EBT
|
211
|
+
|
212
|
+
response = blockchyp.balance(request)
|
213
|
+
|
214
|
+
if response['success']
|
215
|
+
puts 'Success'
|
216
|
+
end
|
217
|
+
|
218
|
+
|
219
|
+
|
220
|
+
```
|
221
|
+
|
222
|
+
#### Terminal Clear
|
223
|
+
|
224
|
+
Clears the line item display and any in progress transaction.
|
225
|
+
|
226
|
+
```ruby
|
227
|
+
# frozen_string_literal: true
|
228
|
+
|
229
|
+
require 'blockchyp'
|
230
|
+
|
231
|
+
blockchyp = BlockChyp.new(
|
232
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
233
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
234
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
235
|
+
)
|
236
|
+
|
237
|
+
# setup request object
|
238
|
+
request = {}
|
239
|
+
request['test'] = true
|
240
|
+
request['terminalName'] = 'Test Terminal'
|
241
|
+
|
242
|
+
response = blockchyp.clear(request)
|
243
|
+
|
244
|
+
if response['success']
|
245
|
+
puts 'Success'
|
246
|
+
end
|
247
|
+
|
248
|
+
|
249
|
+
|
250
|
+
```
|
251
|
+
|
252
|
+
#### Terms & Conditions Capture
|
253
|
+
|
254
|
+
Prompts the user to accept terms and conditions.
|
255
|
+
|
256
|
+
```ruby
|
257
|
+
# frozen_string_literal: true
|
258
|
+
|
259
|
+
require 'blockchyp'
|
260
|
+
|
261
|
+
blockchyp = BlockChyp.new(
|
262
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
263
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
264
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
265
|
+
)
|
266
|
+
|
267
|
+
# setup request object
|
268
|
+
request = {}
|
269
|
+
request['test'] = true
|
270
|
+
request['terminalName'] = 'Test Terminal'
|
271
|
+
request['tcAlias'] = 'hippa'
|
272
|
+
request['tcName'] = 'HIPPA Disclosure'
|
273
|
+
request['tcContent'] = 'Full contract text'
|
274
|
+
request['sigFormat'] = SignatureFormat::PNG
|
275
|
+
request['sigWidth'] = 200
|
276
|
+
request['sigRequired'] = true
|
277
|
+
|
278
|
+
response = blockchyp.termsAndConditions(request)
|
279
|
+
|
280
|
+
if response['success']
|
281
|
+
puts 'Success'
|
282
|
+
end
|
283
|
+
|
284
|
+
puts 'sig:' + response['sig']
|
285
|
+
puts 'sigFile:' + response['sigFile']
|
286
|
+
|
287
|
+
|
288
|
+
```
|
289
|
+
|
290
|
+
#### Update Transaction Display
|
291
|
+
|
292
|
+
Appends items to an existing transaction display Subtotal, Tax, and Total are
|
293
|
+
overwritten by the request. Items with the same description are combined into
|
294
|
+
groups.
|
295
|
+
|
296
|
+
```ruby
|
297
|
+
# frozen_string_literal: true
|
298
|
+
|
299
|
+
require 'blockchyp'
|
300
|
+
|
301
|
+
blockchyp = BlockChyp.new(
|
302
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
303
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
304
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
305
|
+
)
|
306
|
+
|
307
|
+
# setup request object
|
308
|
+
request = {}
|
309
|
+
request['test'] = true
|
310
|
+
request['terminalName'] = 'Test Terminal'
|
311
|
+
request['transaction'] = new_transaction_display_transaction
|
312
|
+
|
313
|
+
response = blockchyp.updateTransactionDisplay(request)
|
314
|
+
|
315
|
+
if response['success']
|
316
|
+
puts 'Succeded'
|
317
|
+
end
|
318
|
+
|
319
|
+
def new_transaction_display_transaction
|
320
|
+
val = {}
|
321
|
+
val['subtotal'] = '60.00'
|
322
|
+
val['tax'] = '5.00'
|
323
|
+
val['total'] = '65.00'
|
324
|
+
val['items'] = new_transaction_display_items
|
325
|
+
val
|
326
|
+
end
|
327
|
+
|
328
|
+
def new_transaction_display_items
|
329
|
+
val = []
|
330
|
+
val = val.push(new_transaction_display_item_2)
|
331
|
+
val
|
332
|
+
end
|
333
|
+
|
334
|
+
def new_transaction_display_item_2
|
335
|
+
val = {}
|
336
|
+
val['description'] = 'Leki Trekking Poles'
|
337
|
+
val['price'] = '35.00'
|
338
|
+
val['quantity'] = 2
|
339
|
+
val['extended'] = '70.00'
|
340
|
+
val['discounts'] = new_transaction_display_discounts
|
341
|
+
val
|
342
|
+
end
|
343
|
+
|
344
|
+
def new_transaction_display_discounts
|
345
|
+
val = []
|
346
|
+
val = val.push(new_transaction_display_discount_2)
|
347
|
+
val
|
348
|
+
end
|
349
|
+
|
350
|
+
def new_transaction_display_discount_2
|
351
|
+
val = {}
|
352
|
+
val['description'] = 'memberDiscount'
|
353
|
+
val['amount'] = '10.00'
|
354
|
+
val
|
355
|
+
end
|
356
|
+
|
357
|
+
|
358
|
+
|
359
|
+
|
360
|
+
```
|
361
|
+
|
362
|
+
#### New Transaction Display
|
363
|
+
|
364
|
+
Displays a new transaction on the terminal.
|
365
|
+
|
366
|
+
```ruby
|
367
|
+
# frozen_string_literal: true
|
368
|
+
|
369
|
+
require 'blockchyp'
|
370
|
+
|
371
|
+
blockchyp = BlockChyp.new(
|
372
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
373
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
374
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
375
|
+
)
|
376
|
+
|
377
|
+
# setup request object
|
378
|
+
request = {}
|
379
|
+
request['test'] = true
|
380
|
+
request['terminalName'] = 'Test Terminal'
|
381
|
+
request['transaction'] = new_transaction_display_transaction
|
382
|
+
|
383
|
+
response = blockchyp.newTransactionDisplay(request)
|
384
|
+
|
385
|
+
if response['success']
|
386
|
+
puts 'Succeded'
|
387
|
+
end
|
388
|
+
|
389
|
+
def new_transaction_display_transaction
|
390
|
+
val = {}
|
391
|
+
val['subtotal'] = '60.00'
|
392
|
+
val['tax'] = '5.00'
|
393
|
+
val['total'] = '65.00'
|
394
|
+
val['items'] = new_transaction_display_items
|
395
|
+
val
|
396
|
+
end
|
397
|
+
|
398
|
+
def new_transaction_display_items
|
399
|
+
val = []
|
400
|
+
val = val.push(new_transaction_display_item_2)
|
401
|
+
val
|
402
|
+
end
|
403
|
+
|
404
|
+
def new_transaction_display_item_2
|
405
|
+
val = {}
|
406
|
+
val['description'] = 'Leki Trekking Poles'
|
407
|
+
val['price'] = '35.00'
|
408
|
+
val['quantity'] = 2
|
409
|
+
val['extended'] = '70.00'
|
410
|
+
val['discounts'] = new_transaction_display_discounts
|
411
|
+
val
|
412
|
+
end
|
413
|
+
|
414
|
+
def new_transaction_display_discounts
|
415
|
+
val = []
|
416
|
+
val = val.push(new_transaction_display_discount_2)
|
417
|
+
val
|
418
|
+
end
|
419
|
+
|
420
|
+
def new_transaction_display_discount_2
|
421
|
+
val = {}
|
422
|
+
val['description'] = 'memberDiscount'
|
423
|
+
val['amount'] = '10.00'
|
424
|
+
val
|
425
|
+
end
|
426
|
+
|
427
|
+
|
428
|
+
|
429
|
+
|
430
|
+
```
|
431
|
+
|
432
|
+
#### Text Prompt
|
433
|
+
|
434
|
+
Asks the consumer text based question.
|
435
|
+
|
436
|
+
```ruby
|
437
|
+
# frozen_string_literal: true
|
438
|
+
|
439
|
+
require 'blockchyp'
|
440
|
+
|
441
|
+
blockchyp = BlockChyp.new(
|
442
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
443
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
444
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
445
|
+
)
|
446
|
+
|
447
|
+
# setup request object
|
448
|
+
request = {}
|
449
|
+
request['test'] = true
|
450
|
+
request['terminalName'] = 'Test Terminal'
|
451
|
+
request['promptType'] = PromptType::EMAIL
|
452
|
+
|
453
|
+
response = blockchyp.textPrompt(request)
|
454
|
+
|
455
|
+
if response['success']
|
456
|
+
puts 'Success'
|
457
|
+
end
|
458
|
+
|
459
|
+
puts 'response:' + response['response']
|
460
|
+
|
461
|
+
|
462
|
+
```
|
463
|
+
|
464
|
+
#### Boolean Prompt
|
465
|
+
|
466
|
+
Asks the consumer a yes/no question.
|
467
|
+
|
468
|
+
```ruby
|
469
|
+
# frozen_string_literal: true
|
470
|
+
|
471
|
+
require 'blockchyp'
|
472
|
+
|
473
|
+
blockchyp = BlockChyp.new(
|
474
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
475
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
476
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
477
|
+
)
|
478
|
+
|
479
|
+
# setup request object
|
480
|
+
request = {}
|
481
|
+
request['test'] = true
|
482
|
+
request['terminalName'] = 'Test Terminal'
|
483
|
+
request['prompt'] = 'Would you like to become a member?'
|
484
|
+
request['yesCaption'] = 'Yes'
|
485
|
+
request['noCaption'] = 'No'
|
486
|
+
|
487
|
+
response = blockchyp.booleanPrompt(request)
|
488
|
+
|
489
|
+
if response['success']
|
490
|
+
puts 'Success'
|
491
|
+
end
|
492
|
+
|
493
|
+
puts 'response:' + response['response']
|
494
|
+
|
495
|
+
|
496
|
+
```
|
497
|
+
|
498
|
+
#### Display Message
|
499
|
+
|
500
|
+
Displays a short message on the terminal.
|
501
|
+
|
502
|
+
```ruby
|
503
|
+
# frozen_string_literal: true
|
504
|
+
|
505
|
+
require 'blockchyp'
|
506
|
+
|
507
|
+
blockchyp = BlockChyp.new(
|
508
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
509
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
510
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
511
|
+
)
|
512
|
+
|
513
|
+
# setup request object
|
514
|
+
request = {}
|
515
|
+
request['test'] = true
|
516
|
+
request['terminalName'] = 'Test Terminal'
|
517
|
+
request['message'] = 'Thank you for your business.'
|
518
|
+
|
519
|
+
response = blockchyp.message(request)
|
520
|
+
|
521
|
+
if response['success']
|
522
|
+
puts 'Success'
|
523
|
+
end
|
524
|
+
|
525
|
+
|
526
|
+
|
527
|
+
```
|
528
|
+
|
529
|
+
#### Refund
|
530
|
+
|
531
|
+
Executes a refund.
|
532
|
+
|
533
|
+
```ruby
|
534
|
+
# frozen_string_literal: true
|
535
|
+
|
536
|
+
require 'blockchyp'
|
537
|
+
|
538
|
+
blockchyp = BlockChyp.new(
|
539
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
540
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
541
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
542
|
+
)
|
543
|
+
|
544
|
+
# setup request object
|
545
|
+
request = {}
|
546
|
+
request['terminalName'] = 'Test Terminal'
|
547
|
+
request['transactionId'] = '<PREVIOUS TRANSACTION ID>'
|
548
|
+
request['amount'] = '5.00'
|
549
|
+
|
550
|
+
response = blockchyp.refund(request)
|
551
|
+
|
552
|
+
if response['approved']
|
553
|
+
puts 'Approved'
|
554
|
+
end
|
555
|
+
|
556
|
+
|
557
|
+
|
558
|
+
```
|
559
|
+
|
560
|
+
#### Enroll
|
561
|
+
|
562
|
+
Adds a new payment method to the token vault.
|
563
|
+
|
564
|
+
```ruby
|
565
|
+
# frozen_string_literal: true
|
566
|
+
|
567
|
+
require 'blockchyp'
|
568
|
+
|
569
|
+
blockchyp = BlockChyp.new(
|
570
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
571
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
572
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
573
|
+
)
|
574
|
+
|
575
|
+
# setup request object
|
576
|
+
request = {}
|
577
|
+
request['test'] = true
|
578
|
+
request['terminalName'] = 'Test Terminal'
|
579
|
+
|
580
|
+
response = blockchyp.enroll(request)
|
581
|
+
|
582
|
+
if response['approved']
|
583
|
+
puts 'Approved'
|
584
|
+
end
|
585
|
+
|
586
|
+
puts 'token:' + response['token']
|
587
|
+
|
588
|
+
|
589
|
+
```
|
590
|
+
|
591
|
+
#### Gift Card Activation
|
592
|
+
|
593
|
+
Activates or recharges a gift card.
|
594
|
+
|
595
|
+
```ruby
|
596
|
+
# frozen_string_literal: true
|
597
|
+
|
598
|
+
require 'blockchyp'
|
599
|
+
|
600
|
+
blockchyp = BlockChyp.new(
|
601
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
602
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
603
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
604
|
+
)
|
605
|
+
|
606
|
+
# setup request object
|
607
|
+
request = {}
|
608
|
+
request['test'] = true
|
609
|
+
request['terminalName'] = 'Test Terminal'
|
610
|
+
request['amount'] = '50.00'
|
611
|
+
|
612
|
+
response = blockchyp.giftActivate(request)
|
613
|
+
|
614
|
+
if response['approved']
|
615
|
+
puts 'Approved'
|
616
|
+
end
|
617
|
+
|
618
|
+
puts 'amount:' + response['amount']
|
619
|
+
puts 'currentBalance:' + response['currentBalance']
|
620
|
+
puts 'publicKey:' + response['publicKey']
|
621
|
+
|
622
|
+
|
623
|
+
```
|
624
|
+
|
625
|
+
#### Time Out Reversal
|
626
|
+
|
627
|
+
Executes a manual time out reversal.
|
628
|
+
|
629
|
+
We love time out reversals. Don't be afraid to use them whenever a request to a
|
630
|
+
BlockChyp terminal times out. You have up to two minutes to reverse any
|
631
|
+
transaction. The only caveat is that you must assign transactionRef values when
|
632
|
+
you build the original request. Otherwise, we have no real way of knowing which
|
633
|
+
transaction you're trying to reverse because we may not have assigned it an id
|
634
|
+
yet. And if we did assign it an id, you wouldn't know what it is because your
|
635
|
+
request to the terminal timed out before you got a response.
|
636
|
+
|
637
|
+
```ruby
|
638
|
+
# frozen_string_literal: true
|
639
|
+
|
640
|
+
require 'blockchyp'
|
641
|
+
|
642
|
+
blockchyp = BlockChyp.new(
|
643
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
644
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
645
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
646
|
+
)
|
647
|
+
|
648
|
+
# setup request object
|
649
|
+
request = {}
|
650
|
+
request['terminalName'] = 'Test Terminal'
|
651
|
+
request['transactionRef'] = '<LAST TRANSACTION REF>'
|
652
|
+
|
653
|
+
response = blockchyp.reverse(request)
|
654
|
+
|
655
|
+
if response['approved']
|
656
|
+
puts 'Approved'
|
657
|
+
end
|
658
|
+
|
659
|
+
|
660
|
+
|
661
|
+
```
|
662
|
+
|
663
|
+
#### Capture Preauthorization
|
664
|
+
|
665
|
+
Captures a preauthorization.
|
666
|
+
|
667
|
+
```ruby
|
668
|
+
# frozen_string_literal: true
|
669
|
+
|
670
|
+
require 'blockchyp'
|
671
|
+
|
672
|
+
blockchyp = BlockChyp.new(
|
673
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
674
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
675
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
676
|
+
)
|
677
|
+
|
678
|
+
# setup request object
|
679
|
+
request = {}
|
680
|
+
request['test'] = true
|
681
|
+
request['transactionId'] = '<PREAUTH TRANSACTION ID>'
|
682
|
+
|
683
|
+
response = blockchyp.capture(request)
|
684
|
+
|
685
|
+
if response['approved']
|
686
|
+
puts 'Approved'
|
687
|
+
end
|
688
|
+
|
689
|
+
|
690
|
+
|
691
|
+
```
|
692
|
+
|
693
|
+
#### Close Batch
|
694
|
+
|
695
|
+
Closes the current credit card batch.
|
696
|
+
|
697
|
+
```ruby
|
698
|
+
# frozen_string_literal: true
|
699
|
+
|
700
|
+
require 'blockchyp'
|
701
|
+
|
702
|
+
blockchyp = BlockChyp.new(
|
703
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
704
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
705
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
706
|
+
)
|
707
|
+
|
708
|
+
# setup request object
|
709
|
+
request = {}
|
710
|
+
request['test'] = true
|
711
|
+
|
712
|
+
response = blockchyp.closeBatch(request)
|
713
|
+
|
714
|
+
if response['success']
|
715
|
+
puts 'Success'
|
716
|
+
end
|
717
|
+
|
718
|
+
puts 'capturedTotal:' + response['capturedTotal']
|
719
|
+
puts 'openPreauths:' + response['openPreauths']
|
720
|
+
|
721
|
+
|
722
|
+
```
|
723
|
+
|
724
|
+
#### Void Transaction
|
725
|
+
|
726
|
+
Discards a previous preauth transaction.
|
727
|
+
|
728
|
+
```ruby
|
729
|
+
# frozen_string_literal: true
|
730
|
+
|
731
|
+
require 'blockchyp'
|
732
|
+
|
733
|
+
blockchyp = BlockChyp.new(
|
734
|
+
'SPBXTSDAQVFFX5MGQMUMIRINVI',
|
735
|
+
'7BXBTBUPSL3BP7I6Z2CFU6H3WQ',
|
736
|
+
'bcae3708938cb8004ab1278e6c0fcd68f9d815e1c3c86228d028242b147af58e'
|
737
|
+
)
|
738
|
+
|
739
|
+
# setup request object
|
740
|
+
request = {}
|
741
|
+
request['test'] = true
|
742
|
+
request['transactionId'] = '<PREVIOUS TRANSACTION ID>'
|
743
|
+
|
744
|
+
response = blockchyp.void(request)
|
745
|
+
|
746
|
+
if response['approved']
|
747
|
+
puts 'Approved'
|
748
|
+
end
|
749
|
+
|
750
|
+
|
751
|
+
|
752
|
+
```
|
753
|
+
|
754
|
+
## Running Integration Tests
|
755
|
+
|
756
|
+
If you'd like to run the integration tests, create a new file on your system
|
757
|
+
called `sdk-itest-config.json` with the API credentials you'll be using as
|
758
|
+
shown in the example below.
|
759
|
+
|
760
|
+
```
|
761
|
+
{
|
762
|
+
"gatewayHost": "https://api.blockchyp.com",
|
763
|
+
"testGatewayHost": "https://test.blockchyp.com",
|
764
|
+
"apiKey": "PZZNEFK7HFULCB3HTLA7HRQDJU",
|
765
|
+
"bearerToken": "QUJCHIKNXOMSPGQ4QLT2UJX5DI",
|
766
|
+
"signingKey": "f88a72d8bc0965f193abc7006bbffa240663c10e4d1dc3ba2f81e0ca10d359f5"
|
767
|
+
}
|
768
|
+
```
|
769
|
+
|
770
|
+
This file can be located in a few different places, but is usually located
|
771
|
+
at `<USER_HOME>/.config/blockchyp/sdk-itest-config.json`. All BlockChyp SDKs
|
772
|
+
use the same configuration file.
|
773
|
+
|
774
|
+
To run the integration test suite via `make`, type the following command:
|
775
|
+
|
776
|
+
`make integration`
|
777
|
+
|
778
|
+
|
779
|
+
## Running Integration Tests Via Rake or Ruby
|
780
|
+
|
781
|
+
If you'd like to bypass make and run the integration test suite directly,
|
782
|
+
you can run the entire test suite with Rake using the following command:
|
783
|
+
|
784
|
+
`BC_TEST_DELAY=5 rake test`
|
785
|
+
|
786
|
+
You can run individual tests by adding executing them as normal Ruby files.
|
787
|
+
|
788
|
+
`ruby test/terminal_charge_test.rb`
|
789
|
+
|
790
|
+
|
791
|
+
|
792
|
+
|
793
|
+
|
794
|
+
## Contributions
|
795
|
+
|
796
|
+
BlockChyp welcomes contributions from the open source community, but bear in mind
|
797
|
+
that this repository has been generated by our internal SDK Generator tool. If
|
798
|
+
we choose to accept a PR or contribution, your code will be moved into our SDK
|
799
|
+
Generator project, which is a private repository.
|
800
|
+
|
801
|
+
## License
|
802
|
+
|
803
|
+
Copyright BlockChyp, Inc., 2019
|
804
|
+
|
805
|
+
Distributed under the terms of the [MIT] license, blockchyp-ruby is free and open source software.
|
806
|
+
|
807
|
+
[MIT]: https://github.com/blockchyp/blockchyp-ruby/blob/master/LICENSE
|