KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > util > CreditCardProcessor


1 package com.dotmarketing.util;
2
3 import java.io.StringReader JavaDoc;
4
5 import javax.xml.parsers.DocumentBuilder JavaDoc;
6 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
7
8 import lp.txn.JLinkPointTransaction;
9
10 import org.w3c.dom.Document JavaDoc;
11 import org.w3c.dom.NodeList JavaDoc;
12 import org.xml.sax.InputSource JavaDoc;
13
14 import com.dotmarketing.util.Config;
15 import com.dotmarketing.util.Logger;
16 import com.dotmarketing.util.UtilMethods;
17
18 /**
19  * This class specifies the methods to send Credit Card Transactions to the link point gateway.<br>
20  * <br>
21  * For testing purposes use the following credit card numbers:<br>
22  * American Express®: 371111111111111<br>
23  * Discover®: 6011-1111-1111-1111<br>
24  * JCB®: 311111111111111<br>
25  * MasterCard®: 5111-1111-1111-1111<br>
26  * MasterCard: 5419-8400-0000-0003<br>
27  * Visa®: 4111-1111-1111-1111<br>
28  *
29  * Some methods requires specific codes like the country and US states codes.<br>
30  *
31  * <b>US States Codes:</b><br>
32  * &lt;select NAME="bstate" SIZE="1"><br>
33  * &lt;option value=""> ... &lt;/option><br>
34  * &lt;option value="AK"> AK &lt;/option><br>
35  * &lt;option value="AL"> AL &lt;/option><br>
36  * &lt;option value="AR"> AR &lt;/option><br>
37  * &lt;option value="AZ"> AZ &lt;/option><br>
38  * &lt;option value="CA"> CA &lt;/option><br>
39  * &lt;option value="CO"> CO &lt;/option><br>
40  * &lt;option value="CT"> CT &lt;/option><br>
41  * &lt;option value="DC"> DC &lt;/option><br>
42  * &lt;option value="DE"> DE &lt;/option><br>
43  * &lt;option value="FL"> FL &lt;/option><br>
44  * &lt;option value="GA"> GA &lt;/option><br>
45  * &lt;option value="HI"> HI &lt;/option><br>
46  * &lt;option value="IA"> IA &lt;/option><br>
47  * &lt;option value="ID"> ID &lt;/option><br>
48  * &lt;option value="IL"> IL &lt;/option><br>
49  * &lt;option value="IN"> IN &lt;/option><br>
50  * &lt;option value="KS"> KS &lt;/option><br>
51  * &lt;option value="KY"> KY &lt;/option><br>
52  * &lt;option value="LA"> LA &lt;/option><br>
53  * &lt;option value="MA"> MA &lt;/option><br>
54  * &lt;option value="MD"> MD &lt;/option><br>
55  * &lt;option value="ME"> ME &lt;/option><br>
56  * &lt;option value="MI"> MI &lt;/option><br>
57  * &lt;option value="MN"> MN &lt;/option><br>
58  * &lt;option value="MO"> MO &lt;/option><br>
59  * &lt;option value="MS"> MS &lt;/option><br>
60  * &lt;option value="MT"> MT &lt;/option><br>
61  * &lt;option value="NC"> NC &lt;/option><br>
62  * &lt;option value="ND"> ND &lt;/option><br>
63  * &lt;option value="NE"> NE &lt;/option><br>
64  * &lt;option value="NH"> NH &lt;/option><br>
65  * &lt;option value="NJ"> NJ &lt;/option><br>
66  * &lt;option value="NM"> NM &lt;/option><br>
67  * &lt;option value="NV"> NV &lt;/option><br>
68  * &lt;option value="NY"> NY &lt;/option><br>
69  * &lt;option value="OH"> OH &lt;/option><br>
70  * &lt;option value="OK"> OK &lt;/option><br>
71  * &lt;option value="OR"> OR &lt;/option><br>
72  * &lt;option value="PA"> PA &lt;/option><br>
73  * &lt;option value="PR"> PR &lt;/option><br>
74  * &lt;option value="RI"> RI &lt;/option><br>
75  * &lt;option value="SC"> SC &lt;/option><br>
76  * &lt;option value="SD"> SD &lt;/option><br>
77  * &lt;option value="TN"> TN &lt;/option><br>
78  * &lt;option value="TX"> TX &lt;/option><br>
79  * &lt;option value="UT"> UT &lt;/option><br>
80  * &lt;option value="VA"> VA &lt;/option><br>
81  * &lt;option value="VI"> VI &lt;/option><br>
82  * &lt;option value="VT"> VT &lt;/option><br>
83  * &lt;option value="WA"> WA &lt;/option><br>
84  * &lt;option value="WI"> WI &lt;/option><br>
85  * &lt;option value="WV"> WV &lt;/option><br>
86  * &lt;option value="WY"> WY &lt;/option><br>
87  * </select><br>
88  * <br>
89  * <b>Country Codes:</b><br>
90  * <br>
91  * &lt;select name="bcountry" size="1"><br>
92  * &lt;option value="US" selected="1">United States&lt;/option><br>
93  * &lt;option value="AF">Afghanistan&lt;/option><br>
94  * &lt;option value="AL">Albania&lt;/option><br>
95  * &lt;option value="DZ">Algeria&lt;/option><br>
96  * &lt;option value="AS">American Samoa&lt;/option><br>
97  * &lt;option value="AD">Andorra&lt;/option><br>
98  * &lt;option value="AO">Angola&lt;/option><br>
99  * &lt;option value="AI">Anguilla&lt;/option><br>
100  * &lt;option value="AQ">Antarctica&lt;/option><br>
101  * &lt;option value="AG">Antigua And Barbuda&lt;/option><br>
102  * &lt;option value="AR">Argentina&lt;/option><br>
103  * &lt;option value="AM">Armenia&lt;/option><br>
104  * &lt;option value="AW">Aruba&lt;/option><br>
105  * &lt;option value="AU">Australia&lt;/option><br>
106  * &lt;option value="AT">Austria&lt;/option><br>
107  * &lt;option value="AZ">Azerbaijan&lt;/option><br>
108  * &lt;option value="BS">Bahamas&lt;/option><br>
109  * &lt;option value="BH">Bahrain&lt;/option><br>
110  * &lt;option value="BD">Bangladesh&lt;/option><br>
111  * &lt;option value="BB">Barbados&lt;/option><br>
112  * &lt;option value="BY">Belarus&lt;/option><br>
113  * &lt;option value="BE">Belgium&lt;/option><br>
114  * &lt;option value="BZ">Belize&lt;/option><br>
115  * &lt;option value="BJ">Benin&lt;/option><br>
116  * &lt;option value="BM">Bermuda&lt;/option><br>
117  * &lt;option value="BT">Bhutan&lt;/option><br>
118  * &lt;option value="BO">Bolivia&lt;/option><br>
119  * &lt;option value="BA">Bosnia And Herzegowina&lt;/option><br>
120  * &lt;option value="BW">Botswana&lt;/option><br>
121  * &lt;option value="BV">Bouvet Island&lt;/option><br>
122  * &lt;option value="BR">Brazil&lt;/option><br>
123  * &lt;option value="IO">British Indian Ocean Territory&lt;/option><br>
124  * &lt;option value="BN">Brunei Darussalam&lt;/option><br>
125  * &lt;option value="BG">Bulgaria&lt;/option><br>
126  * &lt;option value="BF">Burkina Faso&lt;/option><br>
127  * &lt;option value="BI">Burundi&lt;/option><br>
128  * &lt;option value="KH">Cambodia&lt;/option><br>
129  * &lt;option value="CM">Cameroon&lt;/option><br>
130  * &lt;option value="CA">Canada&lt;/option><br>
131  * &lt;option value="CV">Cape Verde&lt;/option><br>
132  * &lt;option value="KY">Cayman Islands&lt;/option><br>
133  * &lt;option value="CF">Central African Republic&lt;/option><br>
134  * &lt;option value="TD">Chad&lt;/option><br>
135  * &lt;option value="CL">Chile&lt;/option><br>
136  * &lt;option value="CN">China&lt;/option><br>
137  * &lt;option value="CX">Christmas Island&lt;/option><br>
138  * &lt;option value="CC">Cocos (Keeling) Islands&lt;/option><br>
139  * &lt;option value="CO">Colombia&lt;/option><br>
140  * &lt;option value="KM">Comoros&lt;/option><br>
141  * &lt;option value="CG">Congo&lt;/option><br>
142  * &lt;option value="CK">Cook Islands&lt;/option><br>
143  * &lt;option value="CR">Costa Rica&lt;/option><br>
144  * &lt;option value="CI">Cote D'Ivoire&lt;/option><br>
145  * &lt;option value="HR">Croatia&lt;/option><br>
146  * &lt;option value="CU">Cuba&lt;/option><br>
147  * &lt;option value="CY">Cyprus&lt;/option><br>
148  * &lt;option value="CZ">Czech Republic&lt;/option><br>
149  * &lt;option value="DK">Denmark&lt;/option><br>
150  * &lt;option value="DJ">Djibouti&lt;/option><br>
151  * &lt;option value="DM">Dominica&lt;/option><br>
152  * &lt;option value="DO">Dominican Republic&lt;/option><br>
153  * &lt;option value="TP">East Timor&lt;/option><br>
154  * &lt;option value="EC">Ecuador&lt;/option><br>
155  * &lt;option value="EG">Egypt&lt;/option><br>
156  * &lt;option value="SV">El Salvador&lt;/option><br>
157  * &lt;option value="GQ">Equatorial Guinea&lt;/option><br>
158  * &lt;option value="ER">Eritrea&lt;/option><br>
159  * &lt;option value="EE">Estonia&lt;/option><br>
160  * &lt;option value="ET">Ethiopia&lt;/option><br>
161  * &lt;option value="FK">Falkland Islands&lt;/option><br>
162  * &lt;option value="FO">Faroe Islands&lt;/option><br>
163  * &lt;option value="FJ">Fiji&lt;/option><br>
164  * &lt;option value="FI">Finland&lt;/option><br>
165  * &lt;option value="FR">France&lt;/option><br>
166  * &lt;option value="FX">France, Metropolitan &lt;/option><br>
167  * &lt;option value="GF">French Guiana&lt;/option><br>
168  * &lt;option value="PF">French Polynesia&lt;/option><br>
169  * &lt;option value="TF">French Southern Territories&lt;/option><br>
170  * &lt;option value="GA">Gabon&lt;/option><br>
171  * &lt;option value="GM">Gambia&lt;/option><br>
172  * &lt;option value="GE">Georgia&lt;/option><br>
173  * &lt;option value="DE">Germany&lt;/option><br>
174  * &lt;option value="GH">Ghana&lt;/option><br>
175  * &lt;option value="GI">Gibraltar&lt;/option><br>
176  * &lt;option value="GR">Greece&lt;/option><br>
177  * &lt;option value="GL">Greenland&lt;/option><br>
178  * &lt;option value="GD">Grenada&lt;/option><br>
179  * &lt;option value="GP">Guadeloupe&lt;/option><br>
180  * &lt;option value="GU">Guam&lt;/option><br>
181  * &lt;option value="GT">Guatemala&lt;/option><br>
182  * &lt;option value="GN">Guinea&lt;/option><br>
183  * &lt;option value="GW">Guinea-Bissau&lt;/option><br>
184  * &lt;option value="GY">Guyana&lt;/option><br>
185  * &lt;option value="HT">Haiti&lt;/option><br>
186  * &lt;option value="HM">Heard And Mc Donald Islands&lt;/option><br>
187  * &lt;option value="HN">Honduras&lt;/option><br>
188  * &lt;option value="HK">Hong Kong&lt;/option><br>
189  * &lt;option value="HU">Hungary&lt;/option><br>
190  * &lt;option value="IS">Iceland&lt;/option><br>
191  * &lt;option value="IN">India&lt;/option><br>
192  * &lt;option value="ID">Indonesia&lt;/option><br>
193  * &lt;option value="IR">Iran&lt;/option><br>
194  * &lt;option value="IQ">Iraq&lt;/option><br>
195  * &lt;option value="IE">Ireland&lt;/option><br>
196  * &lt;option value="IL">Israel&lt;/option><br>
197  * &lt;option value="IT">Italy&lt;/option><br>
198  * &lt;option value="JM">Jamaica&lt;/option><br>
199  * &lt;option value="JP">Japan&lt;/option><br>
200  * &lt;option value="JO">Jordan&lt;/option><br>
201  * &lt;option value="KZ">Kazakhstan&lt;/option><br>
202  * &lt;option value="KE">Kenya&lt;/option><br>
203  * &lt;option value="KI">Kiribati&lt;/option><br>
204  * &lt;option value="KP">North Korea&lt;/option><br>
205  * &lt;option value="KR">South Korea&lt;/option><br>
206  * &lt;option value="KW">Kuwait&lt;/option><br>
207  * &lt;option value="KG">Kyrgyzstan&lt;/option><br>
208  * &lt;option value="LA">Lao People's Republic&lt;/option><br>
209  * &lt;option value="LV">Latvia&lt;/option><br>
210  * &lt;option value="LB">Lebanon&lt;/option><br>
211  * &lt;option value="LS">Lesotho&lt;/option><br>
212  * &lt;option value="LR">Liberia&lt;/option><br>
213  * &lt;option value="LY">Libyan Arab Jamahiriya&lt;/option><br>
214  * &lt;option value="LI">Liechtenstein&lt;/option><br>
215  * &lt;option value="LT">Lithuania&lt;/option><br>
216  * &lt;option value="LU">Luxembourg&lt;/option><br>
217  * &lt;option value="MO">Macau&lt;/option><br>
218  * &lt;option value="MK">Macedonia&lt;/option><br>
219  * &lt;option value="MG">Madagascar&lt;/option><br>
220  * &lt;option value="MW">Malawi&lt;/option><br>
221  * &lt;option value="MY">Malaysia&lt;/option><br>
222  * &lt;option value="MV">Maldives&lt;/option><br>
223  * &lt;option value="ML">Mali&lt;/option><br>
224  * &lt;option value="MT">Malta&lt;/option><br>
225  * &lt;option value="MH">Marshall Islands&lt;/option><br>
226  * &lt;option value="MQ">Martinique&lt;/option><br>
227  * &lt;option value="MR">Mauritania&lt;/option><br>
228  * &lt;option value="MU">Mauritius&lt;/option><br>
229  * &lt;option value="YT">Mayotte&lt;/option><br>
230  * &lt;option value="MX">Mexico&lt;/option><br>
231  * &lt;option value="FM">Micronesia&lt;/option><br>
232  * &lt;option value="MD">Moldova&lt;/option><br>
233  * &lt;option value="MC">Monaco&lt;/option><br>
234  * &lt;option value="MN">Mongolia&lt;/option><br>
235  * &lt;option value="MS">Montserrat&lt;/option><br>
236  * &lt;option value="MA">Morocco&lt;/option><br>
237  * &lt;option value="MZ">Mozambique&lt;/option><br>
238  * &lt;option value="MM">Myanmar&lt;/option><br>
239  * &lt;option value="NA">Namibia&lt;/option><br>
240  * &lt;option value="NR">Nauru&lt;/option><br>
241  * &lt;option value="NP">Nepal&lt;/option><br>
242  * &lt;option value="NL">Netherlands&lt;/option><br>
243  * &lt;option value="AN">Netherlands Antilles&lt;/option><br>
244  * &lt;option value="NC">New Caledonia&lt;/option><br>
245  * &lt;option value="NZ">New Zealand&lt;/option><br>
246  * &lt;option value="NI">Nicaragua&lt;/option><br>
247  * &lt;option value="NE">Niger&lt;/option><br>
248  * &lt;option value="NG">Nigeria&lt;/option><br>
249  * &lt;option value="NU">Niue&lt;/option><br>
250  * &lt;option value="NF">Norfolk Island&lt;/option><br>
251  * &lt;option value="MP">Northern Mariana Islands&lt;/option><br>
252  * &lt;option value="NO">Norway&lt;/option><br>
253  * &lt;option value="OM">Oman&lt;/option><br>
254  * &lt;option value="PK">Pakistan&lt;/option><br>
255  * &lt;option value="PW">Palau&lt;/option><br>
256  * &lt;option value="PA">Panama&lt;/option><br>
257  * &lt;option value="PG">Papua New Guinea&lt;/option><br>
258  * &lt;option value="PY">Paraguay&lt;/option><br>
259  * &lt;option value="PE">Peru&lt;/option><br>
260  * &lt;option value="PH">Philippines&lt;/option><br>
261  * &lt;option value="PN">Pitcairn&lt;/option><br>
262  * &lt;option value="PL">Poland&lt;/option><br>
263  * &lt;option value="PT">Portugal&lt;/option><br>
264  * &lt;option value="PR">Puerto Rico&lt;/option><br>
265  * &lt;option value="QA">Qatar&lt;/option><br>
266  * &lt;option value="RE">Reunion&lt;/option><br>
267  * &lt;option value="RO">Romania&lt;/option><br>
268  * &lt;option value="RU">Russian Federation&lt;/option><br>
269  * &lt;option value="RW">Rwanda&lt;/option><br>
270  * &lt;option value="KN">Saint Kitts And Nevis&lt;/option><br>
271  * &lt;option value="LC">Saint Lucia&lt;/option><br>
272  * &lt;option value="VC">Saint Vincent And The Grenadines&lt;/option><br>
273  * &lt;option value="WS">Samoa&lt;/option><br>
274  * &lt;option value="SM">San Marino&lt;/option><br>
275  * &lt;option value="ST">Sao Tome And Principe&lt;/option><br>
276  * &lt;option value="SA">Saudi Arabia&lt;/option><br>
277  * &lt;option value="SN">Senegal&lt;/option><br>
278  * &lt;option value="SC">Seychelles&lt;/option><br>
279  * &lt;option value="SL">Sierra Leone&lt;/option><br>
280  * &lt;option value="SG">Singapore&lt;/option><br>
281  * &lt;option value="SK">Slovakia&lt;/option><br>
282  * &lt;option value="SI">Slovenia&lt;/option><br>
283  * &lt;option value="SB">Solomon Islands&lt;/option><br>
284  * &lt;option value="SO">Somalia&lt;/option><br>
285  * &lt;option value="ZA">South Africa&lt;/option><br>
286  * &lt;option value="GS">South Georgia & South Sandwich Islands&lt;/option><br>
287  * &lt;option value="ES">Spain&lt;/option><br>
288  * &lt;option value="LK">Sri Lanka&lt;/option><br>
289  * &lt;option value="SH">St Helena&lt;/option><br>
290  * &lt;option value="PM">St Pierre and Miquelon&lt;/option><br>
291  * &lt;option value="SD">Sudan&lt;/option><br>
292  * &lt;option value="SR">Suriname&lt;/option><br>
293  * &lt;option value="SJ">Svalbard And Jan Mayen Islands&lt;/option><br>
294  * &lt;option value="SZ">Swaziland&lt;/option><br>
295  * &lt;option value="SE">Sweden&lt;/option><br>
296  * &lt;option value="CH">Switzerland&lt;/option><br>
297  * &lt;option value="SY">Syrian Arab Republic&lt;/option><br>
298  * &lt;option value="TW">Taiwan&lt;/option><br>
299  * &lt;option value="TJ">Tajikistan&lt;/option><br>
300  * &lt;option value="TZ">Tanzania&lt;/option><br>
301  * &lt;option value="TH">Thailand&lt;/option><br>
302  * &lt;option value="TG">Togo&lt;/option><br>
303  * &lt;option value="TK">Tokelau&lt;/option><br>
304  * &lt;option value="TO">Tonga&lt;/option><br>
305  * &lt;option value="TT">Trinidad And Tobago&lt;/option><br>
306  * &lt;option value="TN">Tunisia&lt;/option><br>
307  * &lt;option value="TR">Turkey&lt;/option><br>
308  * &lt;option value="TM">Turkmenistan&lt;/option><br>
309  * &lt;option value="TC">Turks And Caicos Islands&lt;/option><br>
310  * &lt;option value="TV">Tuvalu&lt;/option><br>
311  * &lt;option value="UG">Uganda&lt;/option><br>
312  * &lt;option value="UA">Ukraine&lt;/option><br>
313  * &lt;option value="AE">United Arab Emirates&lt;/option><br>
314  * &lt;option value="GB">United Kingdom/Great Britain&lt;/option><br>
315  * &lt;option value="UM">United States Minor Outlying Islands&lt;/option><br>
316  * &lt;option value="UY">Uruguay&lt;/option><br>
317  * &lt;option value="UZ">Uzbekistan&lt;/option><br>
318  * &lt;option value="VU">Vanuatu&lt;/option><br>
319  * &lt;option value="VA">Vatican City State&lt;/option><br>
320  * &lt;option value="VE">Venezuela&lt;/option><br>
321  * &lt;option value="VN">Viet Nam&lt;/option><br>
322  * &lt;option value="VG">Virgin Islands (British)&lt;/option><br>
323  * &lt;option value="VI">Virgin Islands (U.S.)&lt;/option><br>
324  * &lt;option value="WF">Wallis And Futuna Islands&lt;/option><br>
325  * &lt;option value="EH">Western Sahara&lt;/option><br>
326  * &lt;option value="YE">Yemen&lt;/option><br>
327  * &lt;option value="ZR">Zaire&lt;/option><br>
328  * &lt;option value="ZM">Zambia&lt;/option><br>
329  * &lt;option value="ZW">Zimbabwe&lt;/option><br>
330  * &lt;option value="ZZ">Other-Not Shown&lt;/option><br>
331  * &lt;/select><br>
332  *
333  * @author David
334  *
335  */

336 public class CreditCardProcessor {
337
338     /**
339      * This method process a credit card order against the Link Point Credit Card Gateway.
340      * Some parameters like the state and country requires a specific codes specified below.
341      *
342      * @param orderId - Required - Order Inode
343      * @param poNumber - Optional - ECommerce transactions with purchase order numbers
344      * @param taxExempt - Required
345      * @param clientIPAddress - Optional - Client IP address - can be obtained using the HttpReqest.getRemoteUser()
346      * @param subtotal - Optional - Before Taxes and Shipping amounts
347      * @param tax - Optional - Tax amount
348      * @param shipping - Optional - Shipping amount
349      * @param total - Required - Total order amount (including taxes and shippinga amounts)
350      * @param cardNumber - Required - Credit Card Number
351      * @param cardExpMonth - Required - The numeric expiration month of the credit card - integer from 1 to 12
352      * @param cardExpYear - Required - The two-digit or four-digit expiration year of the credit card - Integer from 00 to 99 or from 2000 to 2099
353      * @param cvv - Required - 3/4-digit numeric valued typically printed on the signature panel on the back of the credit card.
354      * @param billingName - Required - This should be the customer’s name as it appears on the credit card.
355      * @param billingCompany - Optional - Company name.
356      * @param billingAddress1 - Required - The 1st line of the customer's address.
357      * @param billingAddress2 - Optional - The 2nd line of the customer's address.
358      * @param billingCity - Required - Billing city.
359      * @param billingState - Required - Billing state. For international addresses, you can use this field to hold the province or
360      * territory, as applicable. For US states, use one of the US State Codes specified above.
361      * @param billingZip - Required - Billing Zip.
362      * @param billingCountry - Required - Billing country. If passed, must be a valid country code. See Country Codes Above.
363      * @param billingPhone - Optional - Billing phone number.
364      * @param billingFax - Optional - Billing fax number.
365      * @param billingEmail - Optional - Billing email address.
366      * @param orderComments - Optional - Order comments.
367      * @param orderReferred - Optional - Order referred by.
368      * @return CreditCardProcessorResponse The response object with the gateway values.
369      * @throws CreditCardProcessorException - Throwed in case of communication error, missing information or credit card denied exception
370      * @see CreditCardProcessorException
371      */

372
373     public static CreditCardProcessorResponse processCreditCardOrderInstitutes (long orderId, String JavaDoc poNumber, boolean taxExempt, String JavaDoc clientIPAddress,
374             Float JavaDoc subtotal, Float JavaDoc tax, Float JavaDoc shipping, float total,
375             String JavaDoc cardNumber, int cardExpMonth, int cardExpYear, String JavaDoc cvv,
376             String JavaDoc billingName, String JavaDoc billingCompany,
377             String JavaDoc billingAddress1, String JavaDoc billingAddress2, String JavaDoc billingCity,
378             String JavaDoc billingState, String JavaDoc billingZip, String JavaDoc billingCountry,
379             String JavaDoc billingPhone, String JavaDoc billingFax, String JavaDoc billingEmail,
380             String JavaDoc orderComments, String JavaDoc orderReferred, String JavaDoc orderType) throws CreditCardProcessorException {
381
382         return processCreditCardOrder (orderId, poNumber, taxExempt, clientIPAddress,
383                 subtotal, tax, shipping, total,
384                 cardNumber, cardExpMonth, cardExpYear, cvv,
385                 billingName, billingCompany,billingAddress1, billingAddress2, billingCity,
386                 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail,
387                 orderComments, orderReferred,Config.getStringProperty("LP_EVENTS_STORE_ID"), orderType);
388     }
389
390     public static CreditCardProcessorResponse processCreditCardOrderProducts (long orderId, String JavaDoc poNumber, boolean taxExempt, String JavaDoc clientIPAddress,
391             Float JavaDoc subtotal, Float JavaDoc tax, Float JavaDoc shipping, float total,
392             String JavaDoc cardNumber, int cardExpMonth, int cardExpYear, String JavaDoc cvv,
393             String JavaDoc billingName, String JavaDoc billingCompany,
394             String JavaDoc billingAddress1, String JavaDoc billingAddress2, String JavaDoc billingCity,
395             String JavaDoc billingState, String JavaDoc billingZip, String JavaDoc billingCountry,
396             String JavaDoc billingPhone, String JavaDoc billingFax, String JavaDoc billingEmail,
397             String JavaDoc orderComments, String JavaDoc orderReferred,String JavaDoc orderType) throws CreditCardProcessorException {
398
399         return processCreditCardOrder (orderId, poNumber, taxExempt, clientIPAddress,
400                 subtotal, tax, shipping, total,
401                 cardNumber, cardExpMonth, cardExpYear, cvv,
402                 billingName, billingCompany,billingAddress1, billingAddress2, billingCity,
403                 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail,
404                 orderComments, orderReferred,Config.getStringProperty("LP_ECOMM_STORE_ID"), orderType);
405     }
406
407     public static CreditCardProcessorResponse processCreditCardOrderWebForms (long orderId,
408             String JavaDoc clientIPAddress,Float JavaDoc shipping, float total,
409             String JavaDoc cardNumber, int cardExpMonth, int cardExpYear, String JavaDoc cvv,
410             String JavaDoc billingName, String JavaDoc billingAddress1, String JavaDoc billingAddress2, String JavaDoc billingCity,
411             String JavaDoc billingState, String JavaDoc billingZip, String JavaDoc billingCountry,
412             String JavaDoc billingPhone, String JavaDoc billingFax, String JavaDoc billingEmail, String JavaDoc orderType) throws CreditCardProcessorException {
413
414         return processCreditCardOrder (orderId, "", false, clientIPAddress,
415                 null, null, shipping, total,
416                 cardNumber, cardExpMonth, cardExpYear, cvv,
417                 billingName,"",billingAddress1, billingAddress2, billingCity,
418                 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail,
419                 "", "",Config.getStringProperty("LP_ECOMM_STORE_ID"), orderType);
420     }
421
422     private static CreditCardProcessorResponse processCreditCardOrder (long orderId, String JavaDoc poNumber, boolean taxExempt, String JavaDoc clientIPAddress,
423             Float JavaDoc subtotal, Float JavaDoc tax, Float JavaDoc shipping, float total,
424             String JavaDoc cardNumber, int cardExpMonth, int cardExpYear, String JavaDoc cvv,
425             String JavaDoc billingName, String JavaDoc billingCompany,
426             String JavaDoc billingAddress1, String JavaDoc billingAddress2, String JavaDoc billingCity,
427             String JavaDoc billingState, String JavaDoc billingZip, String JavaDoc billingCountry,
428             String JavaDoc billingPhone, String JavaDoc billingFax, String JavaDoc billingEmail,
429             String JavaDoc orderComments, String JavaDoc orderReferred, String JavaDoc storeId, String JavaDoc orderType) throws CreditCardProcessorException {
430
431         //Setting up the link point connection
432
JLinkPointTransaction txn = new JLinkPointTransaction();
433         String JavaDoc sClientCertPath = "./" + storeId + ".p12";
434
435         txn.setClientCertificatePath(sClientCertPath);
436         txn.setPassword(Config.getStringProperty("LP_CLIENT_CERT_PASS"));
437         txn.setHost(Config.getStringProperty("LP_HOST"));
438         txn.setPort(Config.getIntProperty("LP_PORT"));
439
440         //Building the order XML
441
StringBuffer JavaDoc orderXml = new StringBuffer JavaDoc ();
442
443         orderXml.append("<order>\n");
444
445         orderXml.append(" <merchantinfo>\n");
446         orderXml.append(" <configfile>"+ storeId + "</configfile>\n");
447         orderXml.append(" </merchantinfo>\n");
448
449         if (UtilMethods.isSet(orderType)) {
450             //orderType can be either: SALE or PREAUTH
451
orderXml.append(" <orderoptions>\n");
452             orderXml.append(" <ordertype>"+orderType+"</ordertype>\n");
453             orderXml.append(" <result>"+Config.getStringProperty("LP_ORDERS_RESULT")+"</result>\n");
454             orderXml.append(" </orderoptions>\n");
455         }
456         else {
457             orderXml.append(" <orderoptions>\n");
458             orderXml.append(" <ordertype>"+Config.getStringProperty("LP_ORDER_TYPE")+"</ordertype>\n");
459             orderXml.append(" <result>"+Config.getStringProperty("LP_ORDERS_RESULT")+"</result>\n");
460             orderXml.append(" </orderoptions>\n");
461         }
462
463         orderXml.append(" <transactiondetails>\n");
464         orderXml.append(" <transactionorigin>ECI</transactionorigin>\n");
465         orderXml.append(" <oid>"+orderId+"</oid>\n");
466         if (UtilMethods.isSet(poNumber)) {
467             orderXml.append(" <ponumber>"+poNumber+"</ponumber>\n");
468         }
469         orderXml.append(" <taxexempt>" + (taxExempt?"Y":"N") + "</taxexempt>\n");
470         orderXml.append(" <terminaltype>UNSPECIFIED</terminaltype>\n");
471         if (UtilMethods.isSet(clientIPAddress)) {
472             orderXml.append(" <ip>"+clientIPAddress+"</ip>\n");
473         }
474         orderXml.append(" </transactiondetails>\n");
475
476
477         orderXml.append(" <payment>\n");
478         if (UtilMethods.isSet(subtotal)) {
479             orderXml.append(" <subtotal>"+UtilMethods.dollarFormat(subtotal)+"</subtotal>\n");
480         }
481         if (UtilMethods.isSet(tax)) {
482             orderXml.append(" <tax>0"+UtilMethods.dollarFormat(tax)+"</tax>\n");
483             orderXml.append(" <vattax>0.0</vattax>\n");
484         }
485         if (UtilMethods.isSet(shipping)) {
486             orderXml.append(" <shipping>"+UtilMethods.dollarFormat(shipping)+"</shipping>\n");
487         }
488         orderXml.append(" <chargetotal>"+UtilMethods.dollarFormat(total)+"</chargetotal>\n");
489         orderXml.append(" </payment>\n");
490
491
492         orderXml.append(" <creditcard>\n");
493         if (UtilMethods.isSet(cardNumber)) {
494             orderXml.append(" <cardnumber>" + cardNumber + "</cardnumber>\n");
495         } else {
496             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Card Number Required");
497         }
498         if (cardExpMonth >= 1 && cardExpMonth <= 12) {
499             orderXml.append(" <cardexpmonth>" + cardExpMonth + "</cardexpmonth>\n");
500         } else {
501             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Invalid Card Expiration Month (Valid range 1-12)");
502         }
503         if (cardExpYear >= 0 && cardExpYear <= 99)
504             orderXml.append(" <cardexpyear>" + cardExpYear + "</cardexpyear>\n");
505         else if (cardExpYear >= 2000 && cardExpYear <= 2099) {
506             cardExpYear = cardExpYear - 2000;
507             orderXml.append(" <cardexpyear>" + cardExpYear + "</cardexpyear>\n");
508         } else {
509             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Invalid Card Expiration Year (Ranges Valid 0-99 or 2000-2099)");
510         }
511         if (UtilMethods.isSet(cvv)) {
512             orderXml.append(" <cvmvalue>" + cvv + "</cvmvalue>\n");
513             orderXml.append(" <cvmindicator>provided</cvmindicator>\n");
514         } else {
515             //throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "cvv Required");
516
}
517         orderXml.append(" </creditcard>\n");
518
519         orderXml.append(" <billing>\n");
520         if (UtilMethods.isSet(billingAddress1)) {
521             String JavaDoc[] addressSplitted = billingAddress1.split(" ");
522             if (addressSplitted.length > 0) {
523                 try {
524                     int addrnum = Integer.parseInt(addressSplitted[0]);
525                     orderXml.append(" <addrnum>" + addrnum + "</addrnum>\n");
526                 } catch (Exception JavaDoc e) {
527                 }
528             }
529         } else {
530             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingAddress1 Value Required");
531         }
532         if (UtilMethods.isSet(billingZip)) {
533             orderXml.append(" <zip>" + billingZip + "</zip>\n");
534         } else {
535             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingZip Value Required");
536         }
537         if (UtilMethods.isSet(billingName)) {
538             orderXml.append(" <name>" + billingName + "</name>\n");
539         } else {
540             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingName Value Required");
541         }
542         if (UtilMethods.isSet(billingCompany)) {
543             orderXml.append(" <company>" + billingCompany + "</company>\n");
544         }
545         orderXml.append(" <address1>" + billingAddress1 + "</address1>\n");
546         if (UtilMethods.isSet(billingAddress2)) {
547             orderXml.append(" <address2>" + billingAddress2 + "</address2>\n");
548         }
549         if (UtilMethods.isSet(billingCity)) {
550             orderXml.append(" <city>" + billingCity + "</city>\n");
551         } else {
552             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingCity Value Required");
553         }
554         if (UtilMethods.isSet(billingState)) {
555             orderXml.append(" <state>" + billingState + "</state>\n");
556         } else {
557             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingState Value Required");
558         }
559         if (UtilMethods.isSet(billingCountry)) {
560             orderXml.append(" <country>" + billingCountry + "</country>\n");
561         } else {
562             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingCountry Value Required");
563         }
564         if (UtilMethods.isSet(billingPhone)) {
565             orderXml.append(" <phone>" + billingPhone + "</phone>\n");
566         }
567         if (UtilMethods.isSet(billingFax)) {
568             orderXml.append(" <fax>" + billingFax + "</fax>\n");
569         }
570         //if (UtilMethods.isSet(billingEmail)) {
571
// orderXml.append(" <email>" + billingEmail + "</email>\n");
572
//}
573
orderXml.append(" </billing>\n");
574
575         if (UtilMethods.isSet(orderComments) || UtilMethods.isSet(orderReferred)) {
576             orderXml.append(" <notes>\n");
577             if (UtilMethods.isSet(orderComments))
578                 orderXml.append(" <comments>" + orderComments + "</comments>\n");
579             if (UtilMethods.isSet(orderReferred))
580                 orderXml.append(" <referred>" + orderReferred + "</referred>\n");
581
582             orderXml.append(" </notes>\n");
583         }
584
585         orderXml.append("</order>\n");
586
587         if (Config.getBooleanProperty("LP_LOG_ORDERS"))
588             Logger.info(CreditCardProcessor.class, "Placing an order: \n" + orderXml);
589
590         try {
591             String JavaDoc sResponse = "<response>" + txn.send(orderXml.toString()) + "</response>";
592             DocumentBuilderFactory JavaDoc factory = DocumentBuilderFactory.newInstance();
593             DocumentBuilder JavaDoc builder = factory.newDocumentBuilder();
594             Document JavaDoc document = builder.parse( new InputSource JavaDoc ( new StringReader JavaDoc (sResponse)) );
595
596             String JavaDoc approved = "";
597             String JavaDoc avs = "";
598             String JavaDoc ordernum = "";
599             String JavaDoc error = "";
600             String JavaDoc code = "";
601             String JavaDoc message = "";
602             String JavaDoc time = "";
603             String JavaDoc ref = "";
604             String JavaDoc tdate = "";
605             String JavaDoc score = "";
606
607             NodeList JavaDoc nl = document.getElementsByTagName("r_avs");
608             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
609                 avs = nl.item(0).getFirstChild().getNodeValue();
610             }
611             nl = document.getElementsByTagName("r_ordernum");
612             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
613                 ordernum = nl.item(0).getFirstChild().getNodeValue();
614             }
615             nl = document.getElementsByTagName("r_error");
616             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
617                 error = nl.item(0).getFirstChild().getNodeValue();
618             }
619             nl = document.getElementsByTagName("r_approved");
620             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
621                 approved = nl.item(0).getFirstChild().getNodeValue();
622             }
623             nl = document.getElementsByTagName("r_code");
624             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
625                 code = nl.item(0).getFirstChild().getNodeValue();
626             }
627             nl = document.getElementsByTagName("r_message");
628             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
629                 message = nl.item(0).getFirstChild().getNodeValue();
630             }
631             nl = document.getElementsByTagName("r_time");
632             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
633                 time = nl.item(0).getFirstChild().getNodeValue();
634             }
635             nl = document.getElementsByTagName("r_ref");
636             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
637                 ref = nl.item(0).getFirstChild().getNodeValue();
638             }
639             nl = document.getElementsByTagName("r_tdate");
640             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
641                 tdate = nl.item(0).getFirstChild().getNodeValue();
642             }
643             nl = document.getElementsByTagName("r_score");
644             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
645                 score = nl.item(0).getFirstChild().getNodeValue();
646             }
647
648             CreditCardProcessorResponse orderResponse = new CreditCardProcessorResponse (approved, avs, code, error, message, ordernum, ref, score, tdate, time);
649
650             if (Config.getBooleanProperty("LP_LOG_ORDERS_RESPONSE"))
651                 Logger.info(CreditCardProcessor.class, "Order Response: " + orderResponse.toString());
652
653             return orderResponse;
654
655         } catch (Exception JavaDoc e) {
656             throw new CreditCardProcessorException (CreditCardProcessorException.COMMUNICATION_ERROR, e.getMessage(), e);
657         }
658
659     }
660
661     public static CreditCardProcessorResponse processCreditCardOrderProducts (long orderId, String JavaDoc poNumber, boolean taxExempt, String JavaDoc clientIPAddress,
662             Float JavaDoc subtotal, Float JavaDoc tax, Float JavaDoc shipping, float total,
663             String JavaDoc cardNumber, int cardExpMonth, int cardExpYear, String JavaDoc cvv,
664             String JavaDoc billingName, String JavaDoc billingCompany,
665             String JavaDoc billingAddress1, String JavaDoc billingAddress2, String JavaDoc billingCity,
666             String JavaDoc billingState, String JavaDoc billingZip, String JavaDoc billingCountry,
667             String JavaDoc billingPhone, String JavaDoc billingFax, String JavaDoc billingEmail,
668             String JavaDoc orderComments, String JavaDoc orderReferred) throws CreditCardProcessorException {
669         
670         return processCreditCardOrder (orderId, poNumber, taxExempt, clientIPAddress,
671                 subtotal, tax, shipping, total,
672                 cardNumber, cardExpMonth, cardExpYear, cvv,
673                 billingName, billingCompany,billingAddress1, billingAddress2, billingCity,
674                 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail,
675                 orderComments, orderReferred,Config.getStringProperty("LP_ECOMM_STORE_ID"));
676     }
677
678     public static CreditCardProcessorResponse processCreditCardOrderInstitutes (long orderId, String JavaDoc poNumber, boolean taxExempt, String JavaDoc clientIPAddress,
679             Float JavaDoc subtotal, Float JavaDoc tax, Float JavaDoc shipping, float total,
680             String JavaDoc cardNumber, int cardExpMonth, int cardExpYear, String JavaDoc cvv,
681             String JavaDoc billingName, String JavaDoc billingCompany,
682             String JavaDoc billingAddress1, String JavaDoc billingAddress2, String JavaDoc billingCity,
683             String JavaDoc billingState, String JavaDoc billingZip, String JavaDoc billingCountry,
684             String JavaDoc billingPhone, String JavaDoc billingFax, String JavaDoc billingEmail,
685             String JavaDoc orderComments, String JavaDoc orderReferred) throws CreditCardProcessorException {
686
687         return processCreditCardOrder (orderId, poNumber, taxExempt, clientIPAddress,
688                 subtotal, tax, shipping, total,
689                 cardNumber, cardExpMonth, cardExpYear, cvv,
690                 billingName, billingCompany,billingAddress1, billingAddress2, billingCity,
691                 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail,
692                 orderComments, orderReferred,Config.getStringProperty("LP_EVENTS_STORE_ID"));
693     }
694
695
696     public static CreditCardProcessorResponse processCreditCardOrderWebForms (long orderId,
697             String JavaDoc clientIPAddress,Float JavaDoc shipping, float total,
698             String JavaDoc cardNumber, int cardExpMonth, int cardExpYear, String JavaDoc cvv,
699             String JavaDoc billingName, String JavaDoc billingAddress1, String JavaDoc billingAddress2, String JavaDoc billingCity,
700             String JavaDoc billingState, String JavaDoc billingZip, String JavaDoc billingCountry,
701             String JavaDoc billingPhone, String JavaDoc billingFax, String JavaDoc billingEmail) throws CreditCardProcessorException {
702         
703         return processCreditCardOrder (orderId, "", false, clientIPAddress,
704                 null, null, shipping, total,
705                 cardNumber, cardExpMonth, cardExpYear, cvv,
706                 billingName,"",billingAddress1, billingAddress2, billingCity,
707                 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail,
708                 "", "",Config.getStringProperty("LP_ECOMM_STORE_ID"));
709     }
710
711     private static CreditCardProcessorResponse processCreditCardOrder (long orderId, String JavaDoc poNumber, boolean taxExempt, String JavaDoc clientIPAddress,
712             Float JavaDoc subtotal, Float JavaDoc tax, Float JavaDoc shipping, float total,
713             String JavaDoc cardNumber, int cardExpMonth, int cardExpYear, String JavaDoc cvv,
714             String JavaDoc billingName, String JavaDoc billingCompany,
715             String JavaDoc billingAddress1, String JavaDoc billingAddress2, String JavaDoc billingCity,
716             String JavaDoc billingState, String JavaDoc billingZip, String JavaDoc billingCountry,
717             String JavaDoc billingPhone, String JavaDoc billingFax, String JavaDoc billingEmail,
718             String JavaDoc orderComments, String JavaDoc orderReferred, String JavaDoc storeId) throws CreditCardProcessorException {
719
720         //Setting up the link point connection
721
JLinkPointTransaction txn = new JLinkPointTransaction();
722         String JavaDoc sClientCertPath = "./" + storeId + ".p12";
723         
724         txn.setClientCertificatePath(sClientCertPath);
725         txn.setPassword(Config.getStringProperty("LP_CLIENT_CERT_PASS"));
726         txn.setHost(Config.getStringProperty("LP_HOST"));
727         txn.setPort(Config.getIntProperty("LP_PORT"));
728         
729         //Building the order XML
730
StringBuffer JavaDoc orderXml = new StringBuffer JavaDoc ();
731         
732         orderXml.append("<order>\n");
733         
734         orderXml.append(" <merchantinfo>\n");
735         orderXml.append(" <configfile>"+ storeId + "</configfile>\n");
736         orderXml.append(" </merchantinfo>\n");
737         
738         orderXml.append(" <orderoptions>\n");
739         orderXml.append(" <ordertype>"+Config.getStringProperty("LP_ORDER_TYPE")+"</ordertype>\n");
740         orderXml.append(" <result>"+Config.getStringProperty("LP_ORDERS_RESULT")+"</result>\n");
741         orderXml.append(" </orderoptions>\n");
742         
743         orderXml.append(" <transactiondetails>\n");
744         orderXml.append(" <transactionorigin>ECI</transactionorigin>\n");
745         orderXml.append(" <oid>"+orderId+"</oid>\n");
746         if (UtilMethods.isSet(poNumber)) {
747             orderXml.append(" <ponumber>"+poNumber+"</ponumber>\n");
748         }
749         orderXml.append(" <taxexempt>" + (taxExempt?"Y":"N") + "</taxexempt>\n");
750         orderXml.append(" <terminaltype>UNSPECIFIED</terminaltype>\n");
751         if (UtilMethods.isSet(clientIPAddress)) {
752             orderXml.append(" <ip>"+clientIPAddress+"</ip>\n");
753         }
754         orderXml.append(" </transactiondetails>\n");
755         
756         
757         orderXml.append(" <payment>\n");
758         if (UtilMethods.isSet(subtotal)) {
759             orderXml.append(" <subtotal>"+UtilMethods.dollarFormat(subtotal)+"</subtotal>\n");
760         }
761         if (UtilMethods.isSet(tax)) {
762             orderXml.append(" <tax>0"+UtilMethods.dollarFormat(tax)+"</tax>\n");
763             orderXml.append(" <vattax>0.0</vattax>\n");
764         }
765         if (UtilMethods.isSet(shipping)) {
766             orderXml.append(" <shipping>"+UtilMethods.dollarFormat(shipping)+"</shipping>\n");
767         }
768         orderXml.append(" <chargetotal>"+UtilMethods.dollarFormat(total)+"</chargetotal>\n");
769         orderXml.append(" </payment>\n");
770         
771         
772         orderXml.append(" <creditcard>\n");
773         if (UtilMethods.isSet(cardNumber)) {
774             //remove dashes and spaces
775
cardNumber = cardNumber.replaceAll(" ","");
776             cardNumber = cardNumber.replaceAll("-","");
777             orderXml.append(" <cardnumber>" + cardNumber + "</cardnumber>\n");
778         } else {
779             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Card Number Required");
780         }
781         if (cardExpMonth >= 1 && cardExpMonth <= 12) {
782             orderXml.append(" <cardexpmonth>" + cardExpMonth + "</cardexpmonth>\n");
783         } else {
784             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Invalid Card Expiration Month (Valid range 1-12)");
785         }
786         if (cardExpYear >= 0 && cardExpYear <= 99)
787             orderXml.append(" <cardexpyear>" + cardExpYear + "</cardexpyear>\n");
788         else if (cardExpYear >= 2000 && cardExpYear <= 2099) {
789             cardExpYear = cardExpYear - 2000;
790             orderXml.append(" <cardexpyear>" + cardExpYear + "</cardexpyear>\n");
791         } else {
792             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Invalid Card Expiration Year (Ranges Valid 0-99 or 2000-2099)");
793         }
794         if (UtilMethods.isSet(cvv)) {
795             orderXml.append(" <cvmvalue>" + cvv + "</cvmvalue>\n");
796             orderXml.append(" <cvmindicator>provided</cvmindicator>\n");
797         } else {
798             //throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "cvv Required");
799
}
800         orderXml.append(" </creditcard>\n");
801         
802         orderXml.append(" <billing>\n");
803         if (UtilMethods.isSet(billingAddress1)) {
804             String JavaDoc[] addressSplitted = billingAddress1.split(" ");
805             if (addressSplitted.length > 0) {
806                 try {
807                     int addrnum = Integer.parseInt(addressSplitted[0]);
808                     orderXml.append(" <addrnum>" + addrnum + "</addrnum>\n");
809                 } catch (Exception JavaDoc e) {
810                 }
811             }
812         } else {
813             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingAddress1 Value Required");
814         }
815         if (UtilMethods.isSet(billingZip)) {
816             orderXml.append(" <zip>" + billingZip + "</zip>\n");
817         } else {
818             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingZip Value Required");
819         }
820         if (UtilMethods.isSet(billingName)) {
821             orderXml.append(" <name>" + billingName + "</name>\n");
822         } else {
823             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingName Value Required");
824         }
825         if (UtilMethods.isSet(billingCompany)) {
826             orderXml.append(" <company>" + billingCompany + "</company>\n");
827         }
828         orderXml.append(" <address1>" + billingAddress1 + "</address1>\n");
829         if (UtilMethods.isSet(billingAddress2)) {
830             orderXml.append(" <address2>" + billingAddress2 + "</address2>\n");
831         }
832         if (UtilMethods.isSet(billingCity)) {
833             orderXml.append(" <city>" + billingCity + "</city>\n");
834         } else {
835             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingCity Value Required");
836         }
837         if (UtilMethods.isSet(billingState)) {
838             orderXml.append(" <state>" + billingState + "</state>\n");
839         } else {
840             throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingState Value Required");
841         }
842         if (UtilMethods.isSet(billingCountry)) {
843             orderXml.append(" <country>" + billingCountry + "</country>\n");
844         } else {
845             orderXml.append(" <country>" + Config.getStringProperty("US_COUNTRY_CODE") + "</country>\n");
846         }
847         if (UtilMethods.isSet(billingPhone)) {
848             orderXml.append(" <phone>" + billingPhone + "</phone>\n");
849         }
850         if (UtilMethods.isSet(billingFax)) {
851             orderXml.append(" <fax>" + billingFax + "</fax>\n");
852         }
853         //if (UtilMethods.isSet(billingEmail)) {
854
// orderXml.append(" <email>" + billingEmail + "</email>\n");
855
//}
856
orderXml.append(" </billing>\n");
857         
858         if (UtilMethods.isSet(orderComments) || UtilMethods.isSet(orderReferred)) {
859             orderXml.append(" <notes>\n");
860             if (UtilMethods.isSet(orderComments))
861                 orderXml.append(" <comments>" + orderComments + "</comments>\n");
862             if (UtilMethods.isSet(orderReferred))
863                 orderXml.append(" <referred>" + orderReferred + "</referred>\n");
864             
865             orderXml.append(" </notes>\n");
866         }
867         
868         orderXml.append("</order>\n");
869
870         if (Config.getBooleanProperty("LP_LOG_ORDERS"))
871             Logger.info(CreditCardProcessor.class, "Placing an order: \n" + orderXml);
872         
873         try {
874             String JavaDoc sResponse = "<response>" + txn.send(orderXml.toString()) + "</response>";
875             DocumentBuilderFactory JavaDoc factory = DocumentBuilderFactory.newInstance();
876             DocumentBuilder JavaDoc builder = factory.newDocumentBuilder();
877             Document JavaDoc document = builder.parse( new InputSource JavaDoc ( new StringReader JavaDoc (sResponse)) );
878
879             Logger.info(CreditCardProcessor.class, "Linkpoint Response: \n" + sResponse);
880             
881             String JavaDoc approved = "";
882             String JavaDoc avs = "";
883             String JavaDoc ordernum = "";
884             String JavaDoc error = "";
885             String JavaDoc code = "";
886             String JavaDoc message = "";
887             String JavaDoc time = "";
888             String JavaDoc ref = "";
889             String JavaDoc tdate = "";
890             String JavaDoc score = "";
891
892             NodeList JavaDoc nl = document.getElementsByTagName("r_avs");
893             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
894                 avs = nl.item(0).getFirstChild().getNodeValue();
895                 Logger.info(CreditCardProcessor.class, "Linkpoint Response avs: \n" + avs);
896             }
897             nl = document.getElementsByTagName("r_ordernum");
898             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
899                 ordernum = nl.item(0).getFirstChild().getNodeValue();
900             }
901             nl = document.getElementsByTagName("r_error");
902             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
903                 error = nl.item(0).getFirstChild().getNodeValue();
904             }
905             nl = document.getElementsByTagName("r_approved");
906             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
907                 approved = nl.item(0).getFirstChild().getNodeValue();
908                 Logger.info(CreditCardProcessor.class, "Linkpoint Response approved: \n" + approved);
909             }
910             nl = document.getElementsByTagName("r_code");
911             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
912                 code = nl.item(0).getFirstChild().getNodeValue();
913             }
914             nl = document.getElementsByTagName("r_message");
915             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
916                 message = nl.item(0).getFirstChild().getNodeValue();
917             }
918             nl = document.getElementsByTagName("r_time");
919             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
920                 time = nl.item(0).getFirstChild().getNodeValue();
921             }
922             nl = document.getElementsByTagName("r_ref");
923             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
924                 ref = nl.item(0).getFirstChild().getNodeValue();
925             }
926             nl = document.getElementsByTagName("r_tdate");
927             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
928                 tdate = nl.item(0).getFirstChild().getNodeValue();
929             }
930             nl = document.getElementsByTagName("r_score");
931             if (nl.item(0) != null && nl.item(0).getFirstChild() != null) {
932                 score = nl.item(0).getFirstChild().getNodeValue();
933             }
934
935             CreditCardProcessorResponse orderResponse = new CreditCardProcessorResponse (approved, avs, code, error, message, ordernum, ref, score, tdate, time);
936             
937             if (Config.getBooleanProperty("LP_LOG_ORDERS_RESPONSE"))
938                 Logger.info(CreditCardProcessor.class, "Order Response: " + orderResponse.toString());
939                 
940             
941             return orderResponse;
942             
943         } catch (Exception JavaDoc e) {
944             Logger.info(CreditCardProcessor.class, "CreditCardProcessorException=" + e.getMessage());
945             throw new CreditCardProcessorException (CreditCardProcessorException.COMMUNICATION_ERROR, e.getMessage(), e);
946         }
947         
948     }
949
950 }
951
Popular Tags