cardconnect 2.2.0 → 2.4.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 +5 -5
- data/.github/workflows/ruby.yml +35 -0
- data/CHANGELOG.md +13 -0
- data/README.md +29 -5
- data/cardconnect.gemspec +1 -4
- data/lib/cardconnect/connection.rb +3 -3
- data/lib/cardconnect/services/authorization/authorization_response.rb +2 -6
- data/lib/cardconnect/services/bin/bin.rb +15 -0
- data/lib/cardconnect/services/bin/bin_request.rb +43 -0
- data/lib/cardconnect/services/bin/bin_response.rb +36 -0
- data/lib/cardconnect/services/capture/capture_request.rb +1 -5
- data/lib/cardconnect/services/capture/capture_response.rb +9 -11
- data/lib/cardconnect/services/inquire/inquire_response.rb +13 -14
- data/lib/cardconnect/services/profile/profile.rb +1 -1
- data/lib/cardconnect/services/profile/profile_delete_response.rb +1 -5
- data/lib/cardconnect/services/profile/profile_get_response.rb +6 -8
- data/lib/cardconnect/services/profile/profile_put_response.rb +1 -5
- data/lib/cardconnect/services/refund/refund_response.rb +1 -5
- data/lib/cardconnect/services/settlement_status/settlement_status_response.rb +1 -5
- data/lib/cardconnect/services/void/void_response.rb +1 -5
- data/lib/cardconnect/utils.rb +3 -6
- data/lib/cardconnect/version.rb +1 -1
- data/lib/cardconnect.rb +5 -1
- data/test/api_request_stubs.rb +7 -0
- data/test/api_response_stubs.rb +40 -6
- data/test/cardconnect/configuration_test.rb +5 -5
- data/test/cardconnect/connection_test.rb +6 -6
- data/test/cardconnect/services/authorization/authorization_request_test.rb +35 -35
- data/test/cardconnect/services/authorization/authorization_response_test.rb +19 -19
- data/test/cardconnect/services/authorization/authorization_test.rb +11 -11
- data/test/cardconnect/services/bin/bin_request_test.rb +45 -0
- data/test/cardconnect/services/bin/bin_response_test.rb +67 -0
- data/test/cardconnect/services/bin/bin_test.rb +56 -0
- data/test/cardconnect/services/capture/capture_request_test.rb +11 -11
- data/test/cardconnect/services/capture/capture_response_test.rb +6 -6
- data/test/cardconnect/services/capture/capture_test.rb +9 -9
- data/test/cardconnect/services/inquire/inquire_request_test.rb +6 -6
- data/test/cardconnect/services/inquire/inquire_response_test.rb +35 -11
- data/test/cardconnect/services/inquire/inquire_test.rb +9 -9
- data/test/cardconnect/services/profile/profile_delete_request_test.rb +7 -7
- data/test/cardconnect/services/profile/profile_delete_response_test.rb +11 -11
- data/test/cardconnect/services/profile/profile_get_request_test.rb +7 -7
- data/test/cardconnect/services/profile/profile_get_response_test.rb +34 -26
- data/test/cardconnect/services/profile/profile_put_request_test.rb +23 -23
- data/test/cardconnect/services/profile/profile_put_response_test.rb +28 -28
- data/test/cardconnect/services/profile/profile_test.rb +27 -27
- data/test/cardconnect/services/refund/refund_request_test.rb +7 -7
- data/test/cardconnect/services/refund/refund_response_test.rb +13 -13
- data/test/cardconnect/services/refund/refund_test.rb +9 -9
- data/test/cardconnect/services/settlement_status/settlement_status_request_test.rb +12 -12
- data/test/cardconnect/services/settlement_status/settlement_status_response_test.rb +8 -8
- data/test/cardconnect/services/settlement_status/settlement_status_test.rb +9 -9
- data/test/cardconnect/services/void/void_request_test.rb +7 -7
- data/test/cardconnect/services/void/void_response_test.rb +14 -14
- data/test/cardconnect/services/void/void_test.rb +9 -9
- data/test/cardconnect_test.rb +2 -2
- data/test/test_helper.rb +3 -1
- metadata +18 -38
- data/.travis.yml +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 392819d44d5b57e895e919ff4d8f09be8b2a03301100f944fd79b3b5cb321a52
|
4
|
+
data.tar.gz: 5d972cde73c7482d8de49279a68fc00429058244f1a6b960e823a130c1b437db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48c09c70ca14beffd6bc7e4d8b6999b4ad9b20bc4b04c9137908c514af52950f717e9cd02021187bd79831594a449b01ea734db7b2f37e67e124e4f9a76eb6b7
|
7
|
+
data.tar.gz: 0c5ce20dccadabad622ade2c9b46911672187b0734292e9470fffd4ae427138bc4561521d9bfb41656581307164c6b34057b6232a77dc62ac0299841d3b8fd0d
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Ruby
|
9
|
+
|
10
|
+
on:
|
11
|
+
push:
|
12
|
+
branches: [ "master" ]
|
13
|
+
pull_request:
|
14
|
+
branches: [ "master" ]
|
15
|
+
|
16
|
+
permissions:
|
17
|
+
contents: read
|
18
|
+
|
19
|
+
jobs:
|
20
|
+
test:
|
21
|
+
|
22
|
+
runs-on: ubuntu-latest
|
23
|
+
strategy:
|
24
|
+
matrix:
|
25
|
+
ruby-version: ['3.0', '3.1', '3.2']
|
26
|
+
|
27
|
+
steps:
|
28
|
+
- uses: actions/checkout@v3
|
29
|
+
- name: Set up Ruby
|
30
|
+
uses: ruby/setup-ruby@v1
|
31
|
+
with:
|
32
|
+
ruby-version: ${{ matrix.ruby-version }}
|
33
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
34
|
+
- name: Run tests
|
35
|
+
run: bundle exec rake
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## v2.4.0
|
4
|
+
|
5
|
+
* Upgrades `faraday` and `faraday_middleware` dependency versions to use ones that works with ruby 3.0.
|
6
|
+
|
7
|
+
## v2.3.0
|
8
|
+
|
9
|
+
* Added the following fields to response objects (@shivashankar-ror):
|
10
|
+
- CaptureResponse: `:respproc, :resptext, :commcard, :respstat, :respcode, :batchid, :token`
|
11
|
+
- InquireResponse: `:capturedate, :batchid, :token, :authdate, :lastfour, :name, :currency, :settledate`
|
12
|
+
- ProfileGetResponse: `:gsacard, :auoptout`
|
13
|
+
|
14
|
+
* Added support for Bin Service (@shivashankar-ror)
|
15
|
+
|
3
16
|
## v2.2.0
|
4
17
|
|
5
18
|
* Add `token` field to Profile Service for create/update responses since this field can potentially be included in the response if a token hadn't already been created for that particular profile. (@mauriciozaffari)
|
data/README.md
CHANGED
@@ -4,7 +4,6 @@ CardConnect API Ruby Client
|
|
4
4
|
|
5
5
|
[](http://badge.fury.io/rb/cardconnect)
|
6
6
|
[](https://codeclimate.com/github/mobilecause/cardconnect)
|
7
|
-
[](https://travis-ci.org/mobilecause/cardconnect)
|
8
7
|
|
9
8
|
## Installation
|
10
9
|
|
@@ -133,10 +132,39 @@ service.build_request(params)
|
|
133
132
|
response = service.submit
|
134
133
|
```
|
135
134
|
|
135
|
+
### Bin Service
|
136
|
+
|
137
|
+
CardConnect documentation for this service can be found here: https://developer.cardconnect.com/cardconnect-api#bin-service
|
138
|
+
|
139
|
+
Example:
|
140
|
+
|
141
|
+
```ruby
|
142
|
+
service = CardConnect::Service::Bin.new
|
143
|
+
service.build_request(params)
|
144
|
+
response = service.submit
|
145
|
+
```
|
146
|
+
|
136
147
|
### Response Codes
|
137
148
|
|
138
149
|
http://developer.cardconnect.com/cardconnect-api/#response-codes
|
139
150
|
|
151
|
+
## Run-time logins
|
152
|
+
Typically, you want to use `config/initializers/cardconnect.rb` to set your API username and password details in a secure way, as detailed above. If you need to connect to multiple CardConnect accounts, you can specify the username/password immediately before processing a transaction.
|
153
|
+
|
154
|
+
Example:
|
155
|
+
```
|
156
|
+
config = CardConnect::Configuration.new
|
157
|
+
config.api_username = "username"
|
158
|
+
config.api_password = "password123"
|
159
|
+
config.endpoint = "https://url.com"
|
160
|
+
|
161
|
+
connection = CardConnect::Connection.new(config).connection
|
162
|
+
service = CardConnect::Service::Authorize.new(connection)
|
163
|
+
service.build_request(params)
|
164
|
+
response = service.submit
|
165
|
+
```
|
166
|
+
Username, password, and/or endpoint can be defined either in the CardConnect initializer or overridden at runtime.
|
167
|
+
|
140
168
|
## To Do:
|
141
169
|
|
142
170
|
#### Authorization Service
|
@@ -165,10 +193,6 @@ http://developer.cardconnect.com/cardconnect-api/#response-codes
|
|
165
193
|
|
166
194
|
* Close Batch Service needs to be implemented
|
167
195
|
|
168
|
-
#### Bin Service
|
169
|
-
|
170
|
-
* Bin Service needs to be implemented
|
171
|
-
|
172
196
|
## Contributing
|
173
197
|
|
174
198
|
1. Fork it ( https://github.com/mobilecause/cardconnect/fork )
|
data/cardconnect.gemspec
CHANGED
@@ -18,8 +18,5 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.
|
22
|
-
|
23
|
-
spec.add_dependency 'faraday', '~> 0.12.1'
|
24
|
-
spec.add_dependency 'faraday_middleware', '~> 0.11.0.1'
|
21
|
+
spec.add_dependency 'faraday', '~> 2.7.4'
|
25
22
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'faraday'
|
2
|
-
require 'faraday_middleware'
|
3
2
|
|
4
3
|
module CardConnect
|
5
4
|
class Connection
|
@@ -7,9 +6,10 @@ module CardConnect
|
|
7
6
|
@config = config
|
8
7
|
end
|
9
8
|
|
10
|
-
def connection
|
9
|
+
def connection(config = nil)
|
10
|
+
config ||= @config
|
11
11
|
@connection ||= Faraday.new(faraday_options) do |f|
|
12
|
-
f.request :
|
12
|
+
f.request :authorization, :basic, config.api_username, config.api_password
|
13
13
|
f.request :json
|
14
14
|
|
15
15
|
f.response :json, content_type: /\bjson$/
|
@@ -3,7 +3,7 @@ module CardConnect
|
|
3
3
|
class AuthorizationResponse
|
4
4
|
include Utils
|
5
5
|
|
6
|
-
FIELDS = [:respstat, :retref, :account, :token, :amount, :merchid, :respcode,
|
6
|
+
FIELDS = [:respstat, :retref, :account, :expiry, :token, :amount, :merchid, :respcode,
|
7
7
|
:resptext, :respproc, :avsresp, :cvvresp, :authcode, :commcard, :profileid, :acctid].freeze
|
8
8
|
|
9
9
|
attr_accessor(*FIELDS)
|
@@ -24,11 +24,7 @@ module CardConnect
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def body
|
27
|
-
|
28
|
-
FIELDS.each do |attr|
|
29
|
-
body.merge!(attr => send(attr))
|
30
|
-
end
|
31
|
-
body
|
27
|
+
FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
|
32
28
|
end
|
33
29
|
|
34
30
|
private
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module CardConnect
|
2
|
+
module Service
|
3
|
+
class Bin < ServiceEndpoint
|
4
|
+
# Initializes a Bin Service
|
5
|
+
#
|
6
|
+
# @param connection [CardConnect::Connection]
|
7
|
+
# @return CardConnect::Service::Bin
|
8
|
+
def initialize(connection = CardConnect.connection)
|
9
|
+
super(connection)
|
10
|
+
@resource_name = '/bin'
|
11
|
+
@rest_method = 'get'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module CardConnect
|
2
|
+
module Service
|
3
|
+
class BinRequest
|
4
|
+
include Utils
|
5
|
+
|
6
|
+
REQUIRED_FIELDS = [:token, :merchid].freeze
|
7
|
+
|
8
|
+
FIELDS = REQUIRED_FIELDS
|
9
|
+
|
10
|
+
attr_accessor(*FIELDS)
|
11
|
+
attr_reader :errors
|
12
|
+
|
13
|
+
# Initializes a new BinGetRequest
|
14
|
+
#
|
15
|
+
# @param attrs [Hash]
|
16
|
+
# @return CardConnect::BinGetRequest
|
17
|
+
def initialize(attrs = {})
|
18
|
+
@errors = []
|
19
|
+
set_attributes(attrs, FIELDS)
|
20
|
+
validate_required_fields
|
21
|
+
end
|
22
|
+
|
23
|
+
# Indicates that the request is valid once it is built.
|
24
|
+
def valid?
|
25
|
+
errors.empty?
|
26
|
+
end
|
27
|
+
|
28
|
+
# Builds the request payload
|
29
|
+
def payload
|
30
|
+
"/#{merchid}/#{token}"
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def validate_required_fields
|
36
|
+
REQUIRED_FIELDS.each do |field|
|
37
|
+
value = send(field)
|
38
|
+
value.nil? || value.empty? ? errors.push("#{field.capitalize} is missing") : next
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module CardConnect
|
2
|
+
module Service
|
3
|
+
class BinResponse
|
4
|
+
include Utils
|
5
|
+
|
6
|
+
FIELDS = [
|
7
|
+
:country, :cardusestring, :gsa, :product,
|
8
|
+
:corporate, :fsa, :subtype, :purchase, :prepaid, :binlo,
|
9
|
+
:issuer, :binhi
|
10
|
+
].freeze
|
11
|
+
|
12
|
+
# Error messages
|
13
|
+
BIN_INFO_NOT_FOUND = 'No bin information found'
|
14
|
+
TOKEN_NOT_FOUND = 'Token not found'
|
15
|
+
BIN_NOT_ENABLED = 'Bin feature not enabled for merchant'
|
16
|
+
|
17
|
+
attr_accessor(*FIELDS)
|
18
|
+
attr_reader :errors
|
19
|
+
|
20
|
+
def initialize(response)
|
21
|
+
|
22
|
+
set_attributes(response, FIELDS)
|
23
|
+
# raise [response, self].inspect
|
24
|
+
@errors = []
|
25
|
+
end
|
26
|
+
|
27
|
+
def success?
|
28
|
+
@errors.empty?
|
29
|
+
end
|
30
|
+
|
31
|
+
def body
|
32
|
+
FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -29,11 +29,7 @@ module CardConnect
|
|
29
29
|
|
30
30
|
# Builds the request payload
|
31
31
|
def payload
|
32
|
-
|
33
|
-
FIELDS.each do |field|
|
34
|
-
payload.merge!(field => send(field))
|
35
|
-
end
|
36
|
-
payload
|
32
|
+
FIELDS.collect{|field| {field => send(field)} }.reduce({}, :merge)
|
37
33
|
end
|
38
34
|
|
39
35
|
private
|
@@ -3,15 +3,17 @@ module CardConnect
|
|
3
3
|
class CaptureResponse
|
4
4
|
include Utils
|
5
5
|
|
6
|
-
FIELDS = [:merchid, :account, :amount, :retref, :setlstat
|
6
|
+
FIELDS = [:merchid, :account, :amount, :retref, :setlstat, :respproc,
|
7
|
+
:resptext, :commcard, :respstat, :respcode,
|
8
|
+
:batchid, :token].freeze
|
7
9
|
|
8
10
|
# Settlement Statuses
|
9
11
|
TXN_NOT_FOUND = 'Txn not found' # The Retref was not found
|
10
|
-
AUTHORIZED
|
11
|
-
QUEUED
|
12
|
-
ZERO_AMOUNT
|
13
|
-
ACCEPTED
|
14
|
-
REJECTED
|
12
|
+
AUTHORIZED = 'Authorized' # Auth only, not captured
|
13
|
+
QUEUED = 'Queued for Capture' # Queued for the Processor
|
14
|
+
ZERO_AMOUNT = 'Zero Amount' # Capture (and Auth) were Voided
|
15
|
+
ACCEPTED = 'Accepted' # Accepted by the Processor
|
16
|
+
REJECTED = 'Rejected' # Rejected by the Processor
|
15
17
|
|
16
18
|
attr_accessor(*FIELDS)
|
17
19
|
|
@@ -20,11 +22,7 @@ module CardConnect
|
|
20
22
|
end
|
21
23
|
|
22
24
|
def body
|
23
|
-
|
24
|
-
FIELDS.each do |attr|
|
25
|
-
body.merge!(attr => send(attr))
|
26
|
-
end
|
27
|
-
body
|
25
|
+
FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
|
28
26
|
end
|
29
27
|
end
|
30
28
|
end
|
@@ -3,17 +3,20 @@ module CardConnect
|
|
3
3
|
class InquireResponse
|
4
4
|
include Utils
|
5
5
|
|
6
|
-
FIELDS = [
|
7
|
-
|
8
|
-
|
6
|
+
FIELDS = [
|
7
|
+
:merchid, :account, :amount, :currency, :retref, :respcode,
|
8
|
+
:respproc, :respstat, :resptext, :setlstat, :capturedate, :batchid,
|
9
|
+
:token, :authdate, :lastfour, :name, :settledate, :expiry
|
10
|
+
].freeze
|
11
|
+
|
9
12
|
# Settlement Status
|
10
|
-
AUTHORIZED
|
11
|
-
QUEUED
|
12
|
-
ACCEPTED
|
13
|
-
REJECTED
|
13
|
+
AUTHORIZED = 'Authorized' # Txn has not been Captured
|
14
|
+
QUEUED = 'Queued for Capture' # Txn is in flight to Clearing House
|
15
|
+
ACCEPTED = 'Accepted' # Txn was accepted for Settlement
|
16
|
+
REJECTED = 'Rejected' # Txn was not accepted
|
14
17
|
ZERO_AMOUNT = 'Zero Amount' # Txn was $0
|
15
|
-
VOIDED
|
16
|
-
DECLINED
|
18
|
+
VOIDED = 'Voided' # Txn has been voided
|
19
|
+
DECLINED = 'Declined' # Txn had an error
|
17
20
|
|
18
21
|
attr_accessor(*FIELDS)
|
19
22
|
attr_reader :errors
|
@@ -28,11 +31,7 @@ module CardConnect
|
|
28
31
|
end
|
29
32
|
|
30
33
|
def body
|
31
|
-
|
32
|
-
FIELDS.each do |attr|
|
33
|
-
body.merge!(attr => send(attr))
|
34
|
-
end
|
35
|
-
body
|
34
|
+
FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
|
36
35
|
end
|
37
36
|
end
|
38
37
|
end
|
@@ -5,7 +5,7 @@ module CardConnect
|
|
5
5
|
#
|
6
6
|
# @param connection [CardConnect::Connection]
|
7
7
|
# @return CardConnect::Service::Profile
|
8
|
-
def initialize(rest_method
|
8
|
+
def initialize(rest_method, connection = CardConnect.connection)
|
9
9
|
super(connection)
|
10
10
|
@resource_name = '/profile'
|
11
11
|
@rest_method = rest_method
|
@@ -3,13 +3,15 @@ module CardConnect
|
|
3
3
|
class ProfileGetResponse
|
4
4
|
include Utils
|
5
5
|
|
6
|
-
FIELDS = [:profileid, :acctid, :respstat, :account,
|
7
|
-
|
6
|
+
FIELDS = [:gsacard, :profileid, :acctid, :respstat, :account,
|
7
|
+
:respcode, :resptext, :respproc, :accttype, :expiry,
|
8
|
+
:name, :address, :city, :region, :country, :phone, :postal,
|
9
|
+
:ssnl4, :email, :defaultacct, :license, :token, :auoptout]
|
8
10
|
|
9
11
|
attr_accessor(*FIELDS)
|
10
12
|
attr_reader :errors
|
11
13
|
|
12
|
-
STATUS_APPROVED
|
14
|
+
STATUS_APPROVED = 'A'
|
13
15
|
STATUS_NOT_FOUND = 'C'
|
14
16
|
|
15
17
|
def initialize(response)
|
@@ -23,11 +25,7 @@ module CardConnect
|
|
23
25
|
end
|
24
26
|
|
25
27
|
def body
|
26
|
-
|
27
|
-
FIELDS.each do |attr|
|
28
|
-
body.merge!({attr => send(attr)})
|
29
|
-
end
|
30
|
-
body
|
28
|
+
FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
|
31
29
|
end
|
32
30
|
|
33
31
|
private
|
data/lib/cardconnect/utils.rb
CHANGED
@@ -4,18 +4,15 @@ module CardConnect
|
|
4
4
|
return if attributes.empty?
|
5
5
|
attributes = attributes[0] if attributes.is_a? Array
|
6
6
|
attributes = symbolize_keys(attributes)
|
7
|
+
|
7
8
|
fields.each do |attr|
|
8
|
-
next
|
9
|
+
next if attributes[attr].nil?
|
9
10
|
send("#{attr}=", attributes[attr])
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
13
14
|
def symbolize_keys(hash)
|
14
|
-
|
15
|
-
hash.each do |k, v|
|
16
|
-
symbolized_hash[k.to_sym] = v
|
17
|
-
end
|
18
|
-
symbolized_hash
|
15
|
+
hash.collect{|key, value| {key.to_sym => value} }.reduce({}, :merge)
|
19
16
|
end
|
20
17
|
end
|
21
18
|
end
|
data/lib/cardconnect/version.rb
CHANGED
data/lib/cardconnect.rb
CHANGED
@@ -23,6 +23,8 @@ require 'cardconnect/services/profile/profile_get_request'
|
|
23
23
|
require 'cardconnect/services/profile/profile_get_response'
|
24
24
|
require 'cardconnect/services/profile/profile_delete_request'
|
25
25
|
require 'cardconnect/services/profile/profile_delete_response'
|
26
|
+
require 'cardconnect/services/bin/bin_request'
|
27
|
+
require 'cardconnect/services/bin/bin_response'
|
26
28
|
|
27
29
|
require 'cardconnect/services/service_endpoint'
|
28
30
|
require 'cardconnect/services/authorization/authorization'
|
@@ -32,6 +34,8 @@ require 'cardconnect/services/inquire/inquire'
|
|
32
34
|
require 'cardconnect/services/refund/refund'
|
33
35
|
require 'cardconnect/services/void/void'
|
34
36
|
require 'cardconnect/services/profile/profile'
|
37
|
+
require 'cardconnect/services/bin/bin'
|
38
|
+
|
35
39
|
|
36
40
|
module CardConnect
|
37
41
|
class << self
|
@@ -47,4 +51,4 @@ module CardConnect
|
|
47
51
|
@connection ||= Connection.new.connection
|
48
52
|
end
|
49
53
|
end
|
50
|
-
end
|
54
|
+
end
|
data/test/api_request_stubs.rb
CHANGED
data/test/api_response_stubs.rb
CHANGED
@@ -13,6 +13,7 @@ def valid_auth_response # rubocop:disable Metrics/MethodLength
|
|
13
13
|
'authcode' => '046221',
|
14
14
|
'respproc' => 'FNOR',
|
15
15
|
'commcard' => 'N',
|
16
|
+
'expiry' => '04/32',
|
16
17
|
'profileid' => '12345678',
|
17
18
|
'acctid' => nil
|
18
19
|
}
|
@@ -24,22 +25,36 @@ def valid_capture_response
|
|
24
25
|
'setlstat' => 'Pending',
|
25
26
|
'retref' => '288002073633',
|
26
27
|
'merchid' => '000000927996',
|
27
|
-
'account' => '41XXXXXXXXXX4113'
|
28
|
+
'account' => '41XXXXXXXXXX4113',
|
29
|
+
'respproc' => 'FNOR',
|
30
|
+
'resptext' => 'Approval',
|
31
|
+
'respstat' => 'A',
|
32
|
+
'respcode' => '00',
|
33
|
+
'batchid' => '1900941569',
|
34
|
+
'token' => '9418594164541111',
|
35
|
+
'commcard' => ' C '
|
28
36
|
}
|
29
37
|
end
|
30
|
-
|
31
38
|
def valid_inquire_response # rubocop:disable Metrics/MethodLength
|
32
39
|
{
|
33
40
|
'amount' => '596.00',
|
34
41
|
'resptext' => 'Approval',
|
35
|
-
'setlstat' => '
|
42
|
+
'setlstat' => 'Accepted',
|
36
43
|
'respcode' => '00',
|
37
44
|
'retref' => '288015190411',
|
38
45
|
'merchid' => '000000927996',
|
39
|
-
'account' => '
|
46
|
+
'account' => '9418594164541111',
|
40
47
|
'respproc' => 'FNOR',
|
41
48
|
'respstat' => 'A',
|
42
|
-
'currency' => 'USD'
|
49
|
+
'currency' => 'USD',
|
50
|
+
'token' => '9418594164541111',
|
51
|
+
'expiry' => '04/32',
|
52
|
+
'authdate' => '20180410',
|
53
|
+
'lastfour' => '1111',
|
54
|
+
'name' => 'TOM JONES',
|
55
|
+
'capturedate' => '20180326065748',
|
56
|
+
'batchid' => '1900941569',
|
57
|
+
'settledate' => '20180327143721'
|
43
58
|
}
|
44
59
|
end
|
45
60
|
|
@@ -108,7 +123,9 @@ def valid_profile_get_response #rubocop:disable Metrics/MethodLength
|
|
108
123
|
"city" => "ANYTOWN",
|
109
124
|
"expiry" => "0214",
|
110
125
|
"profileid" => "12345678901234567890",
|
111
|
-
"acctid" => "1"
|
126
|
+
"acctid" => "1",
|
127
|
+
"gsacard" => "N",
|
128
|
+
"auoptout" => "N"
|
112
129
|
}
|
113
130
|
end
|
114
131
|
|
@@ -150,3 +167,20 @@ def valid_profile_put_response #rubocop:disable Metrics/MethodLength
|
|
150
167
|
"gsacard" => "N"
|
151
168
|
}
|
152
169
|
end
|
170
|
+
|
171
|
+
def valid_bin_response
|
172
|
+
{
|
173
|
+
"country" => "USA",
|
174
|
+
"product" => "V",
|
175
|
+
"cardusestring" => "True credit",
|
176
|
+
"gsa" => false,
|
177
|
+
"corporate" => true,
|
178
|
+
"fsa" => false,
|
179
|
+
"subtype" => "Visa Corporate T&E",
|
180
|
+
"purchase" => false,
|
181
|
+
"prepaid" => false,
|
182
|
+
"binlo" => "478823XXX",
|
183
|
+
"issuer" => "JPMorgan Chase Bank N.A. - Commercial",
|
184
|
+
"binhi" => "478825XXX"
|
185
|
+
}
|
186
|
+
end
|
@@ -10,22 +10,22 @@ describe CardConnect::Configuration do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'must respond to merchant id' do
|
13
|
-
@config.must_respond_to :merchant_id
|
13
|
+
_(@config).must_respond_to :merchant_id
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'must respond to api username' do
|
17
|
-
@config.must_respond_to :api_username
|
17
|
+
_(@config).must_respond_to :api_username
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'must respond to api password' do
|
21
|
-
@config.must_respond_to :api_password
|
21
|
+
_(@config).must_respond_to :api_password
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'must respond to endpoint' do
|
25
|
-
@config.must_respond_to :endpoint
|
25
|
+
_(@config).must_respond_to :endpoint
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'must respond to connection_options' do
|
29
|
-
@config.must_respond_to :connection_options
|
29
|
+
_(@config).must_respond_to :connection_options
|
30
30
|
end
|
31
31
|
end
|