activemerchant 1.20.4 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. data.tar.gz.sig +0 -0
  2. data/CHANGELOG +29 -0
  3. data/CONTRIBUTORS +13 -0
  4. data/lib/active_merchant/billing/credit_card_methods.rb +1 -1
  5. data/lib/active_merchant/billing/gateway.rb +1 -1
  6. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +104 -18
  7. data/lib/active_merchant/billing/gateways/beanstream.rb +29 -1
  8. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +105 -3
  9. data/lib/active_merchant/billing/gateways/braintree_orange.rb +4 -0
  10. data/lib/active_merchant/billing/gateways/certo_direct.rb +279 -0
  11. data/lib/active_merchant/billing/gateways/epay.rb +2 -2
  12. data/lib/active_merchant/billing/gateways/eway_managed.rb +1 -0
  13. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +1 -0
  14. data/lib/active_merchant/billing/gateways/nab_transact.rb +244 -0
  15. data/lib/active_merchant/billing/gateways/payflow.rb +10 -2
  16. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +1 -0
  17. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +1 -1
  18. data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +43 -0
  19. data/lib/active_merchant/billing/gateways/paypal_express.rb +36 -1
  20. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +8 -3
  21. data/lib/active_merchant/billing/gateways/quickpay.rb +1 -0
  22. data/lib/active_merchant/billing/gateways/samurai.rb +1 -0
  23. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +136 -49
  24. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +1 -1
  25. data/lib/active_merchant/billing/gateways/stripe.rb +23 -11
  26. data/lib/active_merchant/billing/gateways/verifi.rb +2 -2
  27. data/lib/active_merchant/billing/gateways/viaklix.rb +1 -1
  28. data/lib/active_merchant/billing/integrations/action_view_helper.rb +5 -1
  29. data/lib/active_merchant/billing/integrations/authorize_net_sim.rb +38 -0
  30. data/lib/active_merchant/billing/integrations/authorize_net_sim/helper.rb +228 -0
  31. data/lib/active_merchant/billing/integrations/authorize_net_sim/notification.rb +340 -0
  32. data/lib/active_merchant/billing/integrations/helper.rb +13 -1
  33. data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +1 -1
  34. data/lib/active_merchant/version.rb +1 -1
  35. metadata +37 -31
  36. metadata.gz.sig +0 -0
@@ -94,6 +94,10 @@ module ActiveMerchant #:nodoc:
94
94
  xml.tag! 'Description', options[:description] unless options[:description].blank?
95
95
  xml.tag! 'Comment', options[:comment] unless options[:comment].blank?
96
96
  xml.tag!('ExtData', 'Name'=> 'COMMENT2', 'Value'=> options[:comment2]) unless options[:comment2].blank?
97
+ xml.tag! 'TaxAmt', options[:taxamt] unless options[:taxamt].blank?
98
+ xml.tag! 'FreightAmt', options[:freightamt] unless options[:freightamt].blank?
99
+ xml.tag! 'DutyAmt', options[:dutyamt] unless options[:dutyamt].blank?
100
+ xml.tag! 'DiscountAmt', options[:discountamt] unless options[:discountamt].blank?
97
101
 
98
102
  billing_address = options[:billing_address] || options[:address]
99
103
  add_address(xml, 'BillTo', billing_address, options) if billing_address
@@ -122,6 +126,10 @@ module ActiveMerchant #:nodoc:
122
126
  # Comment and Comment2 will show up in manager.paypal.com as Comment1 and Comment2
123
127
  xml.tag! 'Comment', options[:comment] unless options[:comment].blank?
124
128
  xml.tag!('ExtData', 'Name'=> 'COMMENT2', 'Value'=> options[:comment2]) unless options[:comment2].blank?
129
+ xml.tag! 'TaxAmt', options[:taxamt] unless options[:taxamt].blank?
130
+ xml.tag! 'FreightAmt', options[:freightamt] unless options[:freightamt].blank?
131
+ xml.tag! 'DutyAmt', options[:dutyamt] unless options[:dutyamt].blank?
132
+ xml.tag! 'DiscountAmt', options[:discountamt] unless options[:discountamt].blank?
125
133
 
126
134
  billing_address = options[:billing_address] || options[:address]
127
135
  add_address(xml, 'BillTo', billing_address, options) if billing_address
@@ -161,8 +169,8 @@ module ActiveMerchant #:nodoc:
161
169
  end
162
170
 
163
171
  def expdate(creditcard)
164
- year = sprintf("%.4i", creditcard.year)
165
- month = sprintf("%.2i", creditcard.month)
172
+ year = sprintf("%.4i", creditcard.year.to_s.sub(/^0+/, ''))
173
+ month = sprintf("%.2i", creditcard.month.to_s.sub(/^0+/, ''))
166
174
 
167
175
  "#{year}#{month}"
168
176
  end
@@ -126,6 +126,7 @@ module ActiveMerchant #:nodoc:
126
126
  xml.tag! 'EMail', options[:email] unless options[:email].blank?
127
127
  xml.tag! 'Phone', address[:phone] unless address[:phone].blank?
128
128
  xml.tag! 'CustCode', options[:customer] if !options[:customer].blank? && tag == 'BillTo'
129
+ xml.tag! 'PONum', options[:po_number] if !options[:po_number].blank? && tag == 'BillTo'
129
130
 
130
131
  xml.tag! 'Address' do
131
132
  xml.tag! 'Street', address[:address1] unless address[:address1].blank?
@@ -8,7 +8,7 @@ module ActiveMerchant #:nodoc:
8
8
  base.cattr_accessor :signature
9
9
  end
10
10
 
11
- API_VERSION = '62.0'
11
+ API_VERSION = '72'
12
12
 
13
13
  URLS = {
14
14
  :test => { :certificate => 'https://api.sandbox.paypal.com/2.0/',
@@ -0,0 +1,43 @@
1
+ require File.dirname(__FILE__) + '/paypal/paypal_common_api'
2
+ require File.dirname(__FILE__) + '/paypal/paypal_express_response'
3
+ require File.dirname(__FILE__) + '/paypal_express_common'
4
+
5
+ module ActiveMerchant #:nodoc:
6
+ module Billing #:nodoc:
7
+ class PaypalDigitalGoodsGateway < PaypalExpressGateway
8
+ self.test_redirect_url = 'https://www.sandbox.paypal.com/incontext'
9
+ self.live_redirect_url = 'https://www.paypal.com/incontext'
10
+
11
+ self.supported_countries = %w(AU CA CN FI GB ID IN IT MY NO NZ PH PL SE SG TH VN)
12
+ self.homepage_url = 'https://www.x.com/community/ppx/xspaces/digital_goods'
13
+ self.display_name = 'PayPal Express Checkout for Digital Goods'
14
+
15
+ def redirect_url_for(token, options = {})
16
+ "#{redirect_url}?token=#{token}&useraction=commit"
17
+ end
18
+
19
+ # GATEWAY.setup_purchase(100,
20
+ # :ip => "127.0.0.1",
21
+ # :description => "Test Title",
22
+ # :return_url => "http://return.url",
23
+ # :cancel_return_url => "http://cancel.url",
24
+ # :items => [ { :name => "Charge",
25
+ # :number => "1",
26
+ # :quantity => "1",
27
+ # :amount => 100,
28
+ # :description => "Description",
29
+ # :category => "Digital" } ] )
30
+ def build_setup_request(action, money, options)
31
+ requires!(options, :items)
32
+ raise ArgumentError, "Must include at least 1 Item" unless options[:items].length > 0
33
+ options[:items].each do |item|
34
+ requires!(item, :name, :number, :quantity, :amount, :description, :category)
35
+ raise ArgumentError, "Each of the items must have the category 'Digital'" unless item[:category] == 'Digital'
36
+ end
37
+
38
+ super
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -41,6 +41,12 @@ module ActiveMerchant #:nodoc:
41
41
  commit 'DoExpressCheckoutPayment', build_sale_or_authorization_request('Sale', money, options)
42
42
  end
43
43
 
44
+ def reference_transaction(money, options = {})
45
+ requires!(options, :reference_id, :payment_type, :invoice_id, :description, :ip)
46
+
47
+ commit 'DoReferenceTransaction', build_reference_transaction_request('Sale', money, options)
48
+ end
49
+
44
50
  private
45
51
  def build_get_details_request(token)
46
52
  xml = Builder::XmlMarkup.new :indent => 2
@@ -106,6 +112,7 @@ module ActiveMerchant #:nodoc:
106
112
  xml.tag! 'n2:NoShipping', options[:no_shipping] ? '1' : '0'
107
113
  xml.tag! 'n2:AddressOverride', options[:address_override] ? '1' : '0'
108
114
  xml.tag! 'n2:LocaleCode', options[:locale] unless options[:locale].blank?
115
+ xml.tag! 'n2:BrandName', options[:brand_name] unless options[:brand_name].blank?
109
116
  # Customization of the payment page
110
117
  xml.tag! 'n2:PageStyle', options[:page_style] unless options[:page_style].blank?
111
118
  xml.tag! 'n2:cpp-header-image', options[:header_image] unless options[:header_image].blank?
@@ -149,6 +156,7 @@ module ActiveMerchant #:nodoc:
149
156
  add_items_xml(xml, options, currency_code) if options[:items]
150
157
 
151
158
  xml.tag! 'n2:PaymentAction', action
159
+ xml.tag! 'n2:Custom', options[:custom] unless options[:custom].blank?
152
160
  end
153
161
 
154
162
  if options[:shipping_options]
@@ -170,6 +178,32 @@ module ActiveMerchant #:nodoc:
170
178
  xml.target!
171
179
  end
172
180
 
181
+ def build_reference_transaction_request(action, money, options)
182
+ currency_code = options[:currency] || currency(money)
183
+
184
+ xml = Builder::XmlMarkup.new :indent => 2
185
+ xml.tag! 'DoReferenceTransactionReq', 'xmlns' => PAYPAL_NAMESPACE do
186
+ xml.tag! 'DoReferenceTransactionRequest', 'xmlns:n2' => EBAY_NAMESPACE do
187
+ xml.tag! 'n2:Version', API_VERSION
188
+ xml.tag! 'n2:DoReferenceTransactionRequestDetails' do
189
+ xml.tag! 'n2:ReferenceID', options[:reference_id]
190
+ xml.tag! 'n2:PaymentAction', action
191
+ xml.tag! 'n2:PaymentType', options[:payment_type] || 'Any'
192
+ xml.tag! 'n2:PaymentDetails' do
193
+ xml.tag! 'n2:OrderTotal', amount(money).to_f.zero? ? localized_amount(100, currency_code) : localized_amount(money, currency_code), 'currencyID' => currency_code
194
+ xml.tag! 'n2:OrderDescription', options[:description]
195
+ xml.tag! 'n2:InvoiceID', options[:invoice_id]
196
+ xml.tag! 'n2:ButtonSource', 'ActiveMerchant'
197
+ xml.tag! 'n2:NotifyURL', ''
198
+ end
199
+ xml.tag! 'n2:IPAddress', options[:ip]
200
+ end
201
+ end
202
+ end
203
+
204
+ xml.target!
205
+ end
206
+
173
207
  def build_response(success, message, response, options = {})
174
208
  PaypalExpressResponse.new(success, message, response, options)
175
209
  end
@@ -187,9 +221,10 @@ module ActiveMerchant #:nodoc:
187
221
  end
188
222
  xml.tag! 'n2:Description', item[:description]
189
223
  xml.tag! 'n2:ItemURL', item[:url]
224
+ xml.tag! 'n2:ItemCategory', item[:category] if item[:category]
190
225
  end
191
226
  end
192
227
  end
193
228
  end
194
229
  end
195
- end
230
+ end
@@ -2,8 +2,13 @@ module ActiveMerchant
2
2
  module Billing
3
3
  module PaypalExpressCommon
4
4
  def self.included(base)
5
- base.cattr_accessor :test_redirect_url
6
- base.cattr_accessor :live_redirect_url
5
+ if base.respond_to?(:class_attribute)
6
+ base.class_attribute :test_redirect_url
7
+ base.class_attribute :live_redirect_url
8
+ else
9
+ base.class_inheritable_accessor :test_redirect_url
10
+ base.class_inheritable_accessor :live_redirect_url
11
+ end
7
12
  base.live_redirect_url = 'https://www.paypal.com/cgibin/webscr'
8
13
  end
9
14
 
@@ -22,4 +27,4 @@ module ActiveMerchant
22
27
  end
23
28
  end
24
29
  end
25
- end
30
+ end
@@ -215,6 +215,7 @@ module ActiveMerchant #:nodoc:
215
215
  end
216
216
 
217
217
  def add_testmode(post)
218
+ return if post[:transaction].present?
218
219
  post[:testmode] = test? ? '1' : '0'
219
220
  end
220
221
 
@@ -76,6 +76,7 @@ module ActiveMerchant #:nodoc:
76
76
  :zip => address[:zip],
77
77
  :sandbox => test?
78
78
  })
79
+ result.retain if options[:retain] && result.is_sensitive_data_valid && result.payment_method_token
79
80
 
80
81
  Response.new(result.is_sensitive_data_valid,
81
82
  message_from_result(result),
@@ -4,30 +4,33 @@ module ActiveMerchant #:nodoc:
4
4
  module Billing #:nodoc:
5
5
  class SecurePayAuGateway < Gateway
6
6
  API_VERSION = 'xml-4.2'
7
-
7
+ PERIODIC_API_VERSION = 'spxml-3.0'
8
+
8
9
  TEST_URL = 'https://www.securepay.com.au/test/payment'
9
10
  LIVE_URL = 'https://www.securepay.com.au/xmlapi/payment'
10
-
11
+ TEST_PERIODIC_URL = "https://test.securepay.com.au/xmlapi/periodic"
12
+ LIVE_PERIODIC_URL = "https://api.securepay.com.au/xmlapi/periodic"
13
+
11
14
  self.supported_countries = ['AU']
12
15
  self.supported_cardtypes = [:visa, :master, :american_express, :diners_club, :jcb]
13
-
16
+
14
17
  # The homepage URL of the gateway
15
18
  self.homepage_url = 'http://securepay.com.au'
16
-
19
+
17
20
  # The name of the gateway
18
21
  self.display_name = 'SecurePay'
19
-
22
+
20
23
  class_attribute :request_timeout
21
24
  self.request_timeout = 60
22
-
25
+
23
26
  self.money_format = :cents
24
27
  self.default_currency = 'AUD'
25
-
28
+
26
29
  # 0 Standard Payment
27
- # 4 Refund
28
- # 6 Client Reversal (Void)
29
- # 10 Preauthorise
30
- # 11 Preauth Complete (Advice)
30
+ # 4 Refund
31
+ # 6 Client Reversal (Void)
32
+ # 10 Preauthorise
33
+ # 11 Preauth Complete (Advice)
31
34
  TRANSACTIONS = {
32
35
  :purchase => 0,
33
36
  :authorization => 10,
@@ -35,33 +38,50 @@ module ActiveMerchant #:nodoc:
35
38
  :void => 6,
36
39
  :refund => 4
37
40
  }
38
-
41
+
42
+ PERIODIC_ACTIONS = {
43
+ :add_triggered => "add",
44
+ :remove_triggered => "delete",
45
+ :trigger => "trigger"
46
+ }
47
+
48
+ PERIODIC_TYPES = {
49
+ :add_triggered => 4,
50
+ :remove_triggered => nil,
51
+ :trigger => nil
52
+ }
53
+
39
54
  SUCCESS_CODES = [ '00', '08', '11', '16', '77' ]
40
-
55
+
41
56
  def initialize(options = {})
42
57
  requires!(options, :login, :password)
43
58
  @options = options
44
59
  super
45
60
  end
46
-
61
+
47
62
  def test?
48
63
  @options[:test] || super
49
64
  end
50
-
51
- def purchase(money, credit_card, options = {})
52
- requires!(options, :order_id)
53
- commit :purchase, build_purchase_request(money, credit_card, options)
54
- end
55
-
65
+
66
+ def purchase(money, credit_card_or_stored_id, options = {})
67
+ if credit_card_or_stored_id.is_a?(ActiveMerchant::Billing::CreditCard)
68
+ requires!(options, :order_id)
69
+ commit :purchase, build_purchase_request(money, credit_card_or_stored_id, options)
70
+ else
71
+ options[:billing_id] = credit_card_or_stored_id.to_s
72
+ commit_periodic(build_periodic_item(:trigger, money, nil, options))
73
+ end
74
+ end
75
+
56
76
  def authorize(money, credit_card, options = {})
57
77
  requires!(options, :order_id)
58
78
  commit :authorization, build_purchase_request(money, credit_card, options)
59
79
  end
60
-
80
+
61
81
  def capture(money, reference, options = {})
62
82
  commit :capture, build_reference_request(money, reference)
63
83
  end
64
-
84
+
65
85
  def refund(money, reference, options = {})
66
86
  commit :refund, build_reference_request(money, reference)
67
87
  end
@@ -74,54 +94,64 @@ module ActiveMerchant #:nodoc:
74
94
  def void(reference, options = {})
75
95
  commit :void, build_reference_request(nil, reference)
76
96
  end
77
-
97
+
98
+ def store(creditcard, options = {})
99
+ requires!(options, :billing_id, :amount)
100
+ commit_periodic(build_periodic_item(:add_triggered, options[:amount], creditcard, options))
101
+ end
102
+
103
+ def unstore(identification, options = {})
104
+ options[:billing_id] = identification
105
+ commit_periodic(build_periodic_item(:remove_triggered, options[:amount], nil, options))
106
+ end
107
+
78
108
  private
79
-
109
+
80
110
  def build_purchase_request(money, credit_card, options)
81
111
  xml = Builder::XmlMarkup.new
82
-
112
+
83
113
  xml.tag! 'amount', amount(money)
84
- xml.tag! 'currency', options[:currency] || currency(money)
114
+ xml.tag! 'currency', options[:currency] || currency(money)
85
115
  xml.tag! 'purchaseOrderNo', options[:order_id].to_s.gsub(/[ ']/, '')
86
-
116
+
87
117
  xml.tag! 'CreditCardInfo' do
88
118
  xml.tag! 'cardNumber', credit_card.number
89
119
  xml.tag! 'expiryDate', expdate(credit_card)
90
120
  xml.tag! 'cvv', credit_card.verification_value if credit_card.verification_value?
91
121
  end
92
-
122
+
93
123
  xml.target!
94
124
  end
95
-
125
+
96
126
  def build_reference_request(money, reference)
97
127
  xml = Builder::XmlMarkup.new
98
-
128
+
99
129
  transaction_id, order_id, preauth_id, original_amount = reference.split("*")
100
130
  xml.tag! 'amount', (money ? amount(money) : original_amount)
101
131
  xml.tag! 'currency', options[:currency] || currency(money)
102
132
  xml.tag! 'txnID', transaction_id
103
133
  xml.tag! 'purchaseOrderNo', order_id
104
134
  xml.tag! 'preauthID', preauth_id
105
-
135
+
106
136
  xml.target!
107
137
  end
108
-
138
+
109
139
  def build_request(action, body)
110
140
  xml = Builder::XmlMarkup.new
111
141
  xml.instruct!
112
142
  xml.tag! 'SecurePayMessage' do
113
143
  xml.tag! 'MessageInfo' do
114
- xml.tag! 'messageID', Utils.generate_unique_id.slice(0, 30)
144
+ xml.tag! 'messageID', ActiveMerchant::Utils.generate_unique_id.slice(0, 30)
115
145
  xml.tag! 'messageTimestamp', generate_timestamp
116
146
  xml.tag! 'timeoutValue', request_timeout
117
147
  xml.tag! 'apiVersion', API_VERSION
118
148
  end
119
-
149
+
120
150
  xml.tag! 'MerchantInfo' do
121
151
  xml.tag! 'merchantID', @options[:login]
122
152
  xml.tag! 'password', @options[:password]
123
153
  end
124
-
154
+
125
155
  xml.tag! 'RequestType', 'Payment'
126
156
  xml.tag! 'Payment' do
127
157
  xml.tag! 'TxnList', "count" => 1 do
@@ -133,40 +163,98 @@ module ActiveMerchant #:nodoc:
133
163
  end
134
164
  end
135
165
  end
136
-
166
+
137
167
  xml.target!
138
168
  end
139
-
169
+
140
170
  def commit(action, request)
141
171
  response = parse(ssl_post(test? ? TEST_URL : LIVE_URL, build_request(action, request)))
142
-
143
- Response.new(success?(response), message_from(response), response,
144
- :test => test?,
172
+
173
+ Response.new(success?(response), message_from(response), response,
174
+ :test => test?,
175
+ :authorization => authorization_from(response)
176
+ )
177
+ end
178
+
179
+ def build_periodic_item(action, money, credit_card, options)
180
+ xml = Builder::XmlMarkup.new
181
+
182
+ xml.tag! 'actionType', PERIODIC_ACTIONS[action]
183
+ xml.tag! 'clientID', options[:billing_id].to_s
184
+
185
+ if credit_card
186
+ xml.tag! 'CreditCardInfo' do
187
+ xml.tag! 'cardNumber', credit_card.number
188
+ xml.tag! 'expiryDate', expdate(credit_card)
189
+ xml.tag! 'cvv', credit_card.verification_value if credit_card.verification_value?
190
+ end
191
+ end
192
+ xml.tag! 'amount', amount(money)
193
+ xml.tag! 'periodicType', PERIODIC_TYPES[action] if PERIODIC_TYPES[action]
194
+
195
+ xml.target!
196
+ end
197
+
198
+ def build_periodic_request(body)
199
+ xml = Builder::XmlMarkup.new
200
+ xml.instruct!
201
+ xml.tag! 'SecurePayMessage' do
202
+ xml.tag! 'MessageInfo' do
203
+ xml.tag! 'messageID', ActiveMerchant::Utils.generate_unique_id.slice(0, 30)
204
+ xml.tag! 'messageTimestamp', generate_timestamp
205
+ xml.tag! 'timeoutValue', request_timeout
206
+ xml.tag! 'apiVersion', PERIODIC_API_VERSION
207
+ end
208
+
209
+ xml.tag! 'MerchantInfo' do
210
+ xml.tag! 'merchantID', @options[:login]
211
+ xml.tag! 'password', @options[:password]
212
+ end
213
+
214
+ xml.tag! 'RequestType', 'Periodic'
215
+ xml.tag! 'Periodic' do
216
+ xml.tag! 'PeriodicList', "count" => 1 do
217
+ xml.tag! 'PeriodicItem', "ID" => 1 do
218
+ xml << body
219
+ end
220
+ end
221
+ end
222
+ end
223
+ xml.target!
224
+ end
225
+
226
+ def commit_periodic(request)
227
+ my_request = build_periodic_request(request)
228
+ #puts my_request
229
+ response = parse(ssl_post(test? ? TEST_PERIODIC_URL : LIVE_PERIODIC_URL, my_request))
230
+
231
+ Response.new(success?(response), message_from(response), response,
232
+ :test => test?,
145
233
  :authorization => authorization_from(response)
146
234
  )
147
235
  end
148
-
236
+
149
237
  def success?(response)
150
238
  SUCCESS_CODES.include?(response[:response_code])
151
239
  end
152
-
240
+
153
241
  def authorization_from(response)
154
242
  [response[:txn_id], response[:purchase_order_no], response[:preauth_id], response[:amount]].join('*')
155
243
  end
156
-
244
+
157
245
  def message_from(response)
158
246
  response[:response_text] || response[:status_description]
159
247
  end
160
-
248
+
161
249
  def expdate(credit_card)
162
250
  "#{format(credit_card.month, :two_digits)}/#{format(credit_card.year, :two_digits)}"
163
251
  end
164
-
252
+
165
253
  def parse(body)
166
254
  xml = REXML::Document.new(body)
167
255
 
168
256
  response = {}
169
-
257
+
170
258
  xml.root.elements.to_a.each do |node|
171
259
  parse_element(response, node)
172
260
  end
@@ -181,13 +269,12 @@ module ActiveMerchant #:nodoc:
181
269
  response[node.name.underscore.to_sym] = node.text
182
270
  end
183
271
  end
184
-
272
+
185
273
  # YYYYDDMMHHNNSSKKK000sOOO
186
274
  def generate_timestamp
187
275
  time = Time.now.utc
188
276
  time.strftime("%Y%d%m%H%M%S#{time.usec}+000")
189
- end
277
+ end
190
278
  end
191
279
  end
192
280
  end
193
-