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,10 @@
1
+ module Agms
2
+ class InvoicingResponse < Response
3
+ # A class representing AGMS Invoicing Response objects.
4
+
5
+ def initialize
6
+ @response = nil
7
+ @mapping = Array.new
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,28 @@
1
+ module Agms
2
+ class RecurringResponse < Response
3
+ # A class representing AGMS Recurring Response objects.
4
+
5
+ def initialize(response, op)
6
+ @response = nil
7
+ @op = op
8
+
9
+ response = response['soap:Envelope']['soap:Body'][op + 'Response'][op + 'Result']
10
+
11
+ if @op == 'RecurringAdd' or @op == 'RecurringDelete' or @op == 'RecurringUpdate'
12
+ @mapping = {
13
+ :RESULT => 'result',
14
+ :MSG => 'message',
15
+ :RecurringID => 'recurring_id',
16
+ }
17
+ elsif @op == 'RetrieveRecurringID'
18
+ @mapping = {
19
+ :RecurringID => 'recurring_id'
20
+ }
21
+ else
22
+ raise InvalidRequestError, 'Invalid op in Response.'
23
+ end
24
+ @response = response
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,141 @@
1
+ module Agms
2
+ class ReportResponse < Response
3
+ # A class representing AGMS Report Response objects.
4
+
5
+ def initialize(response, op)
6
+ super(response, op)
7
+ @response = nil
8
+ @op = op
9
+ arr = _parseReportResponse(response)
10
+
11
+ if @op == 'TransactionAPI'
12
+ @mapping = {
13
+ :id => 'id',
14
+ :transactionid => 'transaction_id',
15
+ :transactiontype => 'transaction_type',
16
+ :paymenttype => 'payment_type',
17
+ :amount => 'amount',
18
+ :orderdescription => 'order_description',
19
+ :orderid => 'order_id',
20
+ :ponumber => 'po_number',
21
+ :tax => 'tax_amount',
22
+ :shipping => 'shipping_amount',
23
+ :tipamount => 'tip_amount',
24
+ :ccnumber => 'cc_number',
25
+ :ccexpdate => 'cc_exp_date',
26
+ :checkname => 'ach_name',
27
+ :checkaba => 'ach_routing_number',
28
+ :checkaccount => 'ach_account_number',
29
+ :accountholdertype => 'ach_business_or_personal',
30
+ :accounttype => 'ach_checking_or_savings',
31
+ :seccode => 'ach_sec_code',
32
+ :safeaction => 'safe_action',
33
+ :responsesafeid => 'safe_id',
34
+ :clerkid => 'clerk_id',
35
+ :firstname => 'first_name',
36
+ :lastname => 'last_name',
37
+ :company => 'company_name',
38
+ :address1 => 'address',
39
+ :address2 => 'address_2',
40
+ :city => 'city',
41
+ :state => 'state',
42
+ :zip => 'zip',
43
+ :country => 'country',
44
+ :phone => 'phone',
45
+ :fax => 'fax',
46
+ :email => 'email',
47
+ :website => 'website',
48
+ :shippingfirstname => 'shipping_first_name',
49
+ :shippinglastname => 'shipping_last_name',
50
+ :shippingcompany => 'shipping_company_name',
51
+ :shippingaddress1 => 'shipping_address',
52
+ :shippingaddress2 => 'shipping_address_2',
53
+ :shippingcity => 'shipping_city',
54
+ :shippingstate => 'shipping_state',
55
+ :shippingzip => 'shipping_zip',
56
+ :shippingcountry => 'shipping_country',
57
+ :shippingemail => 'shipping_email',
58
+ :shippingphone => 'shipping_phone',
59
+ :shippingfax => 'shipping_fax',
60
+ :shippingcarrier => 'shipping_carrier',
61
+ :trackingnumber => 'shipping_tracking',
62
+ :ipaddress => 'ip_address',
63
+ :customfield1 => 'custom_field_1',
64
+ :customfield2 => 'custom_field_2',
65
+ :customfield3 => 'custom_field_3',
66
+ :customfield4 => 'custom_field_4',
67
+ :customfield5 => 'custom_field_5',
68
+ :customfield6 => 'custom_field_6',
69
+ :customfield7 => 'custom_field_7',
70
+ :customfield8 => 'custom_field_8',
71
+ :customfield9 => 'custom_field_9',
72
+ :customfield10 => 'custom_field_10',
73
+ :customfield11 => 'custom_field_11',
74
+ :customfield12 => 'custom_field_12',
75
+ :customfield13 => 'custom_field_13',
76
+ :customfield14 => 'custom_field_14',
77
+ :customfield15 => 'custom_field_15',
78
+ :customfield16 => 'custom_field_16',
79
+ :customfield17 => 'custom_field_17',
80
+ :customfield18 => 'custom_field_18',
81
+ :customfield19 => 'custom_field_19',
82
+ :customfield20 => 'custom_field_20',
83
+ :receipttype => 'receipt_type',
84
+ :responsestatuscode => 'response_code',
85
+ :responsestatusmsg => 'response_message',
86
+ :responsetransid => 'response_transaction_id',
87
+ :responseauthcode => 'authorization_code',
88
+ :transactiondate => 'transaction_date',
89
+ :createdate => 'date_created',
90
+ :moddate => 'date_last_modified',
91
+ :createuser => 'created_by',
92
+ :moduser => 'modified_by',
93
+ :useragent => 'user_agent'
94
+ }
95
+ if arr
96
+ @response = arr
97
+ else
98
+ @response = Array.new
99
+ end
100
+ elsif @op == 'QuerySAFE'
101
+ if arr
102
+ @response = arr
103
+ else
104
+ @response = Array.new
105
+ end
106
+ else
107
+ raise InvalidRequestError, 'Invalid op in Response.'
108
+ end
109
+ end
110
+
111
+ def toArray
112
+ # Override toArray method to handle array response
113
+ response = Array.new
114
+ if @response
115
+ @response.each do |result|
116
+ response << mapResponse(result)
117
+ end
118
+ end
119
+ return response
120
+ end
121
+
122
+ def getSafeId
123
+ response_array = toArray()
124
+ return response_array['safe_id']
125
+ end
126
+
127
+ # Parse transaction report response received from gateway
128
+ def _parseReportResponse(xml)
129
+ # Parse the response body
130
+ doc = Nokogiri::XML(xml)
131
+ # Remove the namespaces
132
+ doc.remove_namespaces!
133
+ response = {}
134
+ # Extract the response data from the ProcessTransactionResult node
135
+ doc.xpath("//transactions//transaction//*").each do |node|
136
+ response[node.name] = node.children.text
137
+ end
138
+ return response
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,48 @@
1
+ module Agms
2
+ class Response
3
+ # A class representing AGMS Response objects.
4
+
5
+ def initialize(response, op)
6
+ @response = response
7
+ @op = op
8
+ @mapping = nil
9
+ end
10
+
11
+ def toArray
12
+ return mapResponse(@response)
13
+ end
14
+
15
+ def mapResponse(arr)
16
+ if @mapping
17
+ response = doMap(arr)
18
+ return response
19
+ else
20
+ raise UnexpectedError, 'Response mapping not defined for this API.'
21
+ end
22
+ end
23
+
24
+ def doMap(arr)
25
+ response = Hash.new
26
+ mapping = @mapping
27
+ if mapping
28
+ # We only map the end of the array containing data
29
+ # If this element is an array, then we map its individual sub-arrays
30
+ # Otherwise, we map
31
+ arr.each do |key, value|
32
+
33
+ if value.class == Hash
34
+ response << doMap(value)
35
+ else
36
+
37
+ if not mapping.has_key?(key)
38
+ raise UnexpectedError, "Unmapped field #{key} in response."
39
+ else
40
+ response[mapping[key]] = value
41
+ end
42
+ end
43
+ end
44
+ end
45
+ return response
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,51 @@
1
+ module Agms
2
+ class SAFEResponse < Response
3
+ # A class representing AGMS SAFE Response objects.
4
+
5
+ def initialize(response, op)
6
+ super(response, op)
7
+ @mapping = {
8
+ 'STATUS_CODE' => 'response_code',
9
+ 'STATUS_MSG' => 'response_message',
10
+ 'TRANS_ID' => 'transaction_id',
11
+ 'AUTH_CODE' => 'authorization_code',
12
+ 'AVS_CODE' => 'avs_result',
13
+ 'AVS_MSG' => 'avs_message',
14
+ 'CVV2_CODE' => 'cvv_result',
15
+ 'CVV2_MSG' => 'cvv_message',
16
+ 'ORDERID' => 'order_id',
17
+ 'SAFE_ID' => 'safe_id',
18
+ 'FULLRESPONSE' => 'full_response',
19
+ 'POSTSTRING' => 'post_string',
20
+ 'BALANCE' => 'gift_balance',
21
+ 'GIFTRESPONSE' => 'gift_response',
22
+ 'MERCHANT_ID' => 'merchant_id',
23
+ 'CUSTOMER_MESSAGE' => 'customer_message',
24
+ 'RRN' => 'rrn'
25
+ }
26
+
27
+ @response = response
28
+ @op = op
29
+
30
+ if not isSuccessful()
31
+ response_array = toArray()
32
+ raise ResponseError.new("Transaction failed with error code #{response_array['response_code']} and message #{response_array['response_message']}", response_array)
33
+ end
34
+ end
35
+
36
+ def isSuccessful
37
+ response_array = toArray()
38
+ code = response_array['response_code']
39
+ if code != '1' and code != '2'
40
+ return false
41
+ else
42
+ return true
43
+ end
44
+ end
45
+
46
+ def getSafeId
47
+ response_array = toArray()
48
+ return response_array['safe_id']
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,50 @@
1
+ module Agms
2
+ class TransactionResponse < Response
3
+ # A class representing AGMS Transaction Response objects.
4
+
5
+ def initialize(response, op)
6
+ super(response, op)
7
+ @mapping = {
8
+ 'STATUS_CODE' => 'response_code',
9
+ 'STATUS_MSG' => 'response_message',
10
+ 'TRANS_ID' => 'transaction_id',
11
+ 'AUTH_CODE' => 'authorization_code',
12
+ 'AVS_CODE' => 'avs_result',
13
+ 'AVS_MSG' => 'avs_message',
14
+ 'CVV2_CODE' => 'cvv_result',
15
+ 'CVV2_MSG' => 'cvv_message',
16
+ 'ORDERID' => 'order_id',
17
+ 'SAFE_ID' => 'safe_id',
18
+ 'FULLRESPONSE' => 'full_response',
19
+ 'POSTSTRING' => 'post_string',
20
+ 'BALANCE' => 'gift_balance',
21
+ 'GIFTRESPONSE' => 'gift_response',
22
+ 'MERCHANT_ID' => 'merchant_id',
23
+ 'CUSTOMER_MESSAGE' => 'customer_message',
24
+ 'RRN' => 'rrn'
25
+ }
26
+
27
+ @response = response
28
+ @op = op
29
+
30
+ if not isSuccessful()
31
+ response_array = toArray()
32
+ raise ResponseError.new("Transaction failed with error code #{response_array['response_code']} and message #{response_array['response_message']}", response_array)
33
+ end
34
+ end
35
+
36
+ def isSuccessful
37
+ response_array = toArray()
38
+ if response_array['response_code'] != '1' and response_array['response_code'] != '2'
39
+ return false
40
+ else
41
+ return true
42
+ end
43
+ end
44
+
45
+ def getAuthorization
46
+ response_array = toArray()
47
+ return response_array['transaction_id']
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,66 @@
1
+ module Agms
2
+ class SAFE < Agms
3
+ # A class representing AGMS SAFE 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_SAFE_API.asmx'
12
+ @requestObject = 'SAFERequest'
13
+ @responseObject = 'SAFEResponse'
14
+ end
15
+
16
+ # @return [Object]
17
+ def add(params)
18
+ @op = 'AddToSAFE'
19
+ AgmsResetParameters()
20
+ AgmsSetParameter(:SAFE_Action, {:value => 'add_safe'})
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 update(params)
30
+ @op = 'UpdateSAFE'
31
+ AgmsResetParameters()
32
+ AgmsSetParameter(:SAFE_Action, {:value => 'update_safe'})
33
+ params.each do |param, config|
34
+ AgmsSetParameter(param, config)
35
+ end
36
+ self.execute()
37
+ return @response.toArray()
38
+ end
39
+
40
+ # @return [Object]
41
+ def delete(params)
42
+ @op = 'DeleteFromSAFE'
43
+ AgmsResetParameters()
44
+ AgmsSetParameter(:SAFE_Action, {:value => 'delete_safe'})
45
+ params.each do |param, config|
46
+ AgmsSetParameter(param, config)
47
+ end
48
+ self.execute()
49
+ return @response.toArray()
50
+ end
51
+
52
+ protected
53
+ def execute
54
+ if @op == 'AddToSAFE'
55
+ AgmsDoConnect('AddToSAFE', @responseObject)
56
+ elsif @op == 'UpdateSAFE'
57
+ AgmsDoConnect('UpdateSAFE', @responseObject)
58
+ elsif @op == 'DeleteFromSAFE'
59
+ AgmsDoConnect('DeleteFromSAFE', @responseObject)
60
+ else
61
+ raise InvalidRequestError, "Invalid request to Transaction API #{@op}"
62
+ end
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,37 @@
1
+ module Agms
2
+ class Transaction < Agms
3
+ # A class representing AGMS Transaction 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.asmx'
12
+ @requestObject = 'TransactionRequest'
13
+ @responseObject = 'TransactionResponse'
14
+ end
15
+
16
+ # @return [Object]
17
+ def process(params)
18
+ @op = 'ProcessTransaction'
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
+ protected
28
+ def execute
29
+ if @op == 'ProcessTransaction'
30
+ AgmsDoConnect('ProcessTransaction', @responseObject)
31
+ else
32
+ raise InvalidRequestError, "Invalid request to Transaction API #{@op}"
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ module Agms
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: agms
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Maanas Royy
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-04-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.8'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mocha
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Ruby Library for integrating AGMS Gateway
70
+ email:
71
+ - maanas@agms.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .travis.yml
77
+ - Gemfile
78
+ - README.md
79
+ - Rakefile
80
+ - agms.gemspec
81
+ - bin/console
82
+ - bin/setup
83
+ - example/hpp.rb
84
+ - example/invoicing.rb
85
+ - example/recurring.rb
86
+ - example/report.rb
87
+ - example/safe.rb
88
+ - example/transaction.rb
89
+ - init.yml
90
+ - lib/agms.rb
91
+ - lib/agms/agms.rb
92
+ - lib/agms/configuration.rb
93
+ - lib/agms/connect.rb
94
+ - lib/agms/error/agms_error.rb
95
+ - lib/agms/error/authentication_error.rb
96
+ - lib/agms/error/authorization_error.rb
97
+ - lib/agms/error/client_error_error.rb
98
+ - lib/agms/error/configuation_error.rb
99
+ - lib/agms/error/down_for_maintenance_error.rb
100
+ - lib/agms/error/forged_query_String_error.rb
101
+ - lib/agms/error/invalid_parameter_error.rb
102
+ - lib/agms/error/invalid_request_error.rb
103
+ - lib/agms/error/invalid_signature_error.rb
104
+ - lib/agms/error/not_found_error.rb
105
+ - lib/agms/error/request_validation_error.rb
106
+ - lib/agms/error/response_error.rb
107
+ - lib/agms/error/server_error_error.rb
108
+ - lib/agms/error/ssl_certificate_error.rb
109
+ - lib/agms/error/unexpected_error.rb
110
+ - lib/agms/error/upgrade_required_error.rb
111
+ - lib/agms/hpp.rb
112
+ - lib/agms/invoicing.rb
113
+ - lib/agms/recurring.rb
114
+ - lib/agms/report.rb
115
+ - lib/agms/request/hpp_request.rb
116
+ - lib/agms/request/invoicing_request.rb
117
+ - lib/agms/request/recurring_request.rb
118
+ - lib/agms/request/report_request.rb
119
+ - lib/agms/request/request.rb
120
+ - lib/agms/request/safe_request.rb
121
+ - lib/agms/request/transaction_request.rb
122
+ - lib/agms/response/hpp_response.rb
123
+ - lib/agms/response/invoicing_response.rb
124
+ - lib/agms/response/recurring_response.rb
125
+ - lib/agms/response/report_response.rb
126
+ - lib/agms/response/response.rb
127
+ - lib/agms/response/safe_response.rb
128
+ - lib/agms/response/transaction_response.rb
129
+ - lib/agms/safe.rb
130
+ - lib/agms/transaction.rb
131
+ - lib/agms/version.rb
132
+ homepage: http://www.onlinepaymentprocessing.com
133
+ licenses: []
134
+ metadata:
135
+ allowed_push_host: https://rubygems.org
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ requirements: []
151
+ rubyforge_project:
152
+ rubygems_version: 2.4.5
153
+ signing_key:
154
+ specification_version: 4
155
+ summary: AGMS Ruby Client Library
156
+ test_files: []