paytrace 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
![Build Status](https://www.codeship.io/projects/611ffe60-f3ee-0130-0299-1a84c3740ef1/status)
|
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
|