agms 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +15 -0
  2. data/.travis.yml +3 -0
  3. data/Gemfile +4 -0
  4. data/README.md +51 -0
  5. data/Rakefile +40 -0
  6. data/agms.gemspec +29 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +7 -0
  9. data/example/hpp.rb +18 -0
  10. data/example/invoicing.rb +23 -0
  11. data/example/recurring.rb +23 -0
  12. data/example/report.rb +16 -0
  13. data/example/safe.rb +17 -0
  14. data/example/transaction.rb +17 -0
  15. data/init.yml +9 -0
  16. data/lib/agms.rb +59 -0
  17. data/lib/agms/agms.rb +109 -0
  18. data/lib/agms/configuration.rb +71 -0
  19. data/lib/agms/connect.rb +176 -0
  20. data/lib/agms/error/agms_error.rb +9 -0
  21. data/lib/agms/error/authentication_error.rb +7 -0
  22. data/lib/agms/error/authorization_error.rb +7 -0
  23. data/lib/agms/error/client_error_error.rb +7 -0
  24. data/lib/agms/error/configuation_error.rb +7 -0
  25. data/lib/agms/error/down_for_maintenance_error.rb +7 -0
  26. data/lib/agms/error/forged_query_String_error.rb +7 -0
  27. data/lib/agms/error/invalid_parameter_error.rb +7 -0
  28. data/lib/agms/error/invalid_request_error.rb +7 -0
  29. data/lib/agms/error/invalid_signature_error.rb +7 -0
  30. data/lib/agms/error/not_found_error.rb +7 -0
  31. data/lib/agms/error/request_validation_error.rb +7 -0
  32. data/lib/agms/error/response_error.rb +7 -0
  33. data/lib/agms/error/server_error_error.rb +7 -0
  34. data/lib/agms/error/ssl_certificate_error.rb +7 -0
  35. data/lib/agms/error/unexpected_error.rb +7 -0
  36. data/lib/agms/error/upgrade_required_error.rb +7 -0
  37. data/lib/agms/hpp.rb +65 -0
  38. data/lib/agms/invoicing.rb +63 -0
  39. data/lib/agms/recurring.rb +76 -0
  40. data/lib/agms/report.rb +53 -0
  41. data/lib/agms/request/hpp_request.rb +181 -0
  42. data/lib/agms/request/invoicing_request.rb +8 -0
  43. data/lib/agms/request/recurring_request.rb +115 -0
  44. data/lib/agms/request/report_request.rb +106 -0
  45. data/lib/agms/request/request.rb +455 -0
  46. data/lib/agms/request/safe_request.rb +211 -0
  47. data/lib/agms/request/transaction_request.rb +217 -0
  48. data/lib/agms/response/hpp_response.rb +39 -0
  49. data/lib/agms/response/invoicing_response.rb +10 -0
  50. data/lib/agms/response/recurring_response.rb +28 -0
  51. data/lib/agms/response/report_response.rb +141 -0
  52. data/lib/agms/response/response.rb +48 -0
  53. data/lib/agms/response/safe_response.rb +51 -0
  54. data/lib/agms/response/transaction_response.rb +50 -0
  55. data/lib/agms/safe.rb +66 -0
  56. data/lib/agms/transaction.rb +37 -0
  57. data/lib/agms/version.rb +3 -0
  58. metadata +156 -0
@@ -0,0 +1,63 @@
1
+ module Agms
2
+ class Invoicing < Agms
3
+ # A class representing AGMS Invoicing objects.
4
+
5
+ alias AgmsResetParameters resetParameters
6
+ alias AgmsSetParameter setParameter
7
+ alias AgmsDoConnect doConnect
8
+
9
+ def initialize
10
+ super()
11
+ @api_url = 'https://gateway.agms.com/roxapi/AGMS_BillPay.asmx'
12
+ @requestObject = 'InvoicingRequest'
13
+ @responseObject = 'InvoicingResponse'
14
+ end
15
+
16
+ # @return [Object]
17
+ def customer(params)
18
+ @op = 'RetrieveCustomerIDList'
19
+ AgmsResetParameters()
20
+ params.each do |param, config|
21
+ AgmsSetParameter(param, config)
22
+ end
23
+ # self.execute()
24
+ # return @response.toArray()
25
+ end
26
+
27
+ # @return [Object]
28
+ def invoice(params)
29
+ @op = 'RetrieveInvoices'
30
+ AgmsResetParameters()
31
+ params.each do |param, config|
32
+ AgmsSetParameter(param, config)
33
+ end
34
+ # self.execute()
35
+ # return @response.toArray()
36
+ end
37
+
38
+ # @return [Object]
39
+ def submit(params)
40
+ @op = 'SubmitInvoice'
41
+ AgmsResetParameters()
42
+ params.each do |param, config|
43
+ AgmsSetParameter(param, config)
44
+ end
45
+ # self.execute()
46
+ # return @response.toArray()
47
+ end
48
+
49
+ protected
50
+ def execute
51
+ if self.op == 'RetrieveCustomerIDList'
52
+ AgmsDoConnect('RetrieveCustomerIDList', @responseObject)
53
+ elsif self.op == 'RetrieveInvoices'
54
+ AgmsDoConnect('RetrieveInvoices', @responseObject)
55
+ elsif self.op == 'SubmitInvoice'
56
+ AgmsDoConnect('SubmitInvoice', @responseObject)
57
+ else
58
+ raise InvalidRequestError, "Invalid request to Transaction API #{@op}"
59
+ end
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,76 @@
1
+ module Agms
2
+ class Recurring < Agms
3
+ # A class representing AGMS Recurring objects.
4
+
5
+ alias AgmsResetParameters resetParameters
6
+ alias AgmsSetParameter setParameter
7
+ alias AgmsDoConnect doConnect
8
+
9
+ def initialize
10
+ super()
11
+ @api_url = 'https://gateway.agms.com/roxapi/AGMS_Recurring.asmx'
12
+ @requestObject = 'RecurringRequest'
13
+ @responseObject = 'RecurringResponse'
14
+ end
15
+
16
+ # @return [Object]
17
+ def add(params)
18
+ @op = 'RecurringAdd'
19
+ AgmsResetParameters()
20
+ params.each do |param, config|
21
+ AgmsSetParameter(param, config)
22
+ end
23
+ self.execute()
24
+ return @response.toArray()
25
+ end
26
+
27
+ # @return [Object]
28
+ def update(params)
29
+ @op = 'RecurringUpdate'
30
+ AgmsResetParameters()
31
+ params.each do |param, config|
32
+ AgmsSetParameter(param, config)
33
+ end
34
+ self.execute()
35
+ return @response.toArray()
36
+ end
37
+
38
+ # @return [Object]
39
+ def delete(params)
40
+ @op = 'RecurringDelete'
41
+ AgmsResetParameters()
42
+ params.each do |param, config|
43
+ AgmsSetParameter(param, config)
44
+ end
45
+ self.execute()
46
+ return @response.toArray()
47
+ end
48
+
49
+ # @return [Object]
50
+ def get(params)
51
+ @op = 'RetrieveRecurringID'
52
+ AgmsResetParameters()
53
+ params.each do |param, config|
54
+ AgmsSetParameter(param, config)
55
+ end
56
+ self.execute()
57
+ return @response.toArray()
58
+ end
59
+
60
+ protected
61
+ def execute
62
+ if @op == 'RecurringAdd'
63
+ AgmsDoConnect('RecurringAdd', @responseObject)
64
+ elsif @op == 'RecurringUpdate'
65
+ AgmsDoConnect('RecurringUpdate', @responseObject)
66
+ elsif @op == 'RecurringDelete'
67
+ AgmsDoConnect('RecurringDelete', @responseObject)
68
+ elsif @op == 'RetrieveRecurringID'
69
+ AgmsDoConnect('RetrieveRecurringID', @responseObject)
70
+ else
71
+ raise InvalidRequestError, "Invalid request to Transaction API #{@op}"
72
+ end
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,53 @@
1
+ module Agms
2
+ class Report < Agms
3
+ # A class representing AGMS Report objects.
4
+
5
+ alias AgmsResetParameters resetParameters
6
+ alias AgmsSetParameter setParameter
7
+ alias AgmsDoConnect doConnect
8
+
9
+ def initialize
10
+ super()
11
+ @trans_api_url = 'https://gateway.agms.com/roxapi/agms.asmx'
12
+ @safe_api_url = 'https://gateway.agms.com/roxapi/AGMS_SAFE_API.asmx'
13
+ @requestObject = 'ReportRequest'
14
+ @responseObject = 'ReportResponse'
15
+ end
16
+
17
+ # @return [Object]
18
+ def listTransactions(params)
19
+ @op = 'TransactionAPI'
20
+ AgmsResetParameters()
21
+ params.each do |param, config|
22
+ AgmsSetParameter(param, config)
23
+ end
24
+ self.execute()
25
+ return @response.toArray()
26
+ end
27
+
28
+ # @return [Object]
29
+ def listSAFEs(params)
30
+ @op = 'QuerySAFE'
31
+ AgmsResetParameters()
32
+ params.each do |param, config|
33
+ AgmsSetParameter(param, config)
34
+ end
35
+ self.execute()
36
+ return @response.toArray()
37
+ end
38
+
39
+ protected
40
+ def execute
41
+ if @op == 'TransactionAPI'
42
+ @api_url = @trans_api_url
43
+ AgmsDoConnect('TransactionAPI', @responseObject)
44
+ elsif @op == 'QuerySAFE'
45
+ @api_url = @safe_api_url
46
+ AgmsDoConnect('QuerySAFE', @responseObject)
47
+ else
48
+ raise InvalidRequestError, "Invalid request to Transaction API #{@op}"
49
+ end
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,181 @@
1
+ module Agms
2
+ class HPPRequest < Request
3
+ # A class representing AGMS Transaction Request objects.
4
+
5
+ alias AgmsAutoValidate autoValidate
6
+
7
+ def initialize(op)
8
+ super(op)
9
+ @fields = {
10
+ :TransactionType => {:setting => '', :value => ''},
11
+ :Amount => {:setting => '', :value => ''},
12
+ :TipAmount => {:setting => '', :value => ''},
13
+ :Tax => {:setting => '', :value => ''},
14
+ :Shipping => {:setting => '', :value => ''},
15
+ :OrderDescription => {:setting => '', :value => ''},
16
+ :OrderID => {:setting => '', :value => ''},
17
+ :ClerkID => {:setting => '', :value => ''},
18
+ :PONumber => {:setting => '', :value => ''},
19
+ :RetURL => {:setting => '', :value => ''},
20
+ :ACHEnabled => {:setting => '', :value => ''},
21
+ :SAFE_ID => {:setting => '', :value => ''},
22
+ :Donation => {:setting => '', :value => ''},
23
+ :UsageCount => {:setting => '', :value => ''},
24
+ :Internal => {:setting => '', :value => ''},
25
+ :FirstName => {:setting => '', :value => ''},
26
+ :LastName => {:setting => '', :value => ''},
27
+ :Company => {:setting => '', :value => ''},
28
+ :Address1 => {:setting => '', :value => ''},
29
+ :Address2 => {:setting => '', :value => ''},
30
+ :City => {:setting => '', :value => ''},
31
+ :State => {:setting => '', :value => ''},
32
+ :Zip => {:setting => '', :value => ''},
33
+ :Country => {:setting => '', :value => ''},
34
+ :Phone => {:setting => '', :value => ''},
35
+ :Fax => {:setting => '', :value => ''},
36
+ :EMail => {:setting => '', :value => ''},
37
+ :Website => {:setting => '', :value => ''},
38
+ :ShippingFirstName => {:setting => '', :value => ''},
39
+ :ShippingLastName => {:setting => '', :value => ''},
40
+ :ShippingCompany => {:setting => '', :value => ''},
41
+ :ShippingAddress1 => {:setting => '', :value => ''},
42
+ :ShippingAddress2 => {:setting => '', :value => ''},
43
+ :ShippingCity => {:setting => '', :value => ''},
44
+ :ShippingState => {:setting => '', :value => ''},
45
+ :ShippingZip => {:setting => '', :value => ''},
46
+ :ShippingCountry => {:setting => '', :value => ''},
47
+ :ShippingEmail => {:setting => '', :value => ''},
48
+ :ShippingPhone => {:setting => '', :value => ''},
49
+ :ShippingFax => {:setting => '', :value => ''},
50
+ :ProcessorID => {:setting => '', :value => ''},
51
+ :TransactionID => {:setting => '', :value => ''},
52
+ :Tracking_Number => {:setting => '', :value => ''},
53
+ :Shipping_Carrier => {:setting => '', :value => ''},
54
+ :IPAddress => {:setting => '', :value => ''},
55
+ :Custom_Field_1 => {:setting => '', :value => ''},
56
+ :Custom_Field_2 => {:setting => '', :value => ''},
57
+ :Custom_Field_3 => {:setting => '', :value => ''},
58
+ :Custom_Field_4 => {:setting => '', :value => ''},
59
+ :Custom_Field_5 => {:setting => '', :value => ''},
60
+ :Custom_Field_6 => {:setting => '', :value => ''},
61
+ :Custom_Field_7 => {:setting => '', :value => ''},
62
+ :Custom_Field_8 => {:setting => '', :value => ''},
63
+ :Custom_Field_9 => {:setting => '', :value => ''},
64
+ :Custom_Field_10 => {:setting => '', :value => ''},
65
+ :HPPFormat => {:setting => '', :value => ''},
66
+ :StartDate => {:setting => '', :value => ''},
67
+ :EndDate => {:setting => '', :value => ''},
68
+ :StartTime => {:setting => '', :value => ''},
69
+ :EndTime => {:setting => '', :value => ''},
70
+ :SuppressAutoSAFE => {:setting => '', :value => ''}
71
+ }
72
+
73
+ @optionable = %w('FirstName', 'LastName', 'Company', 'Address1', 'Address2',
74
+ 'City', 'State', 'Zip', 'Country', 'Phone', 'Fax',
75
+ 'EMail', 'Website', 'Tax', 'Shipping', 'OrderID',
76
+ 'PONumber', 'ShippingFirstName', 'ShippingLastName', 'ShippingCompany', 'ShippingAddress1',
77
+ 'ShippingAddress2', 'ShippingCity', 'ShippingState', 'ShippingZip', 'ShippingCountry',
78
+ 'ShippingEmail', 'ShippingPhone', 'ShippingFax', 'ShippingTrackingNumber', 'ShippingCarrier',
79
+ 'Custom_Field_1', 'Custom_Field_2', 'Custom_Field_3', 'Custom_Field_4', 'Custom_Field_5',
80
+ 'Custom_Field_6', 'Custom_Field_7', 'Custom_Field_8', 'Custom_Field_9', 'Custom_Field_10')
81
+
82
+ @numeric = %w(Amount Tax Shipping ProcessorID TransactionID CheckABA CheckAccount CCNumber CCExpDate)
83
+
84
+ @enums = {
85
+ :TransactionType => %w(sale auth safe\ only capture void refund update adjustment),
86
+ :Shipping_Carrier => %w(ups fedex dhl usps UPS Fedex DHL USPS),
87
+ :HPPFormat => %w(1 2)
88
+ }
89
+ @boolean = %w(Donation AutoSAFE SuppressAutoSAFE)
90
+
91
+ @date = %w(StartDate EndDate)
92
+
93
+ @digit_2 = %w(State ShippingState)
94
+
95
+ @amount = %w(Amount TipAmount Tax Shipping)
96
+
97
+ @required = %w(TransactionType)
98
+
99
+ # Override mapping with api-specific field maps
100
+ @mapping[:shipping_tracking_number] = :Tracking_Number
101
+ @mapping[:shipping_carrier] = :Shipping_Carrier
102
+
103
+ end
104
+
105
+ def validate
106
+ @required = Array.new
107
+
108
+ # All sales and auth require an amount unless donation
109
+ if ( ( @fields[:Donation][:value] != '' or
110
+ @fields[:Donation][:value] != false ) and
111
+ (@fields[:TransactionType][:value] == 'sale' or
112
+ @fields[:TransactionType][:value] == 'auth') )
113
+ @required.push(:Amount)
114
+ end
115
+
116
+ error_array = AgmsAutoValidate();
117
+
118
+ errors = error_array['errors'];
119
+ messages = error_array['messages'];
120
+
121
+ # ExpDate MMYY
122
+ if ( @fields.has_key?(:CCExpDate) and
123
+ @fields[:CCExpDate][:value] != '' and
124
+ ( @fields[:CCExpDate][:value].length != 4 or
125
+ not /(0[1-9]|1[0-2])([0-9][0-9])/.match(@fields[:CCExpDate][:value]) ) )
126
+ errors += 1
127
+ messages.push('CCExpDate (credit card expiration date) must be MMYY.')
128
+ end
129
+
130
+ # CCNumber length
131
+ if ( @fields.has_key?(:CCNumber) and
132
+ @fields[:CCNumber][:value] != '' and
133
+ @fields[:CCNumber][:value].length != 16 and
134
+ @fields[:CCNumber][:value].length != 15 )
135
+ errors += 1
136
+ messages.push('CCNumber (credit card number) must be 15-16 digits long.')
137
+ end
138
+
139
+ # ABA length
140
+ if ( @fields.has_key?(:CheckABA) and
141
+ @fields[:CheckABA][:value] != '' and
142
+ @fields[:CheckABA][:value].length != 9)
143
+ errors += 1
144
+ messages.push('CheckABA (routing number) must be 9 digits long.')
145
+ end
146
+
147
+ @validate_errors = errors;
148
+ @validate_messages = messages;
149
+
150
+ if errors == 0
151
+ return {'errors' => errors, 'messages' => messages}
152
+ else
153
+ raise RequestValidationError, "Request validation failed with #{messages.join(' ')}."
154
+ end
155
+
156
+ end
157
+
158
+ def getFields
159
+ fields = getFieldArray
160
+ if fields.has_key?(:AutoSAFE)
161
+ if fields[:AutoSAFE] == true
162
+ fields[:AutoSAFE] = 1
163
+ else
164
+ fields[:AutoSAFE] = 0
165
+ end
166
+ end
167
+ if fields.has_key?(:SuppressAutoSAFE)
168
+ if fields[:SuppressAutoSAFE] == true
169
+ fields[:SuppressAutoSAFE] = 1
170
+ else
171
+ fields[:SuppressAutoSAFE] = 0
172
+ end
173
+ end
174
+ return fields
175
+ end
176
+
177
+ def getParams(request)
178
+ return {:objparameters => request}
179
+ end
180
+ end
181
+ end
@@ -0,0 +1,8 @@
1
+ module Agms
2
+ class InvoicingRequest < Request
3
+
4
+ def initialize(op)
5
+ super(op)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,115 @@
1
+ module Agms
2
+ class RecurringRequest < Request
3
+ # A class representing AGMS Recurring Request objects.
4
+
5
+ alias AgmsAutoValidate autoValidate
6
+
7
+ def initialize(op)
8
+ super(op)
9
+ @fields1 = {
10
+ :RecurringID => {:setting => '', :value => ''},
11
+ :MerchantID => {:setting => '', :value => ''},
12
+ :PaymentType => {:setting => '', :value => 'creditcard'},
13
+ :InitialAmount => {:setting => '', :value => ''},
14
+ :RecurringAmount => {:setting => '', :value => ''},
15
+ :CCNumber => {:setting => '', :value => ''},
16
+ :CCExpDate => {:setting => '', :value => ''},
17
+ :CVV => {:setting => '', :value => ''},
18
+ :CheckName => {:setting => '', :value => ''},
19
+ :CheckABA => {:setting => '', :value => ''},
20
+ :CheckAccount => {:setting => '', :value => ''},
21
+ :AccountHolderType => {:setting => '', :value => ''},
22
+ :AccountType => {:setting => '', :value => ''},
23
+ :SecCode => {:setting => '', :value => ''},
24
+ :FirstName => {:setting => '', :value => ''},
25
+ :LastName => {:setting => '', :value => ''},
26
+ :Company => {:setting => '', :value => ''},
27
+ :Address1 => {:setting => '', :value => ''},
28
+ :Address2 => {:setting => '', :value => ''},
29
+ :City => {:setting => '', :value => ''},
30
+ :State => {:setting => '', :value => ''},
31
+ :Zip => {:setting => '', :value => ''},
32
+ :Country => {:setting => '', :value => ''},
33
+ :Phone => {:setting => '', :value => ''},
34
+ :Fax => {:setting => '', :value => ''},
35
+ :EMail => {:setting => '', :value => ''},
36
+ :Website => {:setting => '', :value => ''},
37
+ :Custom_Field_1 => {:setting => '', :value => ''},
38
+ :Custom_Field_2 => {:setting => '', :value => ''},
39
+ :Custom_Field_3 => {:setting => '', :value => ''},
40
+ :Custom_Field_4 => {:setting => '', :value => ''},
41
+ :Custom_Field_5 => {:setting => '', :value => ''},
42
+ :Custom_Field_6 => {:setting => '', :value => ''},
43
+ :Custom_Field_7 => {:setting => '', :value => ''},
44
+ :Custom_Field_8 => {:setting => '', :value => ''},
45
+ :Custom_Field_9 => {:setting => '', :value => ''},
46
+ :Custom_Field_10 => {:setting => '', :value => ''},
47
+ :StartDate => {:setting => '', :value => ''},
48
+ :Frequency => {:setting => '', :value => ''},
49
+ :Quantity => {:setting => '', :value => ''},
50
+ :NumberOfOccurrences => {:setting => '', :value => ''},
51
+ :EndDate => {:setting => '', :value => ''},
52
+ :NumberOfRetries => {:setting => '', :value => ''}
53
+ }
54
+
55
+ @numeric = %w(InitialAmount RecurringAmount Quantity NumberOfOccurrences NumberOfRetries CCNumber CCExpDate CheckABA CheckAccount)
56
+
57
+ @enums = {
58
+ :PaymentType => %w(creditcard check),
59
+ :SecCode => %w(PPD WEB TEL CCD),
60
+ :AccountHolderType => %w(business personal),
61
+ :AccountType => %w(checking savings),
62
+ :Frequency => %w(days weeks months)
63
+ }
64
+
65
+ @date = %w(StartDate EndDate)
66
+
67
+ @digit_2 = %w(State)
68
+
69
+ @amount = %w(Amount TipAmount Tax Shipping)
70
+
71
+ if @op == 'RecurringAdd'
72
+ @fields = @fields1
73
+ else
74
+ raise InvalidRequestError, "Invalid op #{@op} in Request."
75
+ end
76
+
77
+ end
78
+
79
+ def validate
80
+ @required = Array.new
81
+
82
+ if @fields[:Frequency][:value] == ''
83
+ @required.push(:Frequency)
84
+ end
85
+
86
+ # If no transaction type, require a Safe Action
87
+ if @fields[:NumberOfRetries][:value] == ''
88
+ @required.push(:NumberOfRetries)
89
+ end
90
+
91
+ error_array = AgmsAutoValidate();
92
+
93
+ errors = error_array['errors'];
94
+ messages = error_array['messages'];
95
+
96
+ @validate_errors = errors;
97
+ @validate_messages = messages;
98
+
99
+ if errors == 0
100
+ return {'errors' => errors, 'messages' => messages}
101
+ else
102
+ raise RequestValidationError, "Request validation failed with #{messages.join(' ')}."
103
+ end
104
+
105
+ end
106
+
107
+ def getFields
108
+ return getFieldArray
109
+ end
110
+
111
+ def getParams(request)
112
+ return {:vRecurringParams => request}
113
+ end
114
+ end
115
+ end