paytrace 0.1.23 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/paytrace/address.rb +2 -0
- data/lib/paytrace/api/gateway.rb +19 -4
- data/lib/paytrace/api/request.rb +72 -28
- data/lib/paytrace/api/response.rb +19 -11
- data/lib/paytrace/batch_operations.rb +8 -30
- data/lib/paytrace/check_transaction.rb +119 -84
- data/lib/paytrace/configuration.rb +2 -0
- data/lib/paytrace/customer.rb +95 -97
- data/lib/paytrace/debug.rb +36 -0
- data/lib/paytrace/email_receipt_request.rb +4 -28
- data/lib/paytrace/recurring_transaction.rb +20 -67
- data/lib/paytrace/transaction.rb +680 -267
- data/lib/paytrace/version.rb +1 -1
- data/lib/paytrace.rb +0 -4
- data/paytrace.gemspec +1 -0
- data/run_all_integrations.sh +15 -0
- data/test/paytrace/api/gateway_spec.rb +8 -0
- data/test/paytrace/api/request_spec.rb +84 -28
- data/test/paytrace/api/response_spec.rb +2 -2
- data/test/paytrace/batch_operations_spec.rb +5 -5
- data/test/paytrace/{check_transactions_spec.rb → check_transaction_spec.rb} +40 -19
- data/test/paytrace/customer_spec.rb +86 -110
- data/test/paytrace/email_receipt_request_spec.rb +9 -8
- data/test/paytrace/level3_data_spec.rb +28 -2
- data/test/paytrace/recurring_transaction_spec.rb +8 -16
- data/test/paytrace/transaction_spec.rb +300 -330
- data/test/scripts/run_adjust_amount.rb +1 -1
- data/test/scripts/run_attach_signature.rb +2 -2
- data/test/scripts/run_calculate_shipping_costs.rb +2 -3
- data/test/scripts/run_change_password.rb +2 -0
- data/test/scripts/run_check_transactions.rb +2 -3
- data/test/scripts/run_create_customer.rb +16 -23
- data/test/scripts/run_email_request.rb +3 -5
- data/test/scripts/run_export_batches.rb +6 -3
- data/test/scripts/run_export_customers.rb +1 -1
- data/test/scripts/run_export_transactions.rb +2 -2
- data/test/scripts/run_level3_data.rb +1 -1
- data/test/scripts/run_recur_payments_integration.rb +24 -32
- data/test/scripts/run_settle_transaction.rb +2 -2
- data/test/test_helper.rb +12 -1
- metadata +19 -7
- data/lib/paytrace/credit_card.rb +0 -32
- data/test/paytrace/credit_card_spec.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c93b4f1327e0d702fb6fb6c45643323f1a98421
|
4
|
+
data.tar.gz: 5461e5901af68ce1c0af687eaec7fed77e9165d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2923d19c3f1d19c60988b228481b0d08fa711f80e4adb9e8ee18de5a22a1d1ff0cf17897f1ac7fb070895184047b7a3d6f9ad6a314aef00ee771d45e694ff26
|
7
|
+
data.tar.gz: 07faf40f2999b251eb20ecfdd4a68ecec571efedfa56508fe63fa22f8493a3b745890b1b47bc9b728d3276c0858b8209c06ca15cb17a57c4e45d4ad5dae22af2
|
data/lib/paytrace/address.rb
CHANGED
@@ -3,6 +3,7 @@ module PayTrace
|
|
3
3
|
# _Note:_ the "region" parameter can only be defined for shipping addresses, and the
|
4
4
|
# default address type (if unspecified) is billing.
|
5
5
|
class Address
|
6
|
+
# :nodoc:
|
6
7
|
attr_accessor :name, :street,:street2,:city,:state, :country,:region,:postal_code,:address_type
|
7
8
|
|
8
9
|
ATTRIBUTE_MAP = [
|
@@ -15,6 +16,7 @@ module PayTrace
|
|
15
16
|
[:postal_code, :postal_code],
|
16
17
|
[:country, :country]
|
17
18
|
]
|
19
|
+
# :doc:
|
18
20
|
|
19
21
|
# Initialize a new address instance. Parameters are symbolic keys in a hash. They are:
|
20
22
|
# * *:name* -- the name on this address
|
data/lib/paytrace/api/gateway.rb
CHANGED
@@ -14,6 +14,7 @@ module PayTrace
|
|
14
14
|
@@last_response_object = nil
|
15
15
|
@@next_response = nil
|
16
16
|
@@raise_exceptions = true
|
17
|
+
# :doc:
|
17
18
|
|
18
19
|
# Creates a new gateway object, optionally using a supplied connection object
|
19
20
|
def initialize(connection = nil)
|
@@ -58,10 +59,24 @@ module PayTrace
|
|
58
59
|
@@raise_exceptions = raise_exceptions
|
59
60
|
end
|
60
61
|
|
62
|
+
# Helper method to abstract away a common use pattern. Creates a request object, sets parameters, creates a gateway object, sends the request, and returns the response.
|
63
|
+
#
|
64
|
+
# Arguments:
|
65
|
+
#
|
66
|
+
# * *param_names* -- the array of parameter names to be set from *arguments*
|
67
|
+
# * *arguments* -- the arguments to be set in the request
|
68
|
+
def self.send_request(method, params, required = [], optional = [])
|
69
|
+
request = Request.new
|
70
|
+
request.set_param(:method, method)
|
71
|
+
request.set_params(params, required, optional)
|
72
|
+
yield request if block_given?
|
73
|
+
|
74
|
+
gateway = Gateway.new
|
75
|
+
gateway.send_request(request)
|
76
|
+
end
|
77
|
+
|
61
78
|
# Sends a request object
|
62
|
-
|
63
|
-
# * *:multi_value_response_fields* -- response fields that may have multiple entries for the same key
|
64
|
-
def send_request(request, multi_value_response_fields = [])
|
79
|
+
def send_request(request)
|
65
80
|
@@last_request = request.to_parms_string if @@debug
|
66
81
|
unless (@@debug && @@next_response)
|
67
82
|
res = @connection.post PayTrace.configuration.url, parmlist: request.to_parms_string
|
@@ -71,7 +86,7 @@ module PayTrace
|
|
71
86
|
end
|
72
87
|
|
73
88
|
@@last_response = raw_response
|
74
|
-
response = PayTrace::API::Response.new(raw_response
|
89
|
+
response = PayTrace::API::Response.new(raw_response)
|
75
90
|
@@last_response_object = response
|
76
91
|
|
77
92
|
@@next_response = nil # just to be sure
|
data/lib/paytrace/api/request.rb
CHANGED
@@ -57,30 +57,25 @@ module PayTrace
|
|
57
57
|
end
|
58
58
|
|
59
59
|
# :nodoc:
|
60
|
-
def
|
61
|
-
|
60
|
+
def valid_param?(key, value)
|
61
|
+
if key == :discretionary_data
|
62
|
+
value.is_a?(Hash) || value.nil? # any discretionary data that's a hash or nil should be passed
|
63
|
+
else
|
64
|
+
PayTrace::API.fields.has_key?(key) || value.nil? || value.respond_to?(:set_request)
|
65
|
+
end
|
62
66
|
end
|
63
|
-
# :doc:
|
64
|
-
|
65
|
-
# Sets a single request parameters
|
66
|
-
# * *:key* -- the name of the setting
|
67
|
-
# * *:value* -- the value of the setting
|
68
|
-
def set_param(key, value = nil)
|
69
|
-
validate_param(key, value)
|
70
|
-
|
71
|
-
unless value.nil?
|
72
|
-
@params[key] ||= []
|
73
67
|
|
74
|
-
|
75
|
-
|
68
|
+
def validate_param!(k, v)
|
69
|
+
raise PayTrace::Exceptions::ValidationError.new("Unknown field '#{k}' (value: #{v})") unless valid_param?(k,v)
|
76
70
|
end
|
71
|
+
# :doc:
|
77
72
|
|
78
73
|
# Sets multiple parameters with the same name using the custom delimiter
|
79
|
-
# *
|
80
|
-
# *
|
74
|
+
# * *param_name* -- the name of the "top level" setting
|
75
|
+
# * *items* -- a hash of "second level" settings
|
81
76
|
def set_multivalue(param_name, items = {})
|
82
77
|
result = (items.map do |k,v|
|
83
|
-
validate_param(k, v)
|
78
|
+
validate_param!(k, v)
|
84
79
|
"#{PayTrace::API.fields[k]}#{@multi_value_delim}#{v}"
|
85
80
|
end.join(@multi_field_delim))
|
86
81
|
|
@@ -89,9 +84,28 @@ module PayTrace
|
|
89
84
|
result
|
90
85
|
end
|
91
86
|
|
87
|
+
# Sets a single request parameters
|
88
|
+
# * *key* -- the name of the setting
|
89
|
+
# * *value* -- the value of the setting
|
90
|
+
#
|
91
|
+
# _Note:_ you can pass in an object that responds to *set_request* as the *value*, and this will invoke *set_request* on it, with this request object as the parameter. Also, any value named *:discretionary_data* that is set will be set in the discretionary hash, not the regular params hash.
|
92
|
+
def set_param(key, value = nil)
|
93
|
+
validate_param!(key, value)
|
94
|
+
|
95
|
+
if value.respond_to?(:set_request)
|
96
|
+
value.set_request(self)
|
97
|
+
elsif key == :discretionary_data
|
98
|
+
set_discretionary(value)
|
99
|
+
elsif value != nil
|
100
|
+
@params[key] ||= []
|
101
|
+
|
102
|
+
@params[key] << value
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
92
106
|
# Sets multiple parameters at once
|
93
|
-
# * *:
|
94
|
-
# * *:
|
107
|
+
# * *:params* -- the hash or object to fetch the parameters from
|
108
|
+
# * *:required* -- an array of required key names to extract from the params object
|
95
109
|
#
|
96
110
|
# _Note:_ the values in *:keys* can also include arrays of two values (techincally, a tuple). The sub-array contains the name of the field that will be used in the request, and the name of the field in the params. This allows more succinct parameter names; e.g. *:address* instead of *:billing_address*. Example:
|
97
111
|
#
|
@@ -103,16 +117,46 @@ module PayTrace
|
|
103
117
|
# :foo,
|
104
118
|
# [:billing_address, :address]
|
105
119
|
# ], params)
|
106
|
-
def set_params(
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
120
|
+
def set_params(params, required = [], optional = [])
|
121
|
+
required_remaining, params_remaining = Request.process_param_list(required, params) do |request_variable, arg_name, value|
|
122
|
+
set_param(request_variable, value)
|
123
|
+
end
|
124
|
+
|
125
|
+
# if we're missing *required* parameters, fail...
|
126
|
+
raise PayTrace::Exceptions::ValidationError.new("Missing the following required parameters: #{required_remaining.to_s}") if required_remaining.any?
|
127
|
+
|
128
|
+
optional_remaining, params_remaining = Request.process_param_list(optional, params_remaining) do |request_variable, arg_name, value|
|
129
|
+
set_param(request_variable, value)
|
115
130
|
end
|
131
|
+
|
132
|
+
# if we have any EXTRA parameters, fail...
|
133
|
+
raise PayTrace::Exceptions::ValidationError.new("The following parameters are unknown: #{params_remaining.to_s}") if params_remaining && params_remaining.any?
|
134
|
+
end
|
135
|
+
|
136
|
+
# takes a list of permitted keys and a params hash, and returns any missing or extra params, optionally
|
137
|
+
# calling a supplied block once per key
|
138
|
+
def self.process_param_list(key_list, params, &block)
|
139
|
+
if params.is_a?(Hash)
|
140
|
+
accessor = :[]
|
141
|
+
track_params = true
|
142
|
+
else
|
143
|
+
accessor = :send
|
144
|
+
track_params = false
|
145
|
+
end
|
146
|
+
params_remaining = params.dup if track_params
|
147
|
+
|
148
|
+
remaining = key_list.dup
|
149
|
+
key_list.each do |key|
|
150
|
+
request_variable, arg_name = key # de-alias the name, if it's aliased
|
151
|
+
arg_name ||= request_variable # just use the same name for both, if not
|
152
|
+
|
153
|
+
value = params.send(accessor, arg_name) # this allows us to treat hashes and objects the same
|
154
|
+
yield request_variable, arg_name, value if block_given?
|
155
|
+
remaining.delete(key) if value
|
156
|
+
params_remaining.delete(arg_name) if track_params
|
157
|
+
end
|
158
|
+
|
159
|
+
return (remaining.map {|req,arg| arg || req}), (track_params ? params_remaining : nil)
|
116
160
|
end
|
117
161
|
end
|
118
162
|
end
|
@@ -2,21 +2,18 @@ module PayTrace
|
|
2
2
|
module API
|
3
3
|
# An object representing an API response from sending a PayTrace::API::Request with a PayTrace::API::Gateway object
|
4
4
|
class Response
|
5
|
+
# :nodoc:
|
5
6
|
attr_reader :values, :errors
|
7
|
+
# :doc
|
6
8
|
|
7
9
|
# Called by the PayTrace::API::Gateway object to initialize a response
|
8
|
-
def initialize(response_string
|
10
|
+
def initialize(response_string)
|
9
11
|
@field_delim = "|"
|
10
12
|
@value_delim = "~"
|
11
13
|
@multi_value_delim = "+"
|
12
14
|
@values = {}
|
13
15
|
@errors = {}
|
14
|
-
parse_response(response_string
|
15
|
-
end
|
16
|
-
|
17
|
-
# Returns the response code(s) received
|
18
|
-
def response_code
|
19
|
-
get_response
|
16
|
+
parse_response(response_string)
|
20
17
|
end
|
21
18
|
|
22
19
|
# Returns true if the response contained any error codes
|
@@ -24,8 +21,19 @@ module PayTrace
|
|
24
21
|
@errors.length > 0
|
25
22
|
end
|
26
23
|
|
24
|
+
# given a field name, splits the data in that value into an array of record hashes
|
25
|
+
def parse_records(field_name)
|
26
|
+
records = []
|
27
|
+
|
28
|
+
[@values[field_name]].flatten.each do |raw_record|
|
29
|
+
records << Hash[raw_record.split(@multi_value_delim).map {|pair| pair.split('=')}]
|
30
|
+
end
|
31
|
+
|
32
|
+
records
|
33
|
+
end
|
34
|
+
|
27
35
|
# Called by the initialize method
|
28
|
-
def parse_response(response_string
|
36
|
+
def parse_response(response_string)
|
29
37
|
|
30
38
|
if (response_string.include? "ERROR")
|
31
39
|
return parse_errors(response_string)
|
@@ -34,9 +42,9 @@ module PayTrace
|
|
34
42
|
pairs = response_string.split(@field_delim)
|
35
43
|
pairs.each do |p|
|
36
44
|
k,v = p.split(@value_delim)
|
37
|
-
if
|
38
|
-
@values[k]
|
39
|
-
@values[k] <<
|
45
|
+
if @values.has_key?(k)
|
46
|
+
@values[k] = [@values[k]] unless @values[k].is_a?(Array)
|
47
|
+
@values[k] << v
|
40
48
|
else
|
41
49
|
@values[k] = v
|
42
50
|
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
module PayTrace
|
2
2
|
# This class serves as a container for batch processing methods
|
3
3
|
class BatchOperations
|
4
|
+
# :nodoc:
|
4
5
|
EXPORT_SINGLE_METHOD = "ExportBatch"
|
5
6
|
EXPORT_MULTIPLE_METHOD = "ExportBatches"
|
6
7
|
EXPORT_DETAILS_METHOD = "ExportBatchDetails"
|
8
|
+
# :doc:
|
7
9
|
|
8
10
|
# See http://help.paytrace.com/api-export-single-batch
|
9
11
|
#
|
@@ -12,16 +14,8 @@ module PayTrace
|
|
12
14
|
# Optional parameters hash:
|
13
15
|
#
|
14
16
|
# * *:batch_number* -- number of the batch of transactions you wish to export
|
15
|
-
def self.
|
16
|
-
|
17
|
-
request.set_param(:method, EXPORT_SINGLE_METHOD)
|
18
|
-
request.set_param(:batch_number, params[:batch_number])
|
19
|
-
|
20
|
-
gateway = PayTrace::API::Gateway.new
|
21
|
-
response = gateway.send_request(request)
|
22
|
-
unless response.has_errors?
|
23
|
-
response.values
|
24
|
-
end
|
17
|
+
def self.export_single(params = {})
|
18
|
+
PayTrace::API::Gateway.send_request(EXPORT_SINGLE_METHOD, params, [], [:batch_number])
|
25
19
|
end
|
26
20
|
|
27
21
|
# See http://help.paytrace.com/api-export-batches
|
@@ -30,16 +24,8 @@ module PayTrace
|
|
30
24
|
#
|
31
25
|
# * *:start_date* -- indicates when to start searching for transactions to export. Must be a valid date formatted as MM/DD/YYYY
|
32
26
|
# * *:end_date* -- indicates when to end searching for transactions to export. Must be a valid date formatted as MM/DD/YYYY
|
33
|
-
def self.
|
34
|
-
|
35
|
-
request.set_param(:method, EXPORT_MULTIPLE_METHOD)
|
36
|
-
request.set_params([:start_date, :end_date], params)
|
37
|
-
|
38
|
-
gateway = PayTrace::API::Gateway.new
|
39
|
-
response = gateway.send_request(request)
|
40
|
-
unless response.has_errors?
|
41
|
-
response.values
|
42
|
-
end
|
27
|
+
def self.export_multiple(params = {})
|
28
|
+
PayTrace::API::Gateway.send_request(EXPORT_MULTIPLE_METHOD, params, [:start_date, :end_date])
|
43
29
|
end
|
44
30
|
|
45
31
|
# See http://help.paytrace.com/api-export-batch-details
|
@@ -47,16 +33,8 @@ module PayTrace
|
|
47
33
|
# Exports transaction details of a given batch. Required parameters hash:
|
48
34
|
#
|
49
35
|
# * *:batch_number* -- number of the batch of transactions you wish to export
|
50
|
-
def self.
|
51
|
-
|
52
|
-
request.set_param(:method, EXPORT_DETAILS_METHOD)
|
53
|
-
request.set_param(:batch_number, params[:batch_number])
|
54
|
-
|
55
|
-
gateway = PayTrace::API::Gateway.new
|
56
|
-
response = gateway.send_request(request)
|
57
|
-
unless response.has_errors?
|
58
|
-
response.values
|
59
|
-
end
|
36
|
+
def self.export_details(params = {})
|
37
|
+
PayTrace::API::Gateway.send_request(EXPORT_DETAILS_METHOD, params, [:batch_number])
|
60
38
|
end
|
61
39
|
end
|
62
40
|
end
|
@@ -1,73 +1,139 @@
|
|
1
1
|
module PayTrace
|
2
2
|
# Provides a number of helper methods to process check transactions
|
3
3
|
class CheckTransaction
|
4
|
+
# :nodoc:
|
4
5
|
PROCESS_SALE_METHOD = "ProcessCheck"
|
5
6
|
MANAGE_CHECK_METHOD = "ManageCheck"
|
6
7
|
|
7
|
-
#
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
# parameters used by several methods
|
9
|
+
COMMON_PARAMETERS = [
|
10
|
+
:check_type,
|
11
|
+
:amount, :customer_id, :account_number, :routing_number,
|
12
|
+
:email, :invoice, :description, :tax_amount, :customer_reference_id, :billing_address, :shipping_address, :discretionary_data,
|
13
|
+
:test_flag
|
14
|
+
]
|
15
|
+
|
16
|
+
BILLING_AND_SHIPPING_ADDRESS_FIELDS = [
|
17
|
+
:billing_name,
|
18
|
+
:billing_address,
|
19
|
+
:billing_address2,
|
20
|
+
:billing_city,
|
21
|
+
:billing_state,
|
22
|
+
:billing_postal_code,
|
23
|
+
:billing_country,
|
24
|
+
:shipping_name,
|
25
|
+
:shipping_address,
|
26
|
+
:shipping_address2,
|
27
|
+
:shipping_city,
|
28
|
+
:shipping_state,
|
29
|
+
:shipping_postal_code,
|
30
|
+
:shipping_region,
|
31
|
+
:shipping_country
|
32
|
+
]
|
33
|
+
|
34
|
+
SALE_OPTIONAL_PARAMETERS = BILLING_AND_SHIPPING_ADDRESS_FIELDS + [
|
35
|
+
:email,
|
36
|
+
:invoice,
|
37
|
+
:description,
|
38
|
+
:tax_amount,
|
39
|
+
:customer_reference_id,
|
40
|
+
:discretionary_data
|
41
|
+
]
|
42
|
+
# :doc:
|
43
|
+
|
44
|
+
# See http://help.paytrace.com/api-processing-a-check-sale
|
45
|
+
#
|
46
|
+
# Process a transaction as a sale by checking account number and routing number.
|
11
47
|
#
|
12
|
-
#
|
48
|
+
# Required parameters:
|
49
|
+
#
|
13
50
|
# * *:check_type* -- the check transaction type; typically "Sale"
|
14
51
|
# * *:amount* -- the amount of the check
|
15
|
-
# * *:customer_id* -- the customer ID for the check
|
16
52
|
# * *:account_anumber* -- the checking account number
|
17
53
|
# * *:routing_number* -- the checking account routing number
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# * *:
|
22
|
-
# * *:
|
23
|
-
# * *:
|
24
|
-
# * *:
|
25
|
-
# * *:
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
54
|
+
#
|
55
|
+
# Optional parameters:
|
56
|
+
#
|
57
|
+
# * *:billing_name* -- the billing name for this transaction
|
58
|
+
# * *:billing_address* -- the billing street address for this transaction
|
59
|
+
# * *:billing_address2* -- the billing street address second line (e.g., apartment, suite) for this transaction
|
60
|
+
# * *:billing_city* -- the billing city for this transaction
|
61
|
+
# * *:billing_state* -- the billing state for this transaction
|
62
|
+
# * *:billing_postal_code* -- the billing zip code for this transaction
|
63
|
+
# * *:billing_country* -- the billing country for this transaction
|
64
|
+
# * *:shipping_name* -- the shipping name for this transaction
|
65
|
+
# * *:shipping_address* -- the shipping street address for this transaction
|
66
|
+
# * *:shipping_address2* -- the shipping street address second line (e.g., apartment, suite) for this transaction
|
67
|
+
# * *:shipping_city* -- the shipping city for this transaction
|
68
|
+
# * *:shipping_state* -- the shipping state for this transaction
|
69
|
+
# * *:shipping_postal_code* -- the shipping zip code for this transaction
|
70
|
+
# * *:shipping_region* -- the shipping region (e.g. county) for this transaction
|
71
|
+
# * *:shipping_country* -- the shipping country for this transaction
|
72
|
+
# * *:email* -- the customer email for this transaction
|
73
|
+
# * *:invoice* -- an internal invoice number (customer ID token or referenced transaction sale)
|
74
|
+
# * *:description* -- a description of the sale (customer ID token or referenced transaction sale)
|
75
|
+
# * *:tax_amount* -- the amount of tax on the sale (customer ID token or referenced transaction sale)
|
76
|
+
# * *:customer_reference_id* -- a customer reference ID (customer ID token or referenced transaction sale)
|
77
|
+
# * *:discretionary_data* -- a hash of optional discretionary data to attach to this transaction
|
78
|
+
def self.sale(params = {})
|
79
|
+
PayTrace::API::Gateway.send_request(PROCESS_SALE_METHOD, params, [:check_type, :amount, :routing_number, :account_number], SALE_OPTIONAL_PARAMETERS)
|
80
|
+
end
|
81
|
+
|
82
|
+
# See http://help.paytrace.com/api-processing-a-check-sale
|
83
|
+
#
|
84
|
+
# Process a transaction as a sale by checking account number and routing number.
|
85
|
+
#
|
86
|
+
# Required parameters:
|
87
|
+
#
|
88
|
+
# * *:check_type* -- the check transaction type; typically "Sale"
|
89
|
+
# * *:amount* -- the amount of the check
|
90
|
+
# * *:customer_id -- the customer ID to reference for this sale
|
91
|
+
#
|
92
|
+
# Optional parameters are the same as for sale
|
93
|
+
def self.customer_id_sale(params = {})
|
94
|
+
PayTrace::API::Gateway.send_request(PROCESS_SALE_METHOD, params, [:check_type, :amount, :customer_id], SALE_OPTIONAL_PARAMETERS)
|
36
95
|
end
|
37
96
|
|
38
97
|
# Process a transaction as a hold. Parameters are passed by symbol name in a hash.
|
39
|
-
# _Note:_ the parameters for this method are identical to
|
98
|
+
# _Note:_ the parameters for this method are identical to sale; this is simply
|
40
99
|
# a convenience method. The :check_type is automatically set to "Hold"
|
41
|
-
def self.
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
request.set_param(:check_type, "Hold")
|
47
|
-
|
48
|
-
gateway = PayTrace::API::Gateway.new
|
49
|
-
response = gateway.send_request(request)
|
50
|
-
unless response.has_errors?
|
51
|
-
response.values
|
52
|
-
end
|
100
|
+
def self.hold(params = {})
|
101
|
+
params = params.dup
|
102
|
+
params[:check_type] = "Hold"
|
103
|
+
|
104
|
+
PayTrace::API::Gateway.send_request(PROCESS_SALE_METHOD, params, [], COMMON_PARAMETERS)
|
53
105
|
end
|
54
106
|
|
107
|
+
|
108
|
+
|
55
109
|
# Process a transaction as a refund. Parameters are passed by symbol name in a hash.
|
56
|
-
# _Note:_ the parameters for this method are identical to
|
57
|
-
# a convenience method. The :check_type is automatically set to "
|
58
|
-
def self.
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
110
|
+
# _Note:_ the parameters for this method are identical to sale; this is simply
|
111
|
+
# a convenience method. The :check_type is automatically set to "Refund"
|
112
|
+
def self.refund(params = {})
|
113
|
+
params = params.dup
|
114
|
+
params[:check_type] = "Refund"
|
115
|
+
|
116
|
+
PayTrace::API::Gateway.send_request(PROCESS_SALE_METHOD, params, [:check_type, :amount, :routing_number, :account_number])
|
117
|
+
end
|
118
|
+
|
119
|
+
# Process a transaction as a refund. Parameters are passed by symbol name in a hash.
|
120
|
+
# _Note:_ the parameters for this method are identical to sale; this is simply
|
121
|
+
# a convenience method. The :check_type is automatically set to "Refund"
|
122
|
+
def self.refund_by_customer_id(params = {})
|
123
|
+
params = params.dup
|
124
|
+
params[:check_type] = "Refund"
|
125
|
+
|
126
|
+
PayTrace::API::Gateway.send_request(PROCESS_SALE_METHOD, params, [:check_type, :amount, :customer_id])
|
127
|
+
end
|
128
|
+
|
129
|
+
# Process a transaction as a refund. Parameters are passed by symbol name in a hash.
|
130
|
+
# _Note:_ the parameters for this method are identical to sale; this is simply
|
131
|
+
# a convenience method. The :check_type is automatically set to "Refund"
|
132
|
+
def self.refund_existing_check_id(params = {})
|
133
|
+
params = params.dup
|
134
|
+
params[:check_type] = "Refund"
|
135
|
+
|
136
|
+
PayTrace::API::Gateway.send_request(PROCESS_SALE_METHOD, params, [:check_type, :check_id])
|
71
137
|
end
|
72
138
|
|
73
139
|
# Manage an existing check, setting a new check type if necessary. Params are passed by symbol
|
@@ -75,38 +141,7 @@ module PayTrace
|
|
75
141
|
# * *:check_type* -- the (new) type of this check (e.g. "Sale", "Hold", "Refund", etc.)
|
76
142
|
# * *:check_id* -- the id of the check to manage
|
77
143
|
def self.manage_check(params = {})
|
78
|
-
|
79
|
-
request.set_param(:method, MANAGE_CHECK_METHOD)
|
80
|
-
request.set_params([:check_type, :check_id], params)
|
81
|
-
|
82
|
-
gateway = PayTrace::API::Gateway.new
|
83
|
-
response = gateway.send_request(request)
|
84
|
-
unless response.has_errors?
|
85
|
-
response.values
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
# Helper method called by the framework. Do not call directly.
|
90
|
-
def self.add_common_parameters(params = {}, request)
|
91
|
-
request.set_params([
|
92
|
-
:check_type,
|
93
|
-
:amount, :customer_id, :account_number, :routing_number,
|
94
|
-
:email, :invoice, :description, :tax_amount, :customer_reference_id, :test_flag
|
95
|
-
], params)
|
96
|
-
|
97
|
-
if params[:discretionary_data]
|
98
|
-
params[:discretionary_data].keys.each do |k|
|
99
|
-
request.set_discretionary(k, params[:discretionary_data][k])
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
if params.has_key?(:billing_address)
|
104
|
-
params[:billing_address].set_request(request)
|
105
|
-
end
|
106
|
-
|
107
|
-
if params.has_key?(:shipping_address)
|
108
|
-
params[:shipping_address].set_request(request)
|
109
|
-
end
|
144
|
+
PayTrace::API::Gateway.send_request(MANAGE_CHECK_METHOD, params, [:check_type, :check_id])
|
110
145
|
end
|
111
146
|
end
|
112
147
|
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
module PayTrace
|
2
2
|
# Contains necessary configuration to access the API server; notably the user name, password, and URL information
|
3
3
|
class Configuration
|
4
|
+
# :nodoc:
|
4
5
|
attr_accessor :user_name, :password, :connection, :domain, :path
|
5
6
|
|
6
7
|
RESET_PASSWORD_METHOD = "UpdatePassword"
|
8
|
+
# :doc:
|
7
9
|
|
8
10
|
# Default initializer. Do not call directly; instead use the PayTrace.configure method
|
9
11
|
# Example:
|