paytrace 0.0.2 → 0.0.3
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 +4 -4
- data/.gitignore +3 -0
- data/LICENSE.txt +1 -1
- data/README.md +105 -4
- data/lib/paytrace.rb +1 -0
- data/lib/paytrace/address.rb +16 -0
- data/lib/paytrace/api/fields.rb +35 -3
- data/lib/paytrace/api/gateway.rb +5 -6
- data/lib/paytrace/api/request.rb +53 -3
- data/lib/paytrace/configuration.rb +11 -1
- data/lib/paytrace/credit_card.rb +5 -2
- data/lib/paytrace/customer.rb +10 -0
- data/lib/paytrace/transaction.rb +44 -7
- data/lib/paytrace/version.rb +1 -1
- data/paytrace.gemspec +3 -3
- data/test/paytrace/api/gateway_spec.rb +10 -0
- data/test/paytrace/api/request_spec.rb +95 -4
- data/test/paytrace/configuration_spec.rb +15 -0
- data/test/paytrace/credit_card_spec.rb +12 -0
- data/test/paytrace/transaction_spec.rb +107 -21
- metadata +16 -17
- data/.vagrant/machines/default/virtualbox/action_provision +0 -1
- data/.vagrant/machines/default/virtualbox/action_set_name +0 -1
- data/.vagrant/machines/default/virtualbox/id +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c945b008a295eb178fcdf4eb6238a1e19d0540e
|
4
|
+
data.tar.gz: 8283c88dd500af963b802e35cc124095afdca21f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 911f0086d4990b0948f0b062f75ed26e1722abae5f5fa71ee9a5bec55ca0103c870e6d162aa7162278d0adc3143f025d8e48f6a8dfa83f3ab128bc814035c365
|
7
|
+
data.tar.gz: f783078d6185ed345a6936a35c0469df3a7667af3b7c230184d0c0e80c7b8bf54af0cd82a60241761802f69a91b168b7872646ad86a506c9a2a942d63418de5e
|
data/.gitignore
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
-
#
|
1
|
+
# PayTrace Ruby SDK
|
2
2
|
|
3
3
|

|
4
4
|
|
5
|
+
*This SDK is actively under development but should still be considered in an alpha
|
6
|
+
state. It does not provide all the access we are planning to our API at this time.
|
7
|
+
Please feel free to experiment with it and we will be regularly pushing out new
|
8
|
+
updates with increased functionality over the coming weeks*
|
9
|
+
|
5
10
|
This gem integrates with the PayTrace API. It provides functionality to the
|
6
11
|
publicly available functionality including:
|
7
12
|
|
@@ -14,7 +19,7 @@ publicly available functionality including:
|
|
14
19
|
|
15
20
|
Add this line to your application's Gemfile:
|
16
21
|
|
17
|
-
gem '
|
22
|
+
gem 'paytrace'
|
18
23
|
|
19
24
|
And then execute:
|
20
25
|
|
@@ -22,11 +27,107 @@ And then execute:
|
|
22
27
|
|
23
28
|
Or install it yourself as:
|
24
29
|
|
25
|
-
$ gem install
|
30
|
+
$ gem install paytrace
|
26
31
|
|
27
32
|
## Usage
|
28
33
|
|
29
|
-
|
34
|
+
### Configuring your account
|
35
|
+
|
36
|
+
You can set this up as a Rails initializer or during any other common configuration
|
37
|
+
of your application.
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
PayTrace.configure do |config|
|
41
|
+
config.user_name = "my_user_name"
|
42
|
+
config.password = "password"
|
43
|
+
end
|
44
|
+
```
|
45
|
+
|
46
|
+
### Transactions
|
47
|
+
|
48
|
+
Transactions can be processed utilizing class methods on the PayTrace::Transaction
|
49
|
+
class.
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
transaction = Transaction.sale(
|
53
|
+
{amount: "1.00",
|
54
|
+
credit_card: {
|
55
|
+
card_number: "1111222233334444",
|
56
|
+
expiration_year: 14,
|
57
|
+
expiration_month: 3
|
58
|
+
}
|
59
|
+
}
|
60
|
+
)
|
61
|
+
|
62
|
+
#
|
63
|
+
## Response information is available on the transaction
|
64
|
+
#
|
65
|
+
puts transaction.response_code # 101. Your transaction was successfully approved.
|
66
|
+
|
67
|
+
#
|
68
|
+
## All values returned are accessible through the attached response property
|
69
|
+
#
|
70
|
+
transaction.response.each do |key, value|
|
71
|
+
puts key # e.g. APPCODE
|
72
|
+
puts value # TAS671
|
73
|
+
end
|
74
|
+
```
|
75
|
+
|
76
|
+
### Customers
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
# running a transaction for a customer
|
80
|
+
transaction = Transaction.sale({amount: "1.00",customer_id: "my_customer_id"})
|
81
|
+
|
82
|
+
```
|
83
|
+
### Some Optional Fields
|
84
|
+
```ruby
|
85
|
+
#Adding Optional Fields
|
86
|
+
|
87
|
+
transaction = Transaction.Sale(
|
88
|
+
{
|
89
|
+
amount: "1.00",
|
90
|
+
credit_card: {
|
91
|
+
card_number: "1111222233334444",
|
92
|
+
expiration_year: 14,
|
93
|
+
expiration_month: 3
|
94
|
+
},
|
95
|
+
email:"me@example.com",
|
96
|
+
description:"This is a test",
|
97
|
+
tax_amount:".50",
|
98
|
+
discretionary_data:"This is some data that is discretionary"
|
99
|
+
}
|
100
|
+
)
|
101
|
+
|
102
|
+
```
|
103
|
+
|
104
|
+
### Billing and Shipping Address
|
105
|
+
```ruby
|
106
|
+
transaction = Transaction.Sale(
|
107
|
+
{amount: "1.00",
|
108
|
+
credit_card: {
|
109
|
+
card_number: "1111222233334444",
|
110
|
+
expiration_year: 14,
|
111
|
+
expiration_month: 3
|
112
|
+
},
|
113
|
+
billing_address:{
|
114
|
+
name:"Jane Doe",
|
115
|
+
street:"1234 happy st.",
|
116
|
+
street2:"apt#2",
|
117
|
+
city:"Seattle",
|
118
|
+
state:"WA",
|
119
|
+
country: "US",
|
120
|
+
postal_code:"98107"
|
121
|
+
},
|
122
|
+
shipping_address: {
|
123
|
+
#Same as billing above.
|
124
|
+
}
|
125
|
+
}
|
126
|
+
)
|
127
|
+
|
128
|
+
```
|
129
|
+
|
130
|
+
|
30
131
|
|
31
132
|
## Contributing
|
32
133
|
|
data/lib/paytrace.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
module PayTrace
|
2
|
+
class Address
|
3
|
+
attr :name, :street,:street2,:city,:state, :country,:region,:postal_code
|
4
|
+
|
5
|
+
def initialize(options={})
|
6
|
+
@name = options[:name]
|
7
|
+
@street = options[:street]
|
8
|
+
@street2 = options[:street2]
|
9
|
+
@city = options[:city]
|
10
|
+
@state = options[:state]
|
11
|
+
@region = options[:region]
|
12
|
+
@country = options[:country]
|
13
|
+
@postal_code = options[:postal_code ]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/paytrace/api/fields.rb
CHANGED
@@ -3,14 +3,46 @@ module PayTrace
|
|
3
3
|
def self.fields
|
4
4
|
{
|
5
5
|
amount: "AMOUNT",
|
6
|
-
card_number: "CC",
|
7
|
-
expiration_year: "EXPYR",
|
8
|
-
expiration_month: "EXPMNTH",
|
9
6
|
method: "METHOD",
|
10
7
|
password: "PSWD",
|
11
8
|
terms: "TERMS",
|
12
9
|
transaction_type: "TRANXTYPE",
|
13
10
|
user_name: "UN",
|
11
|
+
email: "EMAIL",
|
12
|
+
description: "DESCRIPTION",
|
13
|
+
tax_amount: "TAX",
|
14
|
+
return_clr: "RETURNCLR",
|
15
|
+
enable_partial_authentication: "ENABLEPARTIALAUTH",
|
16
|
+
discretionary_data: "DISCRETIONARY DATA",
|
17
|
+
custom_dba: "CUSTOMDBA",
|
18
|
+
invoice:"INVOICE",
|
19
|
+
transaction_id:"TRANXID",
|
20
|
+
#credit card
|
21
|
+
card_number: "CC",
|
22
|
+
expiration_year: "EXPYR",
|
23
|
+
expiration_month: "EXPMNTH",
|
24
|
+
csc: "CSC",
|
25
|
+
swipe:"SWIPE",
|
26
|
+
#billing address
|
27
|
+
billing_name: "BNAME",
|
28
|
+
billing_address: "BADDRESS",
|
29
|
+
billing_address2:"BADDRESS2",
|
30
|
+
billing_city: "BCITY",
|
31
|
+
billing_state: "BSTATE",
|
32
|
+
billing_postal_code: "BZIP",
|
33
|
+
billing_country: "BCOUNTRY",
|
34
|
+
#shipping_address
|
35
|
+
shipping_name: "SNAME",
|
36
|
+
shipping_address: "SADDRESS",
|
37
|
+
shipping_address2:"SADDRESS2",
|
38
|
+
shipping_city: "SCITY",
|
39
|
+
shipping_state: "SSTATE",
|
40
|
+
shipping_postal_code: "SZIP",
|
41
|
+
shipping_region: "SCOUNTY",
|
42
|
+
shipping_country: "SCOUNTRY",
|
43
|
+
#customer
|
44
|
+
customer_id: "CUSTID",
|
45
|
+
customer_reference_id:"CUSTREF",
|
14
46
|
}
|
15
47
|
end
|
16
48
|
end
|
data/lib/paytrace/api/gateway.rb
CHANGED
@@ -4,16 +4,15 @@ require 'paytrace/api/response'
|
|
4
4
|
module PayTrace
|
5
5
|
module API
|
6
6
|
class Gateway
|
7
|
-
|
8
|
-
API_ROOT = "api/default.pay"
|
9
|
-
URL = "https://#{DOMAIN}/#{API_ROOT}"
|
7
|
+
attr_accessor :connection
|
10
8
|
|
11
|
-
def initialize(connection:
|
12
|
-
@connection = connection
|
9
|
+
def initialize(connection: nil)
|
10
|
+
@connection = connection
|
11
|
+
@connection ||= PayTrace.configuration.connection
|
13
12
|
end
|
14
13
|
|
15
14
|
def send_request(request)
|
16
|
-
res = @connection.post
|
15
|
+
res = @connection.post PayTrace.configuration.url, parmlist: request.to_parms_string
|
17
16
|
PayTrace::API::Response.new(res.body)
|
18
17
|
end
|
19
18
|
end
|
data/lib/paytrace/api/request.rb
CHANGED
@@ -25,14 +25,64 @@ module PayTrace
|
|
25
25
|
|
26
26
|
private
|
27
27
|
def add_transaction(t)
|
28
|
-
|
29
|
-
|
30
|
-
@params[:expiration_year] = t.credit_card.expiration_year
|
28
|
+
add_credit_card t.credit_card if t.credit_card
|
29
|
+
add_customer t.customer if t.customer
|
31
30
|
@params[:transaction_type] = t.type
|
32
31
|
@params[:method] = TRANSACTION_METHOD
|
33
32
|
@params[:amount] = t.amount
|
33
|
+
load_address(t)
|
34
|
+
load_optional_fields(t) if t.optional_fields
|
34
35
|
end
|
35
36
|
|
37
|
+
def add_credit_card(cc)
|
38
|
+
@params[:card_number] = cc.card_number if cc.card_number
|
39
|
+
@params[:expiration_month] = cc.expiration_month if cc.expiration_month
|
40
|
+
@params[:expiration_year] = cc.expiration_year if cc.expiration_year
|
41
|
+
@params[:swipe] = cc.swipe if cc.swipe
|
42
|
+
@params[:csc] = cc.csc if cc.csc
|
43
|
+
end
|
44
|
+
|
45
|
+
def load_optional_fields(t)
|
46
|
+
o = t.optional_fields
|
47
|
+
@params[:email] = o[:email] if o[:email]
|
48
|
+
@params[:description] = o[:description] if o[:description]
|
49
|
+
@params[:tax_amount] = o[:tax_amount] if o[:tax_amount]
|
50
|
+
@params[:return_clr] = o[:return_clr] if o[:return_clr]
|
51
|
+
@params[:enable_partial_authentication] = o[:enable_partial_authentication] if o[:enable_partial_authentication]
|
52
|
+
@params[:discretionary_data] = o[:discretionary_data] if o[:discretionary_data]
|
53
|
+
@params[:custom_dba] = o[:custom_dba] if o[:custom_dba]
|
54
|
+
end
|
55
|
+
|
56
|
+
def load_address(t)
|
57
|
+
add_shipping_address(t.shipping_address) if t.shipping_address
|
58
|
+
add_billing_address(t.billing_address) if t.billing_address
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_customer(c)
|
62
|
+
@params[:customer_id] = c.customer_id
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_shipping_address(s)
|
66
|
+
add_address("shipping",s)
|
67
|
+
end
|
68
|
+
|
69
|
+
def add_billing_address(b)
|
70
|
+
add_address("billing",b)
|
71
|
+
end
|
72
|
+
|
73
|
+
def add_address(address_type, address)
|
74
|
+
@params[:"#{address_type}_name"] = address.name if address.name
|
75
|
+
@params[:"#{address_type}_address"] = address.street if address.street
|
76
|
+
@params[:"#{address_type}_address2"] = address.street2 if address.street2
|
77
|
+
@params[:"#{address_type}_city"] = address.city if address.city
|
78
|
+
@params[:"#{address_type}_region"] = address.region if address.region
|
79
|
+
@params[:"#{address_type}_state"] = address.state if address.state
|
80
|
+
@params[:"#{address_type}_postal_code"] = address.postal_code if address.postal_code
|
81
|
+
@params[:"#{address_type}_country"] = address.country if address.country
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
|
36
86
|
end
|
37
87
|
end
|
38
88
|
end
|
@@ -1,6 +1,16 @@
|
|
1
1
|
module PayTrace
|
2
2
|
class Configuration
|
3
|
-
attr_accessor :user_name, :password
|
3
|
+
attr_accessor :user_name, :password, :connection, :domain, :path
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@domain = "paytrace.com"
|
7
|
+
@connection = Faraday.new
|
8
|
+
@path = "api/default.pay"
|
9
|
+
end
|
10
|
+
|
11
|
+
def url
|
12
|
+
"https://#{@domain}/#{@path}"
|
13
|
+
end
|
4
14
|
end
|
5
15
|
|
6
16
|
def self.configuration
|
data/lib/paytrace/credit_card.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
module PayTrace
|
2
2
|
class CreditCard
|
3
|
-
attr_accessor :card_number, :expiration_month, :expiration_year
|
3
|
+
attr_accessor :card_number, :expiration_month, :expiration_year, :swipe, :csc
|
4
|
+
|
5
|
+
def initialize(options={})
|
4
6
|
|
5
|
-
def initialize(options = {})
|
6
7
|
@card_number = options[:card_number]
|
7
8
|
@expiration_month = options[:expiration_month]
|
8
9
|
@expiration_year = options[:expiration_year]
|
10
|
+
@swipe = options[:swipe]
|
11
|
+
@csc = options[:csc]
|
9
12
|
end
|
10
13
|
end
|
11
14
|
end
|
data/lib/paytrace/transaction.rb
CHANGED
@@ -1,17 +1,25 @@
|
|
1
1
|
require 'paytrace/api/request'
|
2
2
|
require 'paytrace/api/gateway'
|
3
|
-
|
3
|
+
require 'paytrace/address'
|
4
4
|
module PayTrace
|
5
5
|
module TransactionOperations
|
6
|
-
def sale(
|
6
|
+
def sale(params)
|
7
|
+
amount = params[:amount]
|
8
|
+
cc = CreditCard.new(params[:credit_card]) if params[:credit_card]
|
9
|
+
customer = Customer.new(customer_id: params[:customer_id]) if params[:customer_id]
|
10
|
+
|
7
11
|
t = Transaction.new(amount: amount,
|
8
|
-
credit_card:
|
9
|
-
|
12
|
+
credit_card: cc,
|
13
|
+
customer: customer,
|
14
|
+
type: TransactionTypes::SALE,
|
15
|
+
optional:params)
|
16
|
+
|
10
17
|
request = PayTrace::API::Request.new(transaction: t)
|
11
18
|
gateway = PayTrace::API::Gateway.new
|
12
19
|
t.response = gateway.send_request(request)
|
13
20
|
t
|
14
21
|
end
|
22
|
+
|
15
23
|
end
|
16
24
|
|
17
25
|
class Transaction
|
@@ -19,18 +27,47 @@ module PayTrace
|
|
19
27
|
include TransactionOperations
|
20
28
|
end
|
21
29
|
|
22
|
-
attr_reader :amount, :credit_card, :type
|
30
|
+
attr_reader :amount, :credit_card, :type, :customer, :billing_address, :shipping_address,:optional_fields
|
23
31
|
attr_accessor :response
|
24
32
|
|
25
|
-
def
|
33
|
+
def set_shipping_same_as_billing()
|
34
|
+
@shipping_address = @billing_address
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
def initialize(amount: nil, credit_card: nil, customer: nil, type: nil, optional: nil )
|
26
40
|
@amount = amount
|
27
|
-
@credit_card =
|
41
|
+
@credit_card = credit_card
|
28
42
|
@type = type
|
43
|
+
@customer = customer
|
44
|
+
include_optional(optional) if optional
|
29
45
|
end
|
30
46
|
|
47
|
+
private
|
48
|
+
def include_optional(optional)
|
49
|
+
|
50
|
+
b = optional[:billing_address]
|
51
|
+
@billing_address = PayTrace::Address.new(b) if b
|
52
|
+
s = optional[:shipping_address]
|
53
|
+
@shipping_address = PayTrace::Address.new(s) if s
|
54
|
+
if optional[:address_shipping_same_as_billing]
|
55
|
+
self.set_shipping_same_as_billing
|
56
|
+
end
|
57
|
+
|
58
|
+
#clear these out so we have a clean hash
|
59
|
+
optional[:billing_address] = nil
|
60
|
+
optional[:shipping_address] = nil
|
61
|
+
|
62
|
+
@optional_fields = optional
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
|
31
67
|
end
|
32
68
|
|
33
69
|
module TransactionTypes
|
34
70
|
SALE = "SALE"
|
35
71
|
end
|
72
|
+
|
36
73
|
end
|
data/lib/paytrace/version.rb
CHANGED
data/paytrace.gemspec
CHANGED
@@ -18,9 +18,9 @@ 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.add_dependency "faraday"
|
21
|
+
spec.add_dependency "faraday", "~> 0.9"
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
-
spec.add_development_dependency "rake"
|
25
|
-
spec.add_development_dependency "mocha"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.1"
|
25
|
+
spec.add_development_dependency "mocha", "~> 1.0"
|
26
26
|
end
|
@@ -23,4 +23,14 @@ describe PayTrace::API::Gateway do
|
|
23
23
|
stubs.verify_stubbed_calls
|
24
24
|
r.must_equal response
|
25
25
|
end
|
26
|
+
|
27
|
+
it "initializes the connection based on the configuration" do
|
28
|
+
faraday_connection = mock
|
29
|
+
PayTrace.configure do |config|
|
30
|
+
config.connection = faraday_connection
|
31
|
+
end
|
32
|
+
gateway = PayTrace::API::Gateway.new
|
33
|
+
gateway.connection.must_equal faraday_connection
|
34
|
+
end
|
35
|
+
|
26
36
|
end
|
@@ -25,12 +25,12 @@ describe PayTrace::API::Request do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it "can add a transaction to its param list" do
|
28
|
-
t = PayTrace::Transaction.new(amount: "23.12",
|
29
|
-
credit_card: {
|
28
|
+
t = PayTrace::Transaction.new({amount: "23.12",
|
29
|
+
credit_card: PayTrace::CreditCard.new({
|
30
30
|
card_number: "1234123412341234",
|
31
31
|
expiration_year: 24,
|
32
|
-
expiration_month: 10 },
|
33
|
-
type: PayTrace::TransactionTypes::SALE)
|
32
|
+
expiration_month: 10 }),
|
33
|
+
type: PayTrace::TransactionTypes::SALE})
|
34
34
|
r = PayTrace::API::Request.new(transaction: t)
|
35
35
|
|
36
36
|
r.params[:card_number].must_equal "1234123412341234"
|
@@ -44,4 +44,95 @@ describe PayTrace::API::Request do
|
|
44
44
|
url.must_equal "UN~test|PSWD~test|TERMS~Y|CC~1234123412341234|EXPMNTH~10|EXPYR~24|TRANXTYPE~SALE|METHOD~PROCESSTRANX|AMOUNT~23.12|"
|
45
45
|
end
|
46
46
|
|
47
|
+
it "can use a customer id for processing the transaction" do
|
48
|
+
t = PayTrace::Transaction.new({amount: "12.34",
|
49
|
+
customer: PayTrace::Customer.new(customer_id: "1234"),
|
50
|
+
type: PayTrace::TransactionTypes::SALE
|
51
|
+
}
|
52
|
+
)
|
53
|
+
r = PayTrace::API::Request.new(transaction: t)
|
54
|
+
r.params[:customer_id].must_equal "1234"
|
55
|
+
r.params[:amount].must_equal "12.34"
|
56
|
+
|
57
|
+
url = r.to_parms_string
|
58
|
+
|
59
|
+
#Make sure it puts in values we expect
|
60
|
+
url.must_match /\|CUSTID~1234\|/
|
61
|
+
url.must_match /\|AMOUNT~12.34\|/
|
62
|
+
url.must_match /\|METHOD~PROCESSTRANX\|/
|
63
|
+
url.must_match /\|TRANXTYPE~SALE\|/
|
64
|
+
end
|
65
|
+
|
66
|
+
it "can include a billing address" do
|
67
|
+
t = PayTrace::Transaction.new(
|
68
|
+
optional:{
|
69
|
+
billing_address:{
|
70
|
+
name:"John Doe",
|
71
|
+
street:"1234 happy lane",
|
72
|
+
street2:"apt#2",
|
73
|
+
city:"Seattle",
|
74
|
+
state:"WA",
|
75
|
+
country: "US",
|
76
|
+
postal_code:"98107"
|
77
|
+
}
|
78
|
+
}
|
79
|
+
)
|
80
|
+
r = PayTrace::API::Request.new(transaction: t)
|
81
|
+
|
82
|
+
url = r.to_parms_string
|
83
|
+
|
84
|
+
#Make sure it puts in values we expect
|
85
|
+
url.must_match /\|BNAME~John Doe\|/
|
86
|
+
url.must_match /\|BADDRESS~1234 happy lane\|/
|
87
|
+
url.must_match /\|BADDRESS2~apt#2\|/
|
88
|
+
url.must_match /\|BCITY~Seattle\|/
|
89
|
+
url.must_match /\|BSTATE~WA\|/
|
90
|
+
url.must_match /\|BSTATE~WA\|/
|
91
|
+
url.must_match /\|BCOUNTRY~US\|/
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
it "can include misc fields as well" do
|
96
|
+
t = PayTrace::Transaction.new(
|
97
|
+
optional: {
|
98
|
+
email:"it@paytrace.com",
|
99
|
+
description:"This is a test",
|
100
|
+
tax_amount: "1.00",
|
101
|
+
return_clr: "Y",
|
102
|
+
enable_partial_authentication:"Y",
|
103
|
+
discretionary_data:"This is some data that is discretionary",
|
104
|
+
custom_dba:"NewName"
|
105
|
+
}
|
106
|
+
)
|
107
|
+
|
108
|
+
r = PayTrace::API::Request.new(transaction: t)
|
109
|
+
|
110
|
+
url = r.to_parms_string
|
111
|
+
|
112
|
+
url.must_match /\|DESCRIPTION~This is a test\|/
|
113
|
+
url.must_match /\|TAX~1.00\|/
|
114
|
+
url.must_match /\|EMAIL~it@paytrace.com\|/
|
115
|
+
url.must_match /\|RETURNCLR~Y\|/
|
116
|
+
url.must_match /\|ENABLEPARTIALAUTH~Y\|/
|
117
|
+
url.must_match /\|DISCRETIONARY DATA~This is some data that is discretionary\|/
|
118
|
+
url.must_match /\|CUSTOMDBA~NewName\|/
|
119
|
+
end
|
120
|
+
|
121
|
+
it "can do a swipe transaction" do
|
122
|
+
cc = PayTrace::CreditCard.new( {
|
123
|
+
swipe: '%B4055010000000005^J/SCOTT^1212101001020001000000701000000?;4055010000000005=12121010010270100001?'
|
124
|
+
})
|
125
|
+
t = PayTrace::Transaction.new(
|
126
|
+
amount: '1.00',
|
127
|
+
credit_card:cc
|
128
|
+
)
|
129
|
+
|
130
|
+
r = PayTrace::API::Request.new(transaction: t)
|
131
|
+
url = r.to_parms_string
|
132
|
+
|
133
|
+
url.must_match /\|AMOUNT~1.00\|/
|
134
|
+
url.must_match /\|SWIPE~%B4055010000000005/
|
135
|
+
|
136
|
+
|
137
|
+
end
|
47
138
|
end
|
@@ -18,4 +18,19 @@ describe PayTrace::Configuration do
|
|
18
18
|
PayTrace.configuration.user_name.must_equal "demo"
|
19
19
|
PayTrace.configuration.password.must_equal "demo"
|
20
20
|
end
|
21
|
+
|
22
|
+
it "has reasonable defaults" do
|
23
|
+
c = PayTrace::Configuration.new
|
24
|
+
c.domain.must_equal "paytrace.com"
|
25
|
+
c.connection.must_be_instance_of Faraday::Connection
|
26
|
+
c.url.must_equal "https://paytrace.com/api/default.pay"
|
27
|
+
c.path.must_equal "api/default.pay"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "allows you to configure what domain to point at" do
|
31
|
+
PayTrace.configure do |config|
|
32
|
+
config.domain = "sandbox.paytrace.com"
|
33
|
+
end
|
34
|
+
PayTrace.configuration.url.must_equal "https://sandbox.paytrace.com/api/default.pay"
|
35
|
+
end
|
21
36
|
end
|
@@ -11,4 +11,16 @@ describe PayTrace::CreditCard do
|
|
11
11
|
cc.expiration_month.must_equal 10
|
12
12
|
cc.expiration_year.must_equal 24
|
13
13
|
end
|
14
|
+
|
15
|
+
it "can be initialized from a hash" do
|
16
|
+
cc = {credit_card: {
|
17
|
+
card_number: "1234123412341234",
|
18
|
+
expiration_month: 10,
|
19
|
+
expiration_year: 24
|
20
|
+
}}
|
21
|
+
|
22
|
+
cc = PayTrace::CreditCard.new(cc[:credit_card])
|
23
|
+
cc.card_number.must_equal "1234123412341234"
|
24
|
+
|
25
|
+
end
|
14
26
|
end
|
@@ -1,26 +1,112 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '../../test_helper.rb')
|
2
2
|
|
3
3
|
describe PayTrace::Transaction do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
4
|
+
describe "create sales transactions" do
|
5
|
+
before do
|
6
|
+
@response = mock()
|
7
|
+
PayTrace::API::Gateway.any_instance.expects(:send_request).returns(@response)
|
8
|
+
end
|
9
|
+
it "can charge sales to a credit card" do
|
10
|
+
t = PayTrace::Transaction.sale(
|
11
|
+
{amount: "1242.32",
|
12
|
+
credit_card: {
|
13
|
+
card_number: "1234123412341234",
|
14
|
+
expiration_month: 10,
|
15
|
+
expiration_year: 24
|
16
|
+
}
|
17
|
+
})
|
18
|
+
|
19
|
+
#Transaction is properly configured
|
20
|
+
t.amount.must_equal "1242.32"
|
21
|
+
t.type.must_equal PayTrace::TransactionTypes::SALE
|
22
|
+
|
23
|
+
#Sets up a card
|
24
|
+
t.credit_card.card_number.must_equal "1234123412341234"
|
25
|
+
t.credit_card.expiration_month.must_equal 10
|
26
|
+
t.credit_card.expiration_year.must_equal 24
|
27
|
+
t.response.must_equal @response
|
28
|
+
end
|
29
|
+
|
30
|
+
it "can run a transaction for a customer" do
|
31
|
+
t = PayTrace::Transaction.sale(
|
32
|
+
{amount: "1.00",
|
33
|
+
customer_id: "123456"}
|
34
|
+
)
|
35
|
+
|
36
|
+
t.amount.must_equal "1.00"
|
37
|
+
t.type.must_equal PayTrace::TransactionTypes::SALE
|
38
|
+
t.customer.customer_id.must_equal "123456"
|
39
|
+
t.credit_card.must_be_nil
|
40
|
+
t.response.must_equal @response
|
41
|
+
|
42
|
+
end
|
25
43
|
end
|
44
|
+
describe "adding address info" do
|
45
|
+
it "can take a shipping address" do
|
46
|
+
t = PayTrace::Transaction.new(
|
47
|
+
optional:{
|
48
|
+
shipping_address: {
|
49
|
+
name: "Bob Smith",
|
50
|
+
street: "1234 happy lane",
|
51
|
+
street2: "suit 234",
|
52
|
+
city:"Seattle",
|
53
|
+
state:"WA",
|
54
|
+
country:"USA",
|
55
|
+
postal_code:"98107"
|
56
|
+
}
|
57
|
+
}
|
58
|
+
)
|
59
|
+
s = t.shipping_address
|
60
|
+
s.name.must_equal "Bob Smith"
|
61
|
+
s.street.must_equal "1234 happy lane"
|
62
|
+
s.street2.must_equal "suit 234"
|
63
|
+
s.city.must_equal "Seattle"
|
64
|
+
s.state.must_equal "WA"
|
65
|
+
s.country.must_equal "USA"
|
66
|
+
s.postal_code.must_equal "98107"
|
67
|
+
|
68
|
+
end
|
69
|
+
it "can take a billing address" do
|
70
|
+
t = PayTrace::Transaction.new(
|
71
|
+
optional: {
|
72
|
+
billing_address: {
|
73
|
+
street: "1234 happy lane",
|
74
|
+
street2: "suit 234",
|
75
|
+
city:"Seattle",
|
76
|
+
state:"WA",
|
77
|
+
country:"USA",
|
78
|
+
postal_code:"98107"
|
79
|
+
}
|
80
|
+
}
|
81
|
+
)
|
82
|
+
b = t.billing_address
|
83
|
+
b.street.must_equal "1234 happy lane"
|
84
|
+
b.street2.must_equal "suit 234"
|
85
|
+
b.city.must_equal "Seattle"
|
86
|
+
b.state.must_equal "WA"
|
87
|
+
b.country.must_equal "USA"
|
88
|
+
b.postal_code.must_equal "98107"
|
89
|
+
end
|
90
|
+
|
91
|
+
it "will return the same address if set to billing shipping same address" do
|
92
|
+
address = {
|
93
|
+
street: "1234 happy lane",
|
94
|
+
street2: "suit 234",
|
95
|
+
city:"Seattle",
|
96
|
+
state:"WA",
|
97
|
+
country:"USA",
|
98
|
+
postal_code:"98107"
|
99
|
+
}
|
100
|
+
|
101
|
+
t = PayTrace::Transaction.new(
|
102
|
+
optional: { billing_address: address
|
103
|
+
} )
|
104
|
+
t.set_shipping_same_as_billing
|
105
|
+
|
106
|
+
t.shipping_address.must_equal t.billing_address
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
end
|
111
|
+
|
26
112
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paytrace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Trevor Redfern
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
19
|
+
version: '0.9'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
26
|
+
version: '0.9'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -42,30 +42,30 @@ dependencies:
|
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '10.1'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '10.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: mocha
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '1.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
68
|
+
version: '1.0'
|
69
69
|
description: Integration with PayTrace Payment Gateway
|
70
70
|
email:
|
71
71
|
- trevor@paytrace.com
|
@@ -76,21 +76,20 @@ files:
|
|
76
76
|
- ".gitignore"
|
77
77
|
- ".ruby-gemset"
|
78
78
|
- ".ruby-version"
|
79
|
-
- ".vagrant/machines/default/virtualbox/action_provision"
|
80
|
-
- ".vagrant/machines/default/virtualbox/action_set_name"
|
81
|
-
- ".vagrant/machines/default/virtualbox/id"
|
82
79
|
- Gemfile
|
83
80
|
- LICENSE.txt
|
84
81
|
- README.md
|
85
82
|
- Rakefile
|
86
83
|
- Vagrantfile
|
87
84
|
- lib/paytrace.rb
|
85
|
+
- lib/paytrace/address.rb
|
88
86
|
- lib/paytrace/api/fields.rb
|
89
87
|
- lib/paytrace/api/gateway.rb
|
90
88
|
- lib/paytrace/api/request.rb
|
91
89
|
- lib/paytrace/api/response.rb
|
92
90
|
- lib/paytrace/configuration.rb
|
93
91
|
- lib/paytrace/credit_card.rb
|
92
|
+
- lib/paytrace/customer.rb
|
94
93
|
- lib/paytrace/transaction.rb
|
95
94
|
- lib/paytrace/version.rb
|
96
95
|
- paytrace.gemspec
|
@@ -1 +0,0 @@
|
|
1
|
-
1393536090
|
@@ -1 +0,0 @@
|
|
1
|
-
1393536080
|
@@ -1 +0,0 @@
|
|
1
|
-
a966b052-f49f-413f-a0a3-60539add62a1
|