Class: Agms::TransactionRequest

Inherits:
Request
  • Object
show all
Defined in:
lib/agms/request/transaction_request.rb

Instance Method Summary collapse

Methods inherited from Request

#get, #getField, #getValidationErrors, #getValidationMessages, #setField

Constructor Details

#initialize(op) ⇒ TransactionRequest

Returns a new instance of TransactionRequest.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/agms/request/transaction_request.rb', line 7

def initialize(op)
  super(op)
  @fields = {
      :TransactionType => {:setting => '', :value => ''},
      :PaymentType => {:setting => '', :value => 'creditcard'},
      :Amount => {:setting => '', :value => ''}, # Required for sale or auth
      :TipAmount => {:setting => '', :value => ''}, # Required for Adjustment
      :Tax => {:setting => '', :value => ''},
      :Shipping => {:setting => '', :value => ''},
      :OrderDescription => {:setting => '', :value => ''},
      :OrderID => {:setting => '', :value => ''},
      :ClerkID => {:setting => '', :value => ''},
      :PONumber => {:setting => '', :value => ''},
      :CCNumber => {:setting => '', :value => ''}, # Required for sale and auth if payment type = creditcard without safe id
      :CCExpDate => {:setting => '', :value => ''}, # Required for sale and auth if payment type = creditcard without safe id
      :CVV => {:setting => '', :value => ''},
      :CheckName => {:setting => '', :value => ''}, # Required for sale and auth if payment type = check without safe id
      :CheckABA => {:setting => '', :value => ''}, # Required for sale and auth if payment type = check without safe id
      :CheckAccount => {:setting => '', :value => ''}, # Required for sale and auth if payment type = check without safe id
      :AccountHolderType => {:setting => '', :value => ''}, # Required for sale and auth if payment type = check without safe id
      :AccountType => {:setting => '', :value => ''}, # Required for sale and auth if payment type = check without safe id
      :SecCode => {:setting => '', :value => ''}, # Required for sale and auth if payment type = check without safe id
      :FirstName => {:setting => '', :value => ''},
      :LastName => {:setting => '', :value => ''},
      :Company => {:setting => '', :value => ''},
      :Address1 => {:setting => '', :value => ''},
      :Address2 => {:setting => '', :value => ''},
      :City => {:setting => '', :value => ''},
      :State => {:setting => '', :value => ''},
      :Zip => {:setting => '', :value => ''},
      :Country => {:setting => '', :value => ''},
      :Phone => {:setting => '', :value => ''},
      :Fax => {:setting => '', :value => ''},
      :EMail => {:setting => '', :value => ''},
      :Website => {:setting => '', :value => ''},
      :ShippingFirstName => {:setting => '', :value => ''},
      :ShippingLastName => {:setting => '', :value => ''},
      :ShippingCompany => {:setting => '', :value => ''},
      :ShippingAddress1 => {:setting => '', :value => ''},
      :ShippingAddress2 => {:setting => '', :value => ''},
      :ShippingCity => {:setting => '', :value => ''},
      :ShippingState => {:setting => '', :value => ''},
      :ShippingZip => {:setting => '', :value => ''},
      :ShippingCountry => {:setting => '', :value => ''},
      :ShippingEmail => {:setting => '', :value => ''},
      :ShippingPhone => {:setting => '', :value => ''},
      :ShippingFax => {:setting => '', :value => ''},
      :ProcessorID => {:setting => '', :value => ''},
      :TransactionID => {:setting => '', :value => ''},
      :Tracking_Number => {:setting => '', :value => ''},
      :Shipping_Carrier => {:setting => '', :value => ''},
      :IPAddress => {:setting => '', :value => ''},
      :Track1 => {:setting => '', :value => ''},
      :Track2 => {:setting => '', :value => ''},
      :Track3 => {:setting => '', :value => ''},
      :Custom_Field_1 => {:setting => '', :value => ''},
      :Custom_Field_2 => {:setting => '', :value => ''},
      :Custom_Field_3 => {:setting => '', :value => ''},
      :Custom_Field_4 => {:setting => '', :value => ''},
      :Custom_Field_5 => {:setting => '', :value => ''},
      :Custom_Field_6 => {:setting => '', :value => ''},
      :Custom_Field_7 => {:setting => '', :value => ''},
      :Custom_Field_8 => {:setting => '', :value => ''},
      :Custom_Field_9 => {:setting => '', :value => ''},
      :Custom_Field_10 => {:setting => '', :value => ''},
      :SAFE_Action => {:setting => '', :value => ''},
      :SAFE_ID => {:setting => '', :value => ''},
      :ReceiptType => {:setting => '', :value => ''},
      :MagData => {:setting => '', :value => ''},
      :MagHardware => {:setting => '', :value => ''},
  }

  @numeric = %w(Amount Tax Shipping ProcessorID TransactionID CheckABA CheckAccount CCNumber CCExpDate)

  @enums = {
      :TransactionType => %w(sale auth safe\ only capture void refund update adjustment),
      :SAFE_Action => %w(add_safe update_safe delete_safe),
      :PaymentType => %w(creditcard check),
      :SecCode => %w(PPD WEB TEL CCD),
      :AccountHolderType => %w(business personal),
      :AccountType => %w(checking savings),
      :MagHardware => %w(MAGTEK IDTECH),
      :Shipping_Carrier => %w(ups fedex dhl usps UPS Fedex DHL USPS),
  }

  @digit_2 = %w(State ShippingState)

  @amount = %w(Amount TipAmount Tax Shipping)

  # Override mapping with api-specific field maps
  @mapping[:shipping_tracking_number] = :Tracking_Number
  @mapping[:shipping_carrier] = :Shipping_Carrier

end

Instance Method Details

#getFieldsObject



209
210
211
# File 'lib/agms/request/transaction_request.rb', line 209

def getFields
  return getFieldArray
end

#getParams(request) ⇒ Object



213
214
215
# File 'lib/agms/request/transaction_request.rb', line 213

def getParams(request)
  return {:objparameters => request}
end

#validateObject



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/agms/request/transaction_request.rb', line 102

def validate
  @required = Array.new

  # Unless this is a safe action only request, require a transaction type
  if @fields[:SAFE_Action][:value] == ''
    @required.push(:TransactionType)
  end

  # If no transaction type, require a Safe Action
  if @fields[:TransactionType][:value] == ''
    @required.push(:SAFE_Action)
  end

  # All sales and auths require an amount
  if (@fields[:TransactionType][:value] == 'sale' or
      @fields[:TransactionType][:value] == 'auth')
    @required.push(:Amount)
  end

  # Captures, refunds, voids, updates, adjustments need a Transaction ID
  if (@fields[:TransactionType][:value] == 'capture' or
      @fields[:TransactionType][:value] == 'refund' or
      @fields[:TransactionType][:value] == 'void' or
      @fields[:TransactionType][:value] == 'adjustment')
    @required.push(:TransactionID)
  end

  # Require TipAmount for Tip Adjustment transactions
  if @fields[:TransactionType][:value] == 'adjustment'
    @required.push(:TipAmount)
  end

  # All safe updates and deletes require a safe id
  if (@fields[:SAFE_Action][:value] == 'update' or
      @fields[:SAFE_Action][:value] == 'delete')
    @required.push(:SAFE_ID)
  end


  if @fields[:PaymentType][:value] == 'check'
    # Cheque transaction
    if @fields[:SAFE_ID][:value] == ''
      # If no Safe ID we need all the check info
      @required.push(:CheckName)
      @required.push(:CheckABA)
      @required.push(:CheckAccount)
      if (@fields[:TransactionType][:value] == 'sale' or
          @fields[:TransactionType][:value] == 'auth')
        @required.push(:SecCode)
      end
    end
  else
    # Credit card transaction
    # If no SAFE ID and its a sale or auth
    if (@fields[:SAFE_ID][:value] == '' and
        (@fields[:TransactionType][:value] == 'sale' or
            @fields[:TransactionType][:value] == 'auth'))
      # If no Safe ID we need the card info
      # If no MagData then we need keyed info
      if @fields[:MagData][:value] == ''
        @required.push(:CCNumber)
        @required.push(:CCExpDate)
      else
        @required.push(:MagHardware)
      end
    end
  end

  error_array = AgmsAutoValidate();
  errors = error_array['errors'];
  messages = error_array['messages'];

  # ExpDate MMYY
  if (@fields[:CCExpDate][:value] != '' and
      (@fields[:CCExpDate][:value].length != 4 or
          not /(0[1-9]|1[0-2])([0-9][0-9])/.match(@fields[:CCExpDate][:value])))
    errors += 1
    messages.push('CCExpDate (credit card expiration date) must be MMYY.')
  end

  # CCNumber length
  if (@fields[:CCNumber][:value] != '' and
      @fields[:CCNumber][:value].length != 16 and
      @fields[:CCNumber][:value].length != 15)
    errors += 1
    messages.push('CCNumber (credit card number) must be 15-16 digits long.')
  end

  # ABA length
  if (@fields[:CheckABA][:value] != '' and
      @fields[:CheckABA][:value].length != 9)
    errors += 1
    messages.push('CheckABA (routing number) must be 9 digits long.')
  end

  @validate_errors = errors;
  @validate_messages = messages;

  if errors == 0
    return {'errors' => errors, 'messages' => messages}
  else
    print "Request validation failed with #{messages.join(' ')}"
    raise RequestValidationError, "Request validation failed with #{messages.join(' ')}."
  end

end