paytrace 0.1.7 → 0.1.8
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/lib/paytrace/api/fields.rb +9 -1
- data/lib/paytrace/api/gateway.rb +2 -2
- data/lib/paytrace/api/response.rb +10 -4
- data/lib/paytrace/transaction.rb +40 -3
- data/lib/paytrace/version.rb +1 -1
- data/test/paytrace/transaction_spec.rb +24 -0
- data/test/scripts/run_attach_signature.rb +50 -0
- data/test/scripts/run_export_transactions.rb +54 -0
- data/test/scripts/run_recur_payments_integration.rb +18 -3
- data/test/scripts/smiley_face.png +0 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e13cfd13c9fa4d9c8ec7b4fc6e950bd3b2923a3f
|
4
|
+
data.tar.gz: d407555a86e3e4193e9fb38a66eecd47701350c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3e0613a8cdddcfa3800e120ce48da58353cc6886af2100e5db2922f3cc2503ade41ca24f380e294530d6deb50f5ccce1121c32782056b4916e8a973a1cc07b3
|
7
|
+
data.tar.gz: f74214c1513e428e24a7b245693a441d536d4f1ffd24990f7c8f0c473ce9ffe3199818fa0c10b965fbbe60c4f5473eee902715cd92a8ff9d83686973ac8eaf43
|
data/lib/paytrace/api/fields.rb
CHANGED
@@ -12,11 +12,16 @@ module PayTrace
|
|
12
12
|
description: "DESCRIPTION",
|
13
13
|
tax_amount: "TAX",
|
14
14
|
return_clr: "RETURNCLR",
|
15
|
+
return_bin: "RETURNBIN",
|
15
16
|
enable_partial_authentication: "ENABLEPARTIALAUTH",
|
16
17
|
custom_dba: "CUSTOMDBA",
|
17
18
|
invoice:"INVOICE",
|
18
19
|
transaction_id:"TRANXID",
|
20
|
+
transaction_user:"USER",
|
21
|
+
search_text:"SEARCHTEXT",
|
19
22
|
check_id:"CHECKID",
|
23
|
+
start_date:"SDATE",
|
24
|
+
end_date:"EDATE",
|
20
25
|
#credit card
|
21
26
|
card_number: "CC",
|
22
27
|
expiration_year: "EXPYR",
|
@@ -62,7 +67,10 @@ module PayTrace
|
|
62
67
|
recur_start: "START",
|
63
68
|
recur_count: "TOTALCOUNT",
|
64
69
|
recur_receipt: "CUSTRECEIPT",
|
65
|
-
recur_type: "RECURTYPE"
|
70
|
+
recur_type: "RECURTYPE",
|
71
|
+
# attach signatures
|
72
|
+
image_data: "IMAGEDATA",
|
73
|
+
image_type: "IMAGETYPE"
|
66
74
|
}
|
67
75
|
end
|
68
76
|
end
|
data/lib/paytrace/api/gateway.rb
CHANGED
@@ -41,7 +41,7 @@ module PayTrace
|
|
41
41
|
@@raise_exceptions = raise_exceptions
|
42
42
|
end
|
43
43
|
|
44
|
-
def send_request(request)
|
44
|
+
def send_request(request, multi_value_fields = [])
|
45
45
|
@@last_request = request.to_parms_string if @@debug
|
46
46
|
unless (@@debug && @@next_response)
|
47
47
|
res = @connection.post PayTrace.configuration.url, parmlist: request.to_parms_string
|
@@ -51,7 +51,7 @@ module PayTrace
|
|
51
51
|
end
|
52
52
|
|
53
53
|
@@last_response = raw_response
|
54
|
-
response = PayTrace::API::Response.new(raw_response)
|
54
|
+
response = PayTrace::API::Response.new(raw_response, multi_value_fields)
|
55
55
|
@@last_response_object = response
|
56
56
|
|
57
57
|
@@next_response = nil # just to be sure
|
@@ -3,12 +3,13 @@ module PayTrace
|
|
3
3
|
class Response
|
4
4
|
attr_reader :values, :errors
|
5
5
|
|
6
|
-
def initialize(response_string)
|
6
|
+
def initialize(response_string, multi_value_fields = [])
|
7
7
|
@field_delim = "|"
|
8
8
|
@value_delim = "~"
|
9
|
+
@multi_value_delim = "+"
|
9
10
|
@values = {}
|
10
11
|
@errors = {}
|
11
|
-
parse_response(response_string)
|
12
|
+
parse_response(response_string, multi_value_fields)
|
12
13
|
end
|
13
14
|
|
14
15
|
def response_code
|
@@ -19,7 +20,7 @@ module PayTrace
|
|
19
20
|
@errors.length > 0
|
20
21
|
end
|
21
22
|
|
22
|
-
def parse_response(response_string)
|
23
|
+
def parse_response(response_string, multi_value_fields = [])
|
23
24
|
|
24
25
|
if (response_string.include? "ERROR")
|
25
26
|
return parse_errors(response_string)
|
@@ -28,7 +29,12 @@ module PayTrace
|
|
28
29
|
pairs = response_string.split(@field_delim)
|
29
30
|
pairs.each do |p|
|
30
31
|
k,v = p.split(@value_delim)
|
31
|
-
|
32
|
+
if multi_value_fields.include?(k)
|
33
|
+
@values[k] ||= []
|
34
|
+
@values[k] << Hash[v.split(@multi_value_delim).map {|pair| pair.split('=')}]
|
35
|
+
else
|
36
|
+
@values[k] = v
|
37
|
+
end
|
32
38
|
end
|
33
39
|
end
|
34
40
|
|
data/lib/paytrace/transaction.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'paytrace/api/request'
|
2
2
|
require 'paytrace/api/gateway'
|
3
3
|
require 'paytrace/address'
|
4
|
+
require 'base64'
|
5
|
+
|
4
6
|
module PayTrace
|
5
7
|
module TransactionOperations
|
6
8
|
def sale(args)
|
@@ -83,14 +85,14 @@ module PayTrace
|
|
83
85
|
attr_accessor :response, :discretionary_data
|
84
86
|
|
85
87
|
TRANSACTION_METHOD = "PROCESSTRANX"
|
86
|
-
|
88
|
+
EXPORT_TRANSACTIONS_METHOD = "ExportTranx"
|
89
|
+
EXPORT_TRANSACTIONS_RESPONSE = "TRANSACTIONRECORD"
|
90
|
+
ATTACH_SIGNATURE_METHOD = "AttachSignature"
|
87
91
|
|
88
92
|
def set_shipping_same_as_billing()
|
89
93
|
@shipping_address = @billing_address
|
90
94
|
end
|
91
95
|
|
92
|
-
|
93
|
-
|
94
96
|
def initialize(params = {})
|
95
97
|
@amount = params[:amount]
|
96
98
|
@credit_card = params[:credit_card]
|
@@ -115,6 +117,41 @@ module PayTrace
|
|
115
117
|
end
|
116
118
|
end
|
117
119
|
|
120
|
+
def self.export(params = {})
|
121
|
+
request = PayTrace::API::Request.new
|
122
|
+
request.set_param(:method, EXPORT_TRANSACTIONS_METHOD)
|
123
|
+
request.set_param(:transaction_id, params[:transaction_id])
|
124
|
+
request.set_param(:start_date, params[:start_date])
|
125
|
+
request.set_param(:end_date, params[:end_date])
|
126
|
+
request.set_param(:transaction_type, params[:transaction_type])
|
127
|
+
request.set_param(:customer_id, params[:customer_id])
|
128
|
+
request.set_param(:transaction_user, params[:transaction_user])
|
129
|
+
request.set_param(:return_bin, params[:return_bin])
|
130
|
+
request.set_param(:search_text, params[:search_test])
|
131
|
+
|
132
|
+
gateway = PayTrace::API::Gateway.new
|
133
|
+
response = gateway.send_request(request, [EXPORT_TRANSACTIONS_RESPONSE])
|
134
|
+
|
135
|
+
unless response.has_errors?
|
136
|
+
response.values[EXPORT_TRANSACTIONS_RESPONSE]
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def self.attach_signature(params = {})
|
141
|
+
request = PayTrace::API::Request.new
|
142
|
+
request.set_param(:method, ATTACH_SIGNATURE_METHOD)
|
143
|
+
request.set_param(:image_data, params[:image_data])
|
144
|
+
request.set_param(:image_type, params[:image_type])
|
145
|
+
if params.has_key?(:image_file)
|
146
|
+
File.open(params[:image_file], 'rb') do |file|
|
147
|
+
request.set_param(:image_data, Base64.encode64(file.read))
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
gateway = PayTrace::API::Gateway.new
|
152
|
+
gateway.send_request(request)
|
153
|
+
end
|
154
|
+
|
118
155
|
private
|
119
156
|
def add_transaction_info(request)
|
120
157
|
request.set_param(:transaction_type, type)
|
data/lib/paytrace/version.rb
CHANGED
@@ -1,6 +1,30 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '../../test_helper.rb')
|
2
2
|
|
3
3
|
describe PayTrace::Transaction do
|
4
|
+
it "exports transaction(s)" do
|
5
|
+
PayTrace::API::Gateway.debug = true
|
6
|
+
PayTrace::API::Gateway.next_response = "TRANSACTIONRECORD~TRANXID=1143"
|
7
|
+
records = PayTrace::Transaction.export({transaction_id: 1143})
|
8
|
+
records.must_be_instance_of Array
|
9
|
+
records.count.must_equal 1
|
10
|
+
records[0].must_be_instance_of Hash
|
11
|
+
records[0]["TRANXID"].must_equal "1143"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "successfully attaches base-64 encoded signatures to transactions" do
|
15
|
+
PayTrace::API::Gateway.debug = true
|
16
|
+
PayTrace::API::Gateway.next_response = "RESPONSE~172. The signature image was successfully attached to Transaction ID 13192003.|"
|
17
|
+
result = PayTrace::Transaction.attach_signature({transaction_id: 13192003, image_data: "foo", image_type: "png"})
|
18
|
+
result.has_errors?.must_equal false
|
19
|
+
end
|
20
|
+
|
21
|
+
it "successfully attaches image files to transactions" do
|
22
|
+
PayTrace::API::Gateway.debug = true
|
23
|
+
PayTrace::API::Gateway.next_response = "RESPONSE~172. The signature image was successfully attached to Transaction ID 13192003.|"
|
24
|
+
result = PayTrace::Transaction.attach_signature({transaction_id: 13192003, image_file: __FILE__, image_type: "png"})
|
25
|
+
result.has_errors?.must_equal false
|
26
|
+
end
|
27
|
+
|
4
28
|
describe "create sales transactions" do
|
5
29
|
before do
|
6
30
|
@response = mock()
|
@@ -0,0 +1,50 @@
|
|
1
|
+
$:<< "./lib"
|
2
|
+
|
3
|
+
require "paytrace"
|
4
|
+
|
5
|
+
# see: http://help.paytrace.com/api-email-receipt for details
|
6
|
+
|
7
|
+
#
|
8
|
+
# Helper that loops through the response values and dumps them out
|
9
|
+
#
|
10
|
+
def dump_transaction
|
11
|
+
puts "[REQUEST] #{PayTrace::API::Gateway.last_request}"
|
12
|
+
response = PayTrace::API::Gateway.last_response_object
|
13
|
+
if(response.has_errors?)
|
14
|
+
response.errors.each do |key, value|
|
15
|
+
puts "[RESPONSE] ERROR: #{key.ljust(20)}#{value}"
|
16
|
+
end
|
17
|
+
else
|
18
|
+
response.values.each do |key, value|
|
19
|
+
puts "[RESPONSE] #{key.ljust(20)}#{value}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def log(msg)
|
25
|
+
puts ">>>>>> #{msg}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def trace(&block)
|
29
|
+
PayTrace::API::Gateway.debug = true
|
30
|
+
|
31
|
+
begin
|
32
|
+
yield
|
33
|
+
rescue Exception => e
|
34
|
+
raise
|
35
|
+
else
|
36
|
+
dump_transaction
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
PayTrace.configure do |config|
|
41
|
+
config.user_name = "demo123"
|
42
|
+
config.password = "demo123"
|
43
|
+
config.domain = "stage.paytrace.com"
|
44
|
+
end
|
45
|
+
|
46
|
+
PayTrace::API::Gateway.debug = true
|
47
|
+
|
48
|
+
trace {
|
49
|
+
PayTrace::Transaction.attach_signature({image_file: File.expand_path('smiley_face.png', File.dirname(__FILE__)), image_type: "PNG"})
|
50
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
$:<< "./lib"
|
2
|
+
|
3
|
+
require "paytrace"
|
4
|
+
|
5
|
+
# see: http://help.paytrace.com/api-email-receipt for details
|
6
|
+
|
7
|
+
#
|
8
|
+
# Helper that loops through the response values and dumps them out
|
9
|
+
#
|
10
|
+
def dump_transaction
|
11
|
+
puts "[REQUEST] #{PayTrace::API::Gateway.last_request}"
|
12
|
+
response = PayTrace::API::Gateway.last_response_object
|
13
|
+
if(response.has_errors?)
|
14
|
+
response.errors.each do |key, value|
|
15
|
+
puts "[RESPONSE] ERROR: #{key.ljust(20)}#{value}"
|
16
|
+
end
|
17
|
+
else
|
18
|
+
response.values.each do |key, value|
|
19
|
+
puts "[RESPONSE] #{key.ljust(20)}#{value}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def log(msg)
|
25
|
+
puts ">>>>>> #{msg}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def trace(&block)
|
29
|
+
PayTrace::API::Gateway.debug = true
|
30
|
+
|
31
|
+
begin
|
32
|
+
yield
|
33
|
+
rescue Exception => e
|
34
|
+
raise
|
35
|
+
else
|
36
|
+
dump_transaction
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
PayTrace.configure do |config|
|
41
|
+
config.user_name = "demo123"
|
42
|
+
config.password = "demo123"
|
43
|
+
config.domain = "stage.paytrace.com"
|
44
|
+
end
|
45
|
+
|
46
|
+
PayTrace::API::Gateway.debug = true
|
47
|
+
|
48
|
+
params = {
|
49
|
+
start_date: "04/01/2014",
|
50
|
+
end_date: "05/31/2014",
|
51
|
+
transaction_id: 1143
|
52
|
+
}
|
53
|
+
|
54
|
+
trace { puts PayTrace::Transaction.export(params) }
|
@@ -20,7 +20,7 @@ def dump_transaction
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def log(msg)
|
23
|
-
puts ">>>>>>
|
23
|
+
puts ">>>>>> #{msg}"
|
24
24
|
end
|
25
25
|
|
26
26
|
def trace(&block)
|
@@ -53,7 +53,11 @@ ba = PayTrace::Address.new({
|
|
53
53
|
postal_code: "98133",
|
54
54
|
address_type: :billing
|
55
55
|
})
|
56
|
-
|
56
|
+
|
57
|
+
params = {
|
58
|
+
customer_id: "john_doe",
|
59
|
+
credit_card: cc,
|
60
|
+
billing_address: ba,
|
57
61
|
email: "support@paytrace.com",
|
58
62
|
phone: "206-555-1212",
|
59
63
|
fax: "206-555-1313",
|
@@ -68,6 +72,7 @@ PayTrace::API::Gateway.debug = true
|
|
68
72
|
begin
|
69
73
|
log "Attempting to remove existing customer 'john_doe'..."
|
70
74
|
c = PayTrace::Customer.new("john_doe")
|
75
|
+
# delete customer "john_doe" if he already exists
|
71
76
|
trace { c.delete() }
|
72
77
|
rescue PayTrace::Exceptions::ErrorResponse
|
73
78
|
log "No such cusomter... continuing..."
|
@@ -76,7 +81,9 @@ end
|
|
76
81
|
log "Creating customer john_doe..."
|
77
82
|
begin
|
78
83
|
trace do
|
79
|
-
|
84
|
+
################
|
85
|
+
# create "john_doe" profile from credit card information and a billing address. Also include extra information such as email, phone, and fax
|
86
|
+
c = PayTrace::Customer.from_cc_info(params)
|
80
87
|
log "Customer ID: #{c.id}"
|
81
88
|
end
|
82
89
|
rescue
|
@@ -102,6 +109,8 @@ params = {
|
|
102
109
|
}
|
103
110
|
|
104
111
|
trace do
|
112
|
+
################
|
113
|
+
# create a recurring payment for "john_doe" of $9.99 every month starting on 4/22/2016, running indefinitely. Send a receipt.
|
105
114
|
recur_id = PayTrace::RecurringTransaction.create(params)
|
106
115
|
log "Recurrence ID: #{recur_id}"
|
107
116
|
end
|
@@ -109,6 +118,8 @@ end
|
|
109
118
|
begin
|
110
119
|
log "Exporting recurring transaction..."
|
111
120
|
trace do
|
121
|
+
################
|
122
|
+
# export any scheduled recurring transactions for "john_doe" to a RecurringTransaction object...
|
112
123
|
exported = PayTrace::RecurringTransaction.export_scheduled({customer_id: "john_doe"})
|
113
124
|
log "Exported transaction:\n#{exported.inspect}"
|
114
125
|
end
|
@@ -117,7 +128,11 @@ rescue
|
|
117
128
|
end
|
118
129
|
|
119
130
|
log "Deleting recurrences for 'john_doe'..."
|
131
|
+
################
|
132
|
+
# delete any scheduled recurring transactions for "john_doe"
|
120
133
|
trace { PayTrace::RecurringTransaction.delete({customer_id: "john_doe"}) }
|
121
134
|
|
122
135
|
log "Deleting customer 'john_doe'..."
|
136
|
+
################
|
137
|
+
# delete "john doe"
|
123
138
|
trace { c.delete() }
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paytrace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
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-04-
|
11
|
+
date: 2014-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -137,9 +137,12 @@ files:
|
|
137
137
|
- test/paytrace/exceptions_spec.rb
|
138
138
|
- test/paytrace/recurring_transaction_spec.rb
|
139
139
|
- test/paytrace/transaction_spec.rb
|
140
|
+
- test/scripts/run_attach_signature.rb
|
140
141
|
- test/scripts/run_create_customer.rb
|
141
142
|
- test/scripts/run_email_request.rb
|
143
|
+
- test/scripts/run_export_transactions.rb
|
142
144
|
- test/scripts/run_recur_payments_integration.rb
|
145
|
+
- test/scripts/smiley_face.png
|
143
146
|
- test/test_helper.rb
|
144
147
|
- vagrant-bootstrap.sh
|
145
148
|
homepage: http://github.com/PayTrace/paytrace_ruby
|
@@ -179,7 +182,10 @@ test_files:
|
|
179
182
|
- test/paytrace/exceptions_spec.rb
|
180
183
|
- test/paytrace/recurring_transaction_spec.rb
|
181
184
|
- test/paytrace/transaction_spec.rb
|
185
|
+
- test/scripts/run_attach_signature.rb
|
182
186
|
- test/scripts/run_create_customer.rb
|
183
187
|
- test/scripts/run_email_request.rb
|
188
|
+
- test/scripts/run_export_transactions.rb
|
184
189
|
- test/scripts/run_recur_payments_integration.rb
|
190
|
+
- test/scripts/smiley_face.png
|
185
191
|
- test/test_helper.rb
|