authorize_cim 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source :gemcutter
2
+ gem 'crack'
3
+ gem 'builder'
4
+
5
+ group :test, :development do
6
+ gem 'rspec'
7
+ gem 'webmock'
8
+ gem 'jeweler'
9
+
10
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,34 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.2.2)
5
+ builder (2.1.2)
6
+ crack (0.1.8)
7
+ diff-lcs (1.1.2)
8
+ git (1.2.5)
9
+ jeweler (1.5.1)
10
+ bundler (~> 1.0.0)
11
+ git (>= 1.2.5)
12
+ rake
13
+ rake (0.8.7)
14
+ rspec (2.1.0)
15
+ rspec-core (~> 2.1.0)
16
+ rspec-expectations (~> 2.1.0)
17
+ rspec-mocks (~> 2.1.0)
18
+ rspec-core (2.1.0)
19
+ rspec-expectations (2.1.0)
20
+ diff-lcs (~> 1.1.2)
21
+ rspec-mocks (2.1.0)
22
+ webmock (1.5.0)
23
+ addressable (>= 2.2.2)
24
+ crack (>= 0.1.7)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ builder
31
+ crack
32
+ jeweler
33
+ rspec
34
+ webmock
data/README ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ require 'rake'
2
+ require 'jeweler'
3
+ require 'rspec'
4
+ require 'rspec/core/rake_task'
5
+
6
+ Jeweler::Tasks.new do |gem|
7
+
8
+ gem.name = "authorize_cim"
9
+ gem.summary = %Q{Ruby Gem for integrating Authorize.net Customer Information Manager (CIM)}
10
+ gem.description = %Q{Ruby Gem for integrating Authorize.net Customer Information Manager (CIM)}
11
+ gem.email = "tylerflint@gmail.com"
12
+ gem.homepage = "http://github.com/tylerflint/authorize_cim"
13
+ gem.authors = ["Tyler Flint", "Lyon Hill"]
14
+ gem.files = Dir["{lib}/**/*", "{spec}/**/*","[A-Z]*"]
15
+
16
+ gem.add_dependency "crack"
17
+ gem.add_dependency "builder"
18
+
19
+ Jeweler::GemcutterTasks.new
20
+ end
21
+
22
+ desc "Run all specs"
23
+ RSpec::Core::RakeTask.new('spec') do |t|
24
+ t.rspec_opts = ['--colour --format progress']
25
+ end
26
+
27
+ task :default => :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,687 @@
1
+ require 'crack'
2
+ require 'builder'
3
+ require 'uri'
4
+ require 'net/http'
5
+ require 'net/https'
6
+
7
+ class InvalidOrMissingCredentials < Exception
8
+ end
9
+
10
+ class AuthorizeCim
11
+
12
+ def initialize(attrs)
13
+
14
+ raise InvalidOrMissingCredentials unless attrs[:key] && attrs[:login]
15
+
16
+ @key = attrs[:key]
17
+ @login = attrs[:login]
18
+
19
+ @endpoint = case attrs[:endpoint]
20
+ when :live then 'https://api.authorize.net/xml/v1/request.api'
21
+ when :test then 'https://apitest.authorize.net/xml/v1/request.api'
22
+ else 'https://api.authorize.net/xml/v1/request.api'
23
+ end
24
+ @uri = URI.parse(@endpoint)
25
+
26
+
27
+ end
28
+
29
+ # Create a new customer profile
30
+ #
31
+ #
32
+ # params:
33
+ # Necessary:
34
+ # :merchant_id => '<some id>' (up to 20 characters)
35
+ # or
36
+ # :description => '<some discription>' (up to 255 characters)
37
+ # or
38
+ # :email => '<emailaddress>' (up to 255 characters)
39
+ #
40
+ # return:
41
+ # xml return converted to hash containing the return_code and customer_profile_id
42
+ # note: a return code of I00001 is good, anything else is bad
43
+ #
44
+ def create_customer_profile(input)
45
+ data = build_request('createCustomerProfileRequest') do |xml|
46
+ xml.tag!('profile') do
47
+ xml.merchantCustomerId input[:merchant_id] if input[:merchant_id]
48
+ xml.description input[:description] if input[:description]
49
+ xml.email input[:email] if input[:email]
50
+ end
51
+ end
52
+ parse send(data)
53
+ end
54
+
55
+ # Create a new customer payment profile for an existing customer profile.
56
+ # You can create up to 10 payment profiles for each customer profile.
57
+ #
58
+ # params:
59
+ # A hash containing all necessary fields
60
+ # all possible params:
61
+ # :ref_id => '<id>' (up to 20 digits (optional))
62
+ # :customer_profile_id => <id of customer> (numeric (necessary))
63
+ # :payment_profile => {
64
+ # :bill_to => { (optional)
65
+ # :first_name => '<billing first name>' (up to 50 characters (optional))
66
+ # :last_name => '<billing last name>' (up to 50 characters (optional))
67
+ # :company => '<company name>' (up to 50 characters (optional))
68
+ # :address => '<address>' (up to 60 characters (optional))
69
+ # :city => '<city>' (up to 40 characters (optional))
70
+ # :state => '<state>' (valid 2 character state code (optional))
71
+ # :zip => '<zip code>' (up to 20 characters (optional))
72
+ # :country => '<country>' (up to 60 characters (optional))
73
+ # :phone_number => '<phone number>' (up to 25 digits (optional))
74
+ # :fax_number => '<fax number>' (up to 25 digits (optional))
75
+ # }
76
+ # :payment => { (NECESSARY > must include either bank info or credit card info)
77
+ # :credit_card => { (necessary if there is no bank_account in payment hash)
78
+ # :card_number => <number> (13 to 16 digits (necessary))
79
+ # :expiration_date => '<YYYY-MM>' (has to be 4 digit year, dash line, then 2 digit month (necessary))
80
+ # :card_code => <number> (3 or 4 digit number on back of card (optional))
81
+ # }
82
+ # :bank_account => { (necessary if there is no credit_card in payment hash)
83
+ # :account_type => '<type of account>' (must be "checking", "savings", or "businessChecking" (necessary))
84
+ # :routing_number => <number> (9 digit bank routing number (necessary))
85
+ # :account_number => <number> (5 to 17 digit number (necessary))
86
+ # :name_on_account => '<name>' (up to 22 characters (necessary))
87
+ # :echeck_type => '<type>' (needs to be 'CCD', 'PPD', 'TEL', or 'WEB' (optional))
88
+ # :bank_name => '<bank name>' (up to 50 characters (optional))
89
+ # }
90
+ #
91
+ # }
92
+ # }
93
+ # :validation_mode => '<mode>' (needs to be 'none', 'testMode', 'liveMode', or 'oldLiveMode' (necessary))
94
+ #
95
+ # returns:
96
+ # xml converted to hash table for easy access
97
+ #
98
+ def create_customer_payment_profile(input)
99
+ data = build_request('createCustomerPaymentProfileRequest') do |xml|
100
+ xml.refId input[:ref_id] if input[:ref_id]
101
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
102
+ xml.tag!('paymentProfile') do
103
+ if input[:payment_profile][:bill_to]
104
+ xml.tag!('billTo') do
105
+ xml.firstName input[:payment_profile][:bill_to][:first_name] if input[:payment_profile][:bill_to][:first_name]
106
+ xml.lastName input[:payment_profile][:bill_to][:last_name] if input[:payment_profile][:bill_to][:last_name]
107
+ xml.company input[:payment_profile][:bill_to][:company] if input[:payment_profile][:bill_to][:company]
108
+ xml.address input[:payment_profile][:bill_to][:address] if input[:payment_profile][:bill_to][:address]
109
+ xml.city input[:payment_profile][:bill_to][:city] if input[:payment_profile][:bill_to][:city]
110
+ xml.state input[:payment_profile][:bill_to][:state] if input[:payment_profile][:bill_to][:state]
111
+ xml.zip input[:payment_profile][:bill_to][:zip] if input[:payment_profile][:bill_to][:zip]
112
+ xml.country input[:payment_profile][:bill_to][:country] if input[:payment_profile][:bill_to][:country]
113
+ xml.phoneNumber input[:payment_profile][:bill_to][:phone_number] if input[:payment_profile][:bill_to][:phone_number]
114
+ xml.faxNumber input[:payment_profile][:bill_to][:fax_number] if input[:payment_profile][:bill_to][:fax_number]
115
+ end
116
+ end
117
+ xml.tag!('payment') do
118
+ if input[:payment_profile][:payment][:credit_card]
119
+ xml.tag!('creditCard') do
120
+ xml.cardNumber input[:payment_profile][:payment][:credit_card][:card_number] if input[:payment_profile][:payment][:credit_card][:card_number]
121
+ xml.expirationDate input[:payment_profile][:payment][:credit_card][:expiration_date] if input[:payment_profile][:payment][:credit_card][:expiration_date]
122
+ xml.cardCode input[:payment_profile][:payment][:credit_card][:card_code] if input[:payment_profile][:payment][:credit_card][:card_code]
123
+ end
124
+ elsif input[:payment_profile][:payment][:bank_account]
125
+ xml.tag!('bankAccount') do
126
+ xml.accountType input[:payment_profile][:payment][:bank_account][:account_type] if input[:payment_profile][:payment][:bank_account][:account_type]
127
+ xml.routingNumber input[:payment_profile][:payment][:bank_account][:routing_number] if input[:payment_profile][:payment][:bank_account][:routing_number]
128
+ xml.accountNumber input[:payment_profile][:payment][:bank_account][:account_number] if input[:payment_profile][:payment][:bank_account][:account_number]
129
+ xml.nameOnAccount input[:payment_profile][:payment][:bank_account][:name_on_account] if input[:payment_profile][:payment][:bank_account][:name_on_account]
130
+ xml.echeckType input[:payment_profile][:payment][:bank_account][:echeck_type] if input[:payment_profile][:payment][:bank_account][:echeck_type]
131
+ xml.bankName input[:payment_profile][:payment][:bank_account][:bank_name] if input[:payment_profile][:payment][:bank_account][:bank_name]
132
+ end
133
+ end
134
+ end
135
+ xml.validationMode input[:payment_profile][:validation_mode] if input[:payment_profile][:validation_mode]
136
+ end
137
+ end
138
+ parse send(data)
139
+ end
140
+
141
+ # Create a new customer shipping address for an existing customer profile.
142
+ # You can create up to 100 customer shipping addresses for each customer profile.
143
+ #
144
+ # params:
145
+ # A hash containing all necessary fields
146
+ # all possible params:
147
+ # :ref_id => '<id>' (up to 20 digits (optional))
148
+ # :customer_profile_id => <id of customer> (numeric (necessary))
149
+ # :address => { (a hash containing address information(necessary)
150
+ # :first_name => '<billing first name>' (up to 50 characters (optional))
151
+ # :last_name => '<billing last name>' (up to 50 characters (optional))
152
+ # :company => '<company name>' (up to 50 characters (optional))
153
+ # :address => '<address>' (up to 60 characters (optional))
154
+ # :city => '<city>' (up to 40 characters (optional))
155
+ # :state => '<state>' (valid 2 character state code (optional))
156
+ # :zip => '<zip code>' (up to 20 characters (optional))
157
+ # :country => '<country>' (up to 60 characters (optional))
158
+ # :phone_number => '<phone number>' (up to 25 digits (optional))
159
+ # :fax_number => '<fax number>' (up to 25 digits (optional))
160
+ # }
161
+ #
162
+ # returns:
163
+ # xml converted to hash table for easy access
164
+ def create_customer_shipping_address(input)
165
+ data = build_request('createCustomerShippingAddressRequest') do |xml|
166
+ xml.refId input[:ref_id] if input[:ref_id]
167
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
168
+ xml.tag!('address') do
169
+ xml.firstName input[:address][:first_name] if input[:address][:first_name]
170
+ xml.lastName input[:address][:last_name] if input[:address][:last_name]
171
+ xml.company input[:address][:company] if input[:address][:company]
172
+ xml.address input[:address][:address] if input[:address][:address]
173
+ xml.city input[:address][:city] if input[:address][:city]
174
+ xml.state input[:address][:state] if input[:address][:state]
175
+ xml.zip input[:address][:zip] if input[:address][:zip]
176
+ xml.country input[:address][:country] if input[:address][:country]
177
+ xml.phoneNumber input[:address][:phone_number] if input[:address][:phone_number]
178
+ xml.faxNumber input[:address][:fax_number] if input[:address][:fax_number]
179
+ end
180
+ end
181
+ parse send(data)
182
+ end
183
+
184
+ # Create a new payment transaction from an existing customer profile.
185
+ # can handle all transactions except Void transaction.
186
+ #
187
+ # params:
188
+ # A hash containing all necessary fields
189
+ # all possible params:
190
+ # :ref_id => '<id>' (up to 20 digits (optional))
191
+ # :transaction => { (REQUIRED) TODO \/ I dont know the rest...
192
+ # :trans_type => '<transType>' (must be profileTransAuthCapture, profileTransAuthOnly, profileTransPriorAuthCapture, profileTransCaptureOnly, profileTransRefund, profileTransVoid' (REQUIRED))
193
+ # :transaction_type => {
194
+ # :amount => '<amount>' (total amound of transaction ie. 1234.23 (allow a maximum of 4 digits after decimal point)(REQUIRED))
195
+ # :tax => { (optional)
196
+ # :amount => '<amount>' (total tax amount ie 65.34 (allow a maximum of 4 digits after decimal point))
197
+ # :name => '<name>' (name of tax ie federal, state etc.)
198
+ # :description => '<description>' (up to 255 characters)
199
+ # }
200
+ # :shipping => { (optional)
201
+ # :amount => '<amount>' (total tax amount ie 65.34 (allow a maximum of 4 digits after decimal point))
202
+ # :name => '<name>' (name of tax ie federal, state etc.)
203
+ # :description => '<description>' (up to 255 characters)
204
+ # }
205
+ # :duty => { (optional)
206
+ # :amount => '<amount>' (total tax amount ie 65.34 (allow a maximum of 4 digits after decimal point))
207
+ # :name => '<name>' (name of tax ie federal, state etc.)
208
+ # :description => '<description>' (up to 255 characters)
209
+ # }
210
+ # :line_items => [ (an array of items on transaction, each array item is a hash containign \/ (optional))
211
+ # :item_id => '<id>' (up to 31 characters)
212
+ # :name => '<name>' (up to 31 characters)
213
+ # :description => '<description>' (up to 255 characters)
214
+ # :quantity => <number> (up to 4 digits(and 2 decimal places... but how could you have .34 things you sold...))
215
+ # :unit_price => <number> (up to 4 digits(and 2 decimal places))
216
+ # :taxable => <boolean> (must be "true" or "false")
217
+ # ]
218
+ # :customer_profile_id => <id number> (profile Identification number given by authorize.net (required))
219
+ # :customer_payment_profile_id => <payment id number> (profile payment ID given by authorize.net (required))
220
+ # :customer_Shipping_address_id => <address id> (address ID given by authorize.net (optional))
221
+ # :trans_id => <number> (original transactions transId (CONDITIONAL - required for "Prior Authorization and Capture Transactions"))
222
+ # :credit_card_number_masked => <numb> (last 4 digits of credit card (CONDITIONAL - require for "Refund Transactions"))
223
+ # :order => { (optional)
224
+ # :invoice_number => '<invoice number>' (up to 20 characters)
225
+ # :description => '<description>' (up to 255 characters)
226
+ # :purchase_order_number => '<order number>' (up to 25 characters)
227
+ # }
228
+ # :tax_exempt => <BOOLEAN> (must be "TRUE" or "FALSE" (optional))
229
+ # :recurring_billing => <BOOLEAN> (must be "TRUE" or "FALSE" (optional))
230
+ # :card_code => <num> (3 to 4 digits (Required IF merchent would like to use CCV)(optional))
231
+ # :split_tender_id => <number> (up to 6 digits (conditional)(optional))
232
+ # :approval_code => <code> (6 character authorication code of an original transaction (conditional - caption only transactions))
233
+ # }
234
+ # }
235
+ # :extra_options => <string> (information listed in name/value pair... things like customer ip address... etc(optional))
236
+ #
237
+ # Returns:
238
+ # XML converted to hash for easy reading
239
+ #
240
+ def create_customer_profile_transaction(input)
241
+ data = build_request('createCustomerProfileTransactionRequest') do |xml|
242
+ xml.refId input[:ref_id] if input[:ref_id]
243
+ xml.tag!('transaction') do
244
+ xml.tag!(input[:transaction][:trans_type]) do
245
+ xml.amount input[:transaction][:transaction_type][:amount] if input[:transaction][:transaction_type][:amount]
246
+ if input[:transaction][:transaction_type][:tax]
247
+ xml.tag!('tax') do
248
+ xml.amount input[:transaction][:transaction_type][:tax][:amount] if input[:transaction][:transaction_type][:tax][:amount]
249
+ xml.name input[:transaction][:transaction_type][:tax][:name] if input[:transaction][:transaction_type][:tax][:name]
250
+ xml.description input[:transaction][:transaction_type][:tax][:description] if input[:transaction][:transaction_type][:tax][:description]
251
+ end
252
+ end
253
+ if input[:transaction][:transaction_type][:shipping]
254
+ xml.tag!('shipping') do
255
+ xml.amount input[:transaction][:transaction_type][:shipping][:amount] if input[:transaction][:transaction_type][:shipping][:amount]
256
+ xml.name input[:transaction][:transaction_type][:shipping][:name] if input[:transaction][:transaction_type][:shipping][:name]
257
+ xml.description input[:transaction][:transaction_type][:shipping][:description] if input[:transaction][:transaction_type][:shipping][:description]
258
+ end
259
+ end
260
+ if input[:transaction][:transaction_type][:duty]
261
+ xml.tag!('duty') do
262
+ xml.amount input[:transaction][:transaction_type][:duty][:amount] if input[:transaction][:transaction_type][:duty][:amount]
263
+ xml.name input[:transaction][:transaction_type][:duty][:name] if input[:transaction][:transaction_type][:duty][:name]
264
+ xml.description input[:transaction][:transaction_type][:duty][:description] if input[:transaction][:transaction_type][:duty][:description]
265
+ end
266
+ end
267
+ if input[:transaction][:transaction_type][:line_item]
268
+ xml.tag!('lineItems') do
269
+ arr = input[:transaction][:transaction_type][:line_item]
270
+ arr.each { |item|
271
+ xml.itemId item[:item_id]
272
+ xml.name item[:name]
273
+ xml.description item[:description]
274
+ xml.quantity item[:quantity]
275
+ xml.unitPrice item[:unit_price]
276
+ xml.taxable item[:taxable]
277
+ }
278
+ end
279
+ end
280
+ xml.customerProfileId input[:transaction][:transaction_type][:customer_profile_id] if input[:transaction][:transaction_type][:customer_profile_id]
281
+ xml.customerPaymentProfileId input[:transaction][:transaction_type][:customer_payment_profile_id] if input[:transaction][:transaction_type][:customer_payment_profile_id]
282
+ xml.customerShippingAddressId input[:transaction][:transaction_type][:customer_shipping_address_id] if input[:transaction][:transaction_type][:customer_shipping_address_id]
283
+ xml.transId input[:transaction][:transaction_type][:trans_id] if input[:transaction][:transaction_type][:trans_id]
284
+ xml.creditCardNumberMasked input[:transaction][:transaction_type][:credit_card_number_masked] if input[:transaction][:transaction_type][:credit_card_number_masked]
285
+ if input[:transaction][:transaction_type][:order]
286
+ xml.tag!('order') do
287
+ xml.invoiceNumber input[:transaction][:transaction_type][:order][:invoice_number] if input[:transaction][:transaction_type][:order][:invoice_number]
288
+ xml.description input[:transaction][:transaction_type][:order][:description] if input[:transaction][:transaction_type][:order][:description]
289
+ xml.purchaseOrderNumber input[:transaction][:transaction_type][:order][:purchase_order_number] if input[:transaction][:transaction_type][:order][:purchase_order_number]
290
+ end
291
+ end
292
+ xml.taxExempt input[:transaction][:transaction_type][:tax_exempt] if input[:transaction][:transaction_type][:tax_exempt]
293
+ xml.recurringBilling input[:transaction][:transaction_type][:recurring_billing] if input[:transaction][:transaction_type][:recurring_billing]
294
+ xml.cardCode input[:transaction][:transaction_type][:card_code] if input[:transaction][:transaction_type][:card_code]
295
+ xml.splitTenderId input[:transaction][:transaction_type][:split_tender_id] if input[:transaction][:transaction_type][:split_tender_id]
296
+ xml.approvalCode input[:transaction][:transaction_type][:approval_code] if input[:transaction][:transaction_type][:approval_code]
297
+ end
298
+ end
299
+ xml.extraOptions input[:extra_options] if input[:extra_options]
300
+ end
301
+ parse send(data)
302
+ end
303
+
304
+ # Void a transaction.
305
+ #
306
+ # params:
307
+ # A hash containing all necessary fileds
308
+ # all possible params:
309
+ # :customer_profile_id => <id number> (profile Identification number given by authorize.net (optional))
310
+ # :customer_payment_profile_id => <payment id number> (profile payment ID given by authorize.net (optional))
311
+ # :customer_Shipping_address_id => <address id> (address ID given by authorize.net (optional))
312
+ # :trans_id => <number> (original transactions transId (Required))
313
+ #
314
+ def void_transaction(input)
315
+ data = build_request('deleteCustomerProfileRequest') do |xml|
316
+ xml.transaction do
317
+ xml.profileTransVoid do
318
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
319
+ xml.customerPaymentProfileId input[:customer_payment_profile_id] if input[:customer_payment_profile_id]
320
+ xml.customerShippingAddressId input[:customer_shipping_address_id] if input[:customer_shipping_address_id]
321
+ xml.transId input[:trans_id] if input[:trans_id]
322
+ end
323
+ end
324
+ end
325
+
326
+ end
327
+
328
+
329
+
330
+ # Delete an existing customer profile along with all associated customer payment profiles and customer shipping addresses.
331
+ #
332
+ # params:
333
+ # A hash containing all necessary fields
334
+ # all possible params:
335
+ # :ref_id => '<id>' (up to 20 digits (optional))
336
+ # :customer_profile_id => <id of customer> (numeric (necessary))
337
+ #
338
+ # returns:
339
+ # xml converted to hash for easy access
340
+ def delete_customer_profile(input)
341
+ data = build_request('deleteCustomerProfileRequest') do |xml|
342
+ xml.refId input[:ref_id] if input[:ref_id]
343
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
344
+ end
345
+ parse send(data)
346
+ end
347
+
348
+ # Delete a customer payment profile from an existing customer profile.
349
+ #
350
+ # params:
351
+ # A hash containing all necessary fields
352
+ # all possible params:
353
+ # :ref_id => '<id>' (up to 20 digits (optional))
354
+ # :customer_profile_id => <id of customer> (numeric (necessary))
355
+ # :customer_payment_profile_id => <payment id> (numeric (necessary))
356
+ # returns:
357
+ # xml converted to hash for easy access
358
+ def delete_customer_payment_profile(input)
359
+ data = build_request('deleteCustomerPaymentProfileRequest') do |xml|
360
+ xml.refId input[:ref_id] if input[:ref_id]
361
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
362
+ xml.customerPaymentProfileId input[:customer_payment_profile_id] if input[:customer_payment_profile_id]
363
+ end
364
+ parse send(data)
365
+ end
366
+
367
+ # Delete a customer shipping address from an existing customer profile.
368
+ #
369
+ # params:
370
+ # A hash containing all necessary fields
371
+ # all possible params:
372
+ # :ref_id => '<id>' (up to 20 digits (optional))
373
+ # :customer_profile_id => <id of customer> (numeric (necessary))
374
+ # :customer_address_id => <shipping id> (numeric (necessary))
375
+ #
376
+ # returns:
377
+ # xml converted to hash for easy access
378
+ def delete_customer_shipping_address(input)
379
+ data = build_request('deleteCustomerShippingAddressRequest') do |xml|
380
+ xml.refId input[:ref_id] if input[:ref_id]
381
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
382
+ xml.customerAddressId input[:customer_address_id] if input[:customer_address_id]
383
+ end
384
+ parse send(data)
385
+
386
+ end
387
+
388
+ # Retrieve all customer profile IDs you have previously created.
389
+ # returns:
390
+ # xml converted to hash for easy access
391
+ def get_customer_profile_ids
392
+ data = build_request('getCustomerProfileIdsRequest') {}
393
+ parse send(data)
394
+ end
395
+
396
+ # Retrieve an existing customer profile along with all the associated customer payment profiles and customer shipping addresses.
397
+ # params:
398
+ # A hash containing all necessary fields
399
+ # all possible params:
400
+ # :customer_profile_id => <id of customer> (numeric (necessary))
401
+ def get_customer_profile(input)
402
+ data = build_request('getCustomerProfileRequest') do |xml|
403
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
404
+ end
405
+ parse send(data)
406
+
407
+ end
408
+
409
+ # Retrieve a customer payment profile for an existing customer profile.
410
+ #
411
+ # params:
412
+ # A hash containing all necessary fields
413
+ # all possible params:
414
+ # :customer_profile_id => <id of customer> (numeric (necessary))
415
+ # :customer_payment_profile_id => <payment id> (numeric (necessary))
416
+ #
417
+ # returns:
418
+ # xml converted to hash for easy access
419
+ def get_customer_payment_profile(input)
420
+ data = build_request('getCustomerPaymentProfileRequest') do |xml|
421
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
422
+ xml.customerPaymentProfileId input[:customer_payment_profile_id] if input[:customer_payment_profile_id]
423
+ end
424
+ parse send(data)
425
+
426
+ end
427
+
428
+ # Retrieve a customer shipping address for an existing customer profile.
429
+ # params:
430
+ # A hash containing all necessary fields
431
+ # all possible params:
432
+ # :ref_id => '<id>' (up to 20 digits (optional))
433
+ # :customer_profile_id => <id of customer> (numeric (necessary))
434
+ # :customer_address_id => <shipping id> (numeric (necessary))
435
+ #
436
+ # returns:
437
+ # xml converted to hash for easy access
438
+ def get_customer_shipping_address(input)
439
+ data = build_request('getCustomerShippingAddressRequest') do |xml|
440
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
441
+ xml.customerAddressId input[:customer_address_id] if input[:customer_address_id]
442
+ end
443
+ parse send(data)
444
+ end
445
+
446
+ # Update an existing customer profile.
447
+ # params:
448
+ # Necessary:
449
+ # :customer_profile_id => <id of customer> (numeric (necessary))
450
+ # {
451
+ # :merchant_id => '<some id>' (up to 20 characters)
452
+ # or
453
+ # :description => '<some discription>' (up to 255 characters)
454
+ # or
455
+ # :email => '<emailaddress>' (up to 255 characters)
456
+ # }
457
+ # return:
458
+ # xml return converted to hash containing the return_code and customer_profile_id
459
+ # note: a return code of I00001 is good, anything else is bad
460
+ #
461
+ def update_customer_profile(input)
462
+ data = build_request('updateCustomerProfileRequest') do |xml|
463
+ xml.tag!('profile') do
464
+ xml.merchantCustomerId input[:merchant_id] if input[:merchant_id]
465
+ xml.description input[:description] if input[:description]
466
+ xml.email input[:email] if input[:email]
467
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
468
+ end
469
+ end
470
+ parse send(data)
471
+ end
472
+
473
+ # Update a customer payment profile for an existing customer profile.
474
+ #
475
+ # params:
476
+ # A hash containing all necessary fields
477
+ # all possible params:
478
+ # :ref_id => '<id>' (up to 20 digits (optional))
479
+ # :customer_profile_id => <id of customer> (numeric (necessary))
480
+ # :payment_profile => {
481
+ # :bill_to => { (optional)
482
+ # :first_name => '<billing first name>' (up to 50 characters (optional))
483
+ # :last_name => '<billing last name>' (up to 50 characters (optional))
484
+ # :company => '<company name>' (up to 50 characters (optional))
485
+ # :address => '<address>' (up to 60 characters (optional))
486
+ # :city => '<city>' (up to 40 characters (optional))
487
+ # :state => '<state>' (valid 2 character state code (optional))
488
+ # :zip => '<zip code>' (up to 20 characters (optional))
489
+ # :country => '<country>' (up to 60 characters (optional))
490
+ # :phone_number => '<phone number>' (up to 25 digits (optional))
491
+ # :fax_number => '<fax number>' (up to 25 digits (optional))
492
+ # }
493
+ # :payment => { (NECESSARY > must include either bank info or credit card info)
494
+ # :credit_card => { (necessary if there is no bank_account in payment hash)
495
+ # :card_number => <number> (13 to 16 digits (necessary))
496
+ # :expiration_date => '<YYYY-MM>' (has to be 4 digit year, dash line, then 2 digit month (necessary))
497
+ # :card_code => <number> (3 or 4 digit number on back of card (optional))
498
+ # }
499
+ # :bank_account => { (necessary if there is no credit_card in payment hash)
500
+ # :account_type => '<type of account>' (must be "checking", "savings", or "businessChecking" (necessary))
501
+ # :routing_number => <number> (9 digit bank routing number (necessary))
502
+ # :account_number => <number> (5 to 17 digit number (necessary))
503
+ # :name_on_account => '<name>' (up to 22 characters (necessary))
504
+ # :echeck_type => '<type>' (needs to be 'CCD', 'PPD', 'TEL', or 'WEB' (optional))
505
+ # :bank_name => '<bank name>' (up to 50 characters (optional))
506
+ # }
507
+ # }
508
+ #
509
+ # }
510
+ # :customer_payment_profile_id => <payment id> (numeric (necessary))
511
+ # :validation_mode => '<mode>' (needs to be 'none', 'testMode', 'liveMode', or 'oldLiveMode' (necessary))
512
+ #
513
+ # returns:
514
+ # xml converted to hash table for easy access
515
+ #
516
+ def update_customer_payment_profile(input)
517
+ data = build_request('updateCustomerPaymentProfileRequest') do |xml|
518
+ xml.refId input[:ref_id] if input[:ref_id]
519
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
520
+ xml.tag!('paymentProfile') do
521
+ if input[:payment_profile][:bill_to]
522
+ xml.tag!('billTo') do
523
+ xml.firstName input[:payment_profile][:bill_to][:first_name] if input[:payment_profile][:bill_to][:first_name]
524
+ xml.lastName input[:payment_profile][:bill_to][:last_name] if input[:payment_profile][:bill_to][:last_name]
525
+ xml.company input[:payment_profile][:bill_to][:company] if input[:payment_profile][:bill_to][:company]
526
+ xml.address input[:payment_profile][:bill_to][:address] if input[:payment_profile][:bill_to][:address]
527
+ xml.city input[:payment_profile][:bill_to][:city] if input[:payment_profile][:bill_to][:city]
528
+ xml.state input[:payment_profile][:bill_to][:state] if input[:payment_profile][:bill_to][:state]
529
+ xml.zip input[:payment_profile][:bill_to][:zip] if input[:payment_profile][:bill_to][:zip]
530
+ xml.country input[:payment_profile][:bill_to][:country] if input[:payment_profile][:bill_to][:country]
531
+ xml.phoneNumber input[:payment_profile][:bill_to][:phone_number] if input[:payment_profile][:bill_to][:phone_number]
532
+ xml.faxNumber input[:payment_profile][:bill_to][:fax_number] if input[:payment_profile][:bill_to][:fax_number]
533
+ end
534
+ end
535
+ xml.tag!('payment') do
536
+ if input[:payment_profile][:payment][:credit_card]
537
+ xml.tag!('creditCard') do
538
+ xml.cardNumber input[:payment_profile][:payment][:credit_card][:card_number] if input[:payment_profile][:payment][:credit_card][:card_number]
539
+ xml.expirationDate input[:payment_profile][:payment][:credit_card][:expiration_date] if input[:payment_profile][:payment][:credit_card][:expiration_date]
540
+ xml.cardCode input[:payment_profile][:payment][:credit_card][:card_code] if input[:payment_profile][:payment][:credit_card][:card_code]
541
+ end
542
+ elsif input[:payment_profile][:payment][:bank_account]
543
+ xml.tag!('bankAccount') do
544
+ xml.accountType input[:payment_profile][:payment][:bank_account][:account_type] if input[:payment_profile][:payment][:bank_account][:account_type]
545
+ xml.routingNumber input[:payment_profile][:payment][:bank_account][:routing_number] if input[:payment_profile][:payment][:bank_account][:routing_number]
546
+ xml.accountNumber input[:payment_profile][:payment][:bank_account][:account_number] if input[:payment_profile][:payment][:bank_account][:account_number]
547
+ xml.nameOnAccount input[:payment_profile][:payment][:bank_account][:name_on_account] if input[:payment_profile][:payment][:bank_account][:name_on_account]
548
+ xml.echeckType input[:payment_profile][:payment][:bank_account][:echeck_type] if input[:payment_profile][:payment][:bank_account][:echeck_type]
549
+ xml.bankName input[:payment_profile][:payment][:bank_account][:bank_name] if input[:payment_profile][:payment][:bank_account][:bank_name]
550
+ end
551
+ end
552
+ end
553
+ xml.customerPaymentProfileId input[:customer_payment_profile_id] if input[:customer_payment_profile_id]
554
+ xml.validationMode input[:payment_profile][:validation_mode] if input[:payment_profile][:validation_mode]
555
+ end
556
+ end
557
+ parse send(data)
558
+ end
559
+
560
+ # Update a shipping address for an existing customer profile.
561
+ #
562
+ # params:
563
+ # A hash containing all necessary fields
564
+ # all possible params:
565
+ # :ref_id => '<id>' (up to 20 digits (optional))
566
+ # :customer_profile_id => <id of customer> (numeric (necessary))
567
+ # :address => { (a hash containing address information(necessary)
568
+ # :first_name => '<billing first name>' (up to 50 characters (optional))
569
+ # :last_name => '<billing last name>' (up to 50 characters (optional))
570
+ # :company => '<company name>' (up to 50 characters (optional))
571
+ # :address => '<address>' (up to 60 characters (optional))
572
+ # :city => '<city>' (up to 40 characters (optional))
573
+ # :state => '<state>' (valid 2 character state code (optional))
574
+ # :zip => '<zip code>' (up to 20 characters (optional))
575
+ # :country => '<country>' (up to 60 characters (optional))
576
+ # :phone_number => '<phone number>' (up to 25 digits (optional))
577
+ # :fax_number => '<fax number>' (up to 25 digits (optional))
578
+ # :customer_address_id => <shipping id> (numeric (necessary))
579
+ # }
580
+ #
581
+ # returns:
582
+ # xml converted to hash table for easy access
583
+ def update_customer_shipping_address(input)
584
+ data = build_request('updateCustomerShippingAddressRequest') do |xml|
585
+ xml.refId input[:ref_id] if input[:ref_id]
586
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
587
+ xml.tag!('address') do
588
+ xml.firstName input[:address][:first_name] if input[:address][:first_name]
589
+ xml.lastName input[:address][:last_name] if input[:address][:last_name]
590
+ xml.company input[:address][:company] if input[:address][:company]
591
+ xml.address input[:address][:address] if input[:address][:address]
592
+ xml.city input[:address][:city] if input[:address][:city]
593
+ xml.state input[:address][:state] if input[:address][:state]
594
+ xml.zip input[:address][:zip] if input[:address][:zip]
595
+ xml.country input[:address][:country] if input[:address][:country]
596
+ xml.phoneNumber input[:address][:phone_number] if input[:address][:phone_number]
597
+ xml.faxNumber input[:address][:fax_number] if input[:address][:fax_number]
598
+ xml.customerAddressId input[:address][:customer_address_id] if input[:address][:customer_address_id]
599
+ end
600
+ end
601
+ parse send(data)
602
+ end
603
+
604
+ # # Update the status of a split tender group (a group of transactions, each of which pays for part of one order).
605
+ # def update_split_tender_group(input)
606
+ # data = build_request('updateSplitTenderGroupRequest') do |xml|
607
+ #
608
+ # DONT WANNA DO IT
609
+ #
610
+ # end
611
+ # parse send(data)
612
+ # end
613
+
614
+
615
+ # Verify an existing customer payment profile by generating a test transaction.
616
+ def validate_customer_payment_profile(input)
617
+ data = build_request('validateCustomerPaymentProfileRequest') do |xml|
618
+ xml.customerProfileId input[:customer_profile_id] if input[:customer_profile_id]
619
+ xml.customerPaymentProfileId input[:customer_payment_profile_id] if input[:customer_payment_profile_id]
620
+ xml.customerAddressId input[:customer_address_id] if input[:customer_address_id]
621
+ xml.cardCode input[:card_code] if input[:card_code]
622
+ xml.validationMode input[:validation_mode] if input[:validation_mode]
623
+ end
624
+ parse send(data)
625
+ end
626
+
627
+ # Create request head that is required for all requests.
628
+ #
629
+ # params:
630
+ # request string
631
+ # block of code containing all the additional xml code
632
+ #
633
+ # return:
634
+ # completed xml as a string
635
+ #
636
+ def build_request(request, xml = Builder::XmlMarkup.new(:indent => 2))
637
+ xml.instruct!
638
+ xml.tag!(request, :xmlns => 'AnetApi/xml/v1/schema/AnetApiSchema.xsd') do
639
+ xml.tag!('merchantAuthentication') do
640
+ xml.name @login
641
+ xml.transactionKey @key
642
+ end
643
+ yield(xml)
644
+ end
645
+ xml.target!
646
+ end
647
+
648
+ # parse all xml documents given back from the API
649
+ # return:
650
+ # hash containing all values from the xml doc
651
+ def parse(xml)
652
+ Crack::XML.parse(xml)
653
+ end
654
+
655
+ # get the response code from any response.
656
+ #
657
+ # prerams:
658
+ # response xml already parsed to hash
659
+ # returns:
660
+ # string - response code (something like "I00001" or "E00039")
661
+ def response_code(hash)
662
+ hash[hash.keys[0]]['messages']['message']['code']
663
+ end
664
+
665
+ # get the response code from any response.
666
+ #
667
+ # prerams:
668
+ # response xml already parsed to hash
669
+ # returns:
670
+ # string - response text (should be something like "Successful." or some long explaination why we it didnt work)
671
+ def response_text(hash)
672
+ hash[hash.keys[0]]['messages']['message']['text']
673
+ end
674
+
675
+
676
+ def send(xml) # returns xmlDoc of response
677
+ http = Net::HTTP.new(@uri.host, @uri.port)
678
+ http.use_ssl = 443 == @uri.port
679
+ begin
680
+ resp, body = http.post(@uri.path, xml, {'Content-Type' => 'text/xml'})
681
+ rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, Errno::ECONNREFUSED, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
682
+ puts e.message
683
+ end
684
+ body
685
+ end
686
+
687
+ end
data/spec/base.rb ADDED
@@ -0,0 +1,2 @@
1
+
2
+ Dir["#{File.dirname(__FILE__)}/../lib/**/*"].each { |lib| require lib }
@@ -0,0 +1,206 @@
1
+ require "#{File.dirname(__FILE__)}/../base"
2
+
3
+ describe AuthorizeCim do
4
+
5
+ before do
6
+ @client = AuthorizeCim.new(:endpoint => :test, :login => <must fill in login to test>, :key => <must fill in key to test>)
7
+ end
8
+
9
+ before :each do
10
+ hash = { :merchant_id => 'Lyon Hill', :description => 'Test User, should be deleted', :email => 'lyon@delorum.com'}
11
+ rtn = @client.create_customer_profile(hash)
12
+ @customer_profile = rtn['createCustomerProfileResponse']['customerProfileId']
13
+
14
+ hash2 = {:customer_profile_id => @customer_profile, :validation_mode => 'none', :payment_profile => {}}
15
+ hash2[:payment_profile] = {:customer_type => 'business', :payment => {}}
16
+ hash2[:payment_profile][:payment] = {:credit_card => {}}
17
+ hash2[:payment_profile][:payment][:credit_card] = {:card_number => '4007000000027', :expiration_date => '2011-03'}
18
+ rtn2 = @client.create_customer_payment_profile(hash2)
19
+ @customer_payment_profile = rtn2['createCustomerPaymentProfileResponse']['customerPaymentProfileId']
20
+
21
+ hash3 = {:customer_profile_id => @customer_profile, :address => {}}
22
+ hash3[:address] = {
23
+ :first_name => 'Lyon',
24
+ :last_name => 'Hill',
25
+ :company => 'Delorum',
26
+ :address => '218 N 2nd E',
27
+ :city => 'Rexburg',
28
+ :state => 'ID',
29
+ :zip => '83440',
30
+ :country => 'United States Of America',
31
+ :phone_number => '2086810512',
32
+ :fax_number => '(208)359-1103'}
33
+ rtn3 = @client.create_customer_shipping_address(hash3)
34
+ @customer_address_profile = rtn3['createCustomerShippingAddressResponse']['customerAddressId']
35
+ end
36
+
37
+ after :each do
38
+ hash4 = {:customer_profile_id => @customer_profile}
39
+ @client.delete_customer_profile(hash4)
40
+
41
+ end
42
+
43
+ it "creates a valid customer profile" do
44
+ thing = { :merchant_id => 'guy', :description => 'o GOODNESS!', :email => 'lyon@delorum.com'}
45
+ item = @client.create_customer_profile(thing)
46
+ item['createCustomerProfileResponse']['messages']['message']['code'].should == 'I00001'
47
+ kill = item['createCustomerProfileResponse']['customerProfileId']
48
+ @client.delete_customer_profile({:customer_profile_id => @customer_profile})
49
+ end
50
+
51
+ it "should fail to create a valid customer profile when it recieves invalid input" do
52
+ thing = {:useless_stuff => 'HAY, Im not useless :_('}
53
+ item = @client.create_customer_profile(thing)
54
+ item['createCustomerProfileResponse']['messages']['message']['code'].should_not == 'I00001'
55
+ end
56
+
57
+ it "create Customer payment profile with the minimum requirements" do
58
+ hash = {:customer_profile_id => @customer_profile, :validation_mode => 'none', :payment_profile => {}}
59
+ hash[:payment_profile] = {:customer_type => 'business', :payment => {}}
60
+ hash[:payment_profile][:payment] = {:credit_card => {}}
61
+ hash[:payment_profile][:payment][:credit_card] = {:card_number => '1234567890123456', :expiration_date => '2011-03'}
62
+ pay_profile_return = @client.create_customer_payment_profile(hash)
63
+ pay_profile_return['createCustomerPaymentProfileResponse']['messages']['message']['code'].should == 'I00001'
64
+ end
65
+
66
+ it "create Customer payment profile with the maximum allowed fields" do
67
+ hash = {:ref_id => 'letters', :customer_profile_id => @customer_profile, :validation_mode => 'none', :payment_profile => {}}
68
+ hash[:payment_profile] = {:customer_type => 'business', :payment => {}, :bill_to => {}}
69
+ hash[:payment_profile][:bill_to] = {:first_name => 'Lyon', :last_name => 'Hill', :company => 'Delorum', :address => '185 N 2000 E', :city => 'Rexburg', :state => 'ID', :zip => '83440', :country => 'USA', :phone_number => 2083591103, :fax_number => 2085895149}
70
+ hash[:payment_profile][:payment] = {:credit_card => {}}
71
+ hash[:payment_profile][:payment][:credit_card] = {:card_number => '1234567890123456', :expiration_date => '2011-03'}
72
+ pay_profile_return = @client.create_customer_payment_profile(hash)
73
+ pay_profile_return['createCustomerPaymentProfileResponse']['messages']['message']['code'].should == 'I00001'
74
+ end
75
+
76
+ it "create a valid customer shipping address" do
77
+ hash = {:customer_profile_id => @customer_profile, :address => {}}
78
+ hash[:address] = {:first_name => 'Tyler', :last_name => 'Flint', :company => 'Delorum', :address => '23 N 2nd E', :city => 'Rexburg', :state => 'ID', :zip => '83440', :country => 'USA', :phone_number => 2083598909, :fax_number => 2082315149}
79
+ address_return = @client.create_customer_shipping_address(hash)
80
+ address_return['createCustomerShippingAddressResponse']['messages']['message']['code'].should == 'I00001'
81
+ end
82
+
83
+
84
+ it "create a valid customer profile transaction" do
85
+ hash = {:ref_id => '2', :transaction => {}, :trans_type => 'profileTransPriorAuthCapture'}
86
+ hash[:transaction] = {:trans_type => 'profileTransAuthOnly', :transaction_type => {}}
87
+ hash[:transaction][:transaction_type] = {:amount => '101.11', :customer_profile_id => @customer_profile , :customer_payment_profile_id => @customer_payment_profile, :tax => {}}
88
+ hash[:transaction][:transaction_type][:tax] = {:amount => '23.21', :name => 'state taxes'}
89
+ transaction = @client.create_customer_profile_transaction(hash)
90
+ transaction['createCustomerProfileTransactionResponse']['messages']['message']['code'].should == 'I00001'
91
+ end
92
+
93
+ it "should get customer profile IDs" do
94
+ all_customer_profile_ids = @client.get_customer_profile_ids
95
+ all_customer_profile_ids['getCustomerProfileIdsResponse']['messages']['message']['code'].should == 'I00001'
96
+ end
97
+
98
+ it "should get all of one customers profile info" do
99
+ hash = {:customer_profile_id => @customer_profile}
100
+ one_customer_info = @client.get_customer_profile(hash)
101
+ one_customer_info['getCustomerProfileResponse']['messages']['message']['code'].should == 'I00001'
102
+ end
103
+
104
+ it "should get one customers payment profile(s)" do
105
+ one_customer_payment = @client.get_customer_payment_profile({:customer_profile_id => @customer_profile, :customer_payment_profile_id => @customer_payment_profile})
106
+ one_customer_payment['getCustomerPaymentProfileResponse']['messages']['message']['code'].should == 'I00001'
107
+ end
108
+
109
+ it "should get one customers shipping address" do
110
+ one_customer_shipping = @client.get_customer_shipping_address({:customer_profile_id => @customer_profile, :customer_address_id => @customer_address_profile})
111
+ one_customer_shipping['getCustomerShippingAddressResponse']['messages']['message']['code'].should == 'I00001'
112
+ end
113
+
114
+ it "should update a customer profile" do
115
+ hash = {:customer_profile_id => @customer_profile, :merchant_id => 'John Wayne'}
116
+ update_customer = @client.update_customer_profile(hash)
117
+ update_customer['updateCustomerProfileResponse']['messages']['message']['code'].should == 'I00001'
118
+ end
119
+
120
+ it "should update customer payment profile" do
121
+ hash = {:customer_profile_id => @customer_profile, :customer_payment_profile_id => @customer_payment_profile, :validation_mode => 'none', :payment_profile => {}}
122
+ hash[:payment_profile] = {:customer_type => 'business', :payment => {}}
123
+ hash[:payment_profile][:payment] = {:credit_card => {}}
124
+ hash[:payment_profile][:payment][:credit_card] = {:card_number => '1234567890123456', :expiration_date => '2011-03'}
125
+ pay_profile_return = @client.update_customer_payment_profile(hash)
126
+ pay_profile_return['updateCustomerPaymentProfileResponse']['messages']['message']['code'].should == 'I00001'
127
+ end
128
+
129
+
130
+ it "should update customer shipping address" do
131
+ hash3 = {:customer_profile_id => @customer_profile, :address => {}}
132
+ hash3[:address] = {
133
+ :first_name => 'Lyon',
134
+ :last_name => 'Hill',
135
+ :company => 'Delorum',
136
+ :address => '218 N 2nd E',
137
+ :city => 'Rexburg',
138
+ :state => 'ID',
139
+ :zip => '83440',
140
+ :country => 'United States Of America',
141
+ :phone_number => '2086810512',
142
+ :fax_number => '(208)359-1103',
143
+ :customer_address_id => @customer_address_profile }
144
+
145
+ end
146
+
147
+ it "should validate Customer Payment Profile Request" do
148
+
149
+ end
150
+
151
+ it "should parse return statements for all xml returns except the get functions" do
152
+ xml = <<EOF
153
+ <?xml version="1.0" encoding="utf-8"?>
154
+ <createCustomerProfileResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
155
+ <messages>
156
+ <resultCode>Ok</resultCode>
157
+ <message>
158
+ <code>I00001</code>
159
+ <text>Successful.</text>
160
+ </message>
161
+ </messages>
162
+ <customerProfileId>2667736</customerProfileId>
163
+ <customerPaymentProfileIdList />
164
+ <customerShippingAddressIdList />
165
+ <validationDirectResponseList />
166
+ </createCustomerProfileResponse>
167
+ EOF
168
+
169
+ item = @client.parse(xml)
170
+ item['createCustomerProfileResponse']['messages']['message']['code'].should == 'I00001'
171
+ item['createCustomerProfileResponse']['customerProfileId'].should == '2667736'
172
+ end
173
+
174
+ it "should delete a customer profile" do
175
+ hash = {:customer_profile_id => @customer_profile}
176
+ rtn = @client.delete_customer_profile(hash)
177
+ rtn['deleteCustomerProfileResponse']['messages']['message']['code'].should == 'I00001'
178
+
179
+ end
180
+
181
+ it "should delete a customer payment profile" do
182
+ hash = {:customer_profile_id => @customer_profile, :customer_payment_profile_id => @customer_payment_profile}
183
+ rtn = @client.delete_customer_profile(hash)
184
+ rtn['deleteCustomerProfileResponse']['messages']['message']['code'].should == 'I00001'
185
+
186
+ end
187
+
188
+ it "should delete a customer shipping address" do
189
+ hash = {:customer_profile_id => @customer_profile, :customer_address_id => @customer_address_profile}
190
+ rtn = @client.delete_customer_profile(hash)
191
+ rtn['deleteCustomerProfileResponse']['messages']['message']['code'].should == 'I00001'
192
+
193
+ end
194
+
195
+ it "should get the response code from the hash" do
196
+ xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><createCustomerProfileResponse xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\"><messages><resultCode>Ok</resultCode><message><code>I00001</code><text>Successful.</text></message></messages><customerProfileId>2688406</customerProfileId><customerPaymentProfileIdList /><customerShippingAddressIdList /><validationDirectResponseList /></createCustomerProfileResponse>"
197
+ hash = @client.parse(xml)
198
+ "I00001".should == @client.response_code(hash)
199
+ end
200
+
201
+ it "should get the plain text response from the hash" do
202
+ xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><createCustomerProfileResponse xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\"><messages><resultCode>Ok</resultCode><message><code>I00001</code><text>Successful.</text></message></messages><customerProfileId>2688406</customerProfileId><customerPaymentProfileIdList /><customerShippingAddressIdList /><validationDirectResponseList /></createCustomerProfileResponse>"
203
+ hash = @client.parse(xml)
204
+ "Successful.".should == @client.response_text(hash)
205
+ end
206
+ end
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: authorize_cim
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Tyler Flint
13
+ - Lyon Hill
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-11-29 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: crack
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ prerelease: false
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: builder
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *id003
60
+ - !ruby/object:Gem::Dependency
61
+ name: webmock
62
+ requirement: &id004 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: *id004
73
+ - !ruby/object:Gem::Dependency
74
+ name: jeweler
75
+ requirement: &id005 !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ segments:
81
+ - 0
82
+ version: "0"
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: *id005
86
+ - !ruby/object:Gem::Dependency
87
+ name: crack
88
+ requirement: &id006 !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: *id006
99
+ - !ruby/object:Gem::Dependency
100
+ name: builder
101
+ requirement: &id007 !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ segments:
107
+ - 0
108
+ version: "0"
109
+ type: :runtime
110
+ prerelease: false
111
+ version_requirements: *id007
112
+ description: Ruby Gem for integrating Authorize.net Customer Information Manager (CIM)
113
+ email: tylerflint@gmail.com
114
+ executables: []
115
+
116
+ extensions: []
117
+
118
+ extra_rdoc_files:
119
+ - README
120
+ files:
121
+ - Gemfile
122
+ - Gemfile.lock
123
+ - README
124
+ - Rakefile
125
+ - VERSION
126
+ - lib/authorize_cim.rb
127
+ - spec/base.rb
128
+ - spec/lib/authorize_cim_spec.rb
129
+ has_rdoc: true
130
+ homepage: http://github.com/tylerflint/authorize_cim
131
+ licenses: []
132
+
133
+ post_install_message:
134
+ rdoc_options: []
135
+
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ segments:
144
+ - 0
145
+ version: "0"
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ requirements: []
155
+
156
+ rubyforge_project:
157
+ rubygems_version: 1.3.7
158
+ signing_key:
159
+ specification_version: 3
160
+ summary: Ruby Gem for integrating Authorize.net Customer Information Manager (CIM)
161
+ test_files:
162
+ - spec/base.rb
163
+ - spec/lib/authorize_cim_spec.rb