KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > model > PP_PayFlowPro


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("License"); You may not use this file except in compliance with the License
4  * You may obtain a copy of the License at http://www.compiere.org/license.html
5  * Software distributed under the License is distributed on an "AS IS" basis,
6  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.model;
15
16 import java.math.*;
17 import java.util.*;
18 import java.io.*;
19
20 import com.Verisign.payment.PFProAPI;
21
22 import org.compiere.util.Ini;
23
24 /**
25  * Payment Processor for VeriSign PayFlow Pro.
26  * Needs Certification File (get from VeriSign)
27  *
28  * @author Jorg Janke
29  * @version $Id: PP_PayFlowPro.java,v 1.2 2003/08/31 06:48:59 jjanke Exp $
30  */

31 public final class PP_PayFlowPro extends PaymentProcessor
32     implements Serializable
33 {
34     /**
35      * PayFowPro Constructor
36      */

37     public PP_PayFlowPro()
38     {
39         super();
40         m_pp = new PFProAPI();
41         String JavaDoc path = Ini.getCompiereHome() + File.separator + "lib";
42         // Needs Certification File (not dustributed)
43
File file = new File (path, "f73e89fd.0");
44         if (!file.exists())
45             log.error("No cert file " + file.getAbsolutePath());
46         m_pp.SetCertPath (path);
47     } // PP_PayFowPro
48

49     // Payment System */
50
private PFProAPI m_pp = null;
51     private boolean m_ok = false;
52
53     public final static String JavaDoc RESULT_OK = "0";
54     public final static String JavaDoc RESULT_DECLINED = "12";
55     public final static String JavaDoc RESULT_INVALID_NO = "23";
56     public final static String JavaDoc RESULT_INVALID_EXP = "24";
57     public final static String JavaDoc RESULT_INSUFFICIENT_FUNDS = "50";
58     public final static String JavaDoc RESULT_TIMEOUT_PROCESSOR = "104";
59     public final static String JavaDoc RESULT_TIMEOUT_HOST = "109";
60
61     /**
62      * Get Version
63      * @return version
64      */

65     public String JavaDoc getVersion()
66     {
67         return "PayFlowPro " + m_pp.Version();
68     } // getVersion
69

70     /**
71      * Process CreditCard (no date check)
72      * @return true if processed successfully
73      * @throws IllegalArgumentException
74      */

75     public boolean processCC () throws IllegalArgumentException JavaDoc
76     {
77         log.debug("processCC - " + p_mpp.getHostAddress() + " " + p_mpp.getHostPort() + ", Timeout=" + getTimeout()
78             + "; Proxy=" + p_mpp.getProxyAddress() + " " + p_mpp.getProxyPort() + " " + p_mpp.getProxyLogon() + " " + p_mpp.getProxyPassword());
79         //
80
StringBuffer JavaDoc param = new StringBuffer JavaDoc();
81         // Transaction Type
82
if (p_mp.getTrxType().equals(MPayment.TRXTYPE_Sales))
83             param.append("TRXTYPE=").append(p_mp.getTrxType());
84         else
85             throw new IllegalArgumentException JavaDoc("PP_PayFlowPro TrxType not supported - " + p_mp.getTrxType());
86
87         // Mandatory Fields
88
param.append("&TENDER=C") // CreditCard
89
.append("&ACCT=").append(MPayment.checkNumeric(p_mp.getCreditCardNumber())); // CreditCard No
90
param.append("&EXPDATE="); // ExpNo
91
String JavaDoc month = String.valueOf(p_mp.getCreditCardExpMM());
92         if (month.length() == 1)
93             param.append("0");
94         param.append(month);
95         int expYY = p_mp.getCreditCardExpYY();
96         if (expYY > 2000)
97             expYY -= 2000;
98         String JavaDoc year = String.valueOf(expYY);
99         if (year.length() == 1)
100             param.append("0");
101         param.append(year);
102         param.append("&AMT=").append(p_mp.getPayAmt()); // Amount
103

104         // Optional Control Fields - AuthCode & Orig ID
105
param.append(createPair("&AUTHCODE", p_mp.getVoiceAuthCode(), 6));
106         param.append(createPair("&ORIGID", p_mp.getOrig_TrxID(), 12)); // PNREF - returned
107
// CVV
108
param.append(createPair("&CVV2", p_mp.getCreditCardVV(), 4));
109     // param.append(createPair("&SWIPE", p_mp.getXXX(), 80)); // Track 1+2
110

111         // Address
112
param.append(createPair("&NAME", p_mp.getA_Name(), 30));
113         param.append(createPair("&STREET", p_mp.getA_Street(), 30)); // Street
114
param.append(createPair("&ZIP", p_mp.getA_Zip(), 9)); // Zip 5-9
115
// CITY 20, STATE 2,
116
param.append(createPair("&EMAIL", p_mp.getA_EMail(), 64)); // EMail
117

118         // Amex Fields
119
// DESC, SHIPTOZIP, TAXAMT
120
// param.append(createPair("&DESC", p_mp.getXXX(), 23)); // Description
121
param.append(createPair("&SHIPTOZIP", p_mp.getA_Zip(), 6)); // Zip 6
122
param.append(createPair("&TAXAMT", p_mp.getTaxAmt(), 10)); // Tax
123

124         // Invoice No
125
param.append(createPair("&INVNUM", p_mp.getC_Invoice_ID(), 9));
126
127         // COMMENT1/2
128
param.append(createPair("&COMMENT1", p_mp.getC_Payment_ID(), 128)); // Comment
129
param.append(createPair("&COMMENT2", p_mp.getC_BPartner_ID(), 128)); // Comment2
130

131         return process(param.toString());
132     } // processCC
133

134     /**
135      * Process Transaction
136      * @param parameter Command String
137      * @return true if processed successfully
138      */

139     public boolean process (String JavaDoc parameter)
140     {
141         StringBuffer JavaDoc param = new StringBuffer JavaDoc(parameter);
142         // Usr/Pwd
143
param
144             .append("&PARTNER=").append(p_mpp.getPartnerID())
145             .append("&VENDOR=").append(p_mpp.getVendorID())
146             .append("&USER=").append(p_mpp.getUserID())
147             .append("&PWD=").append(p_mpp.getPassword());
148         log.debug("process -> " + param.toString());
149
150         // Call the PayFlowPro client.
151
int rc = m_pp.CreateContext (p_mpp.getHostAddress(), p_mpp.getHostPort(), getTimeout(),
152             p_mpp.getProxyAddress(), p_mpp.getProxyPort(), p_mpp.getProxyLogon(), p_mpp.getProxyPassword());
153         String JavaDoc response = m_pp.SubmitTransaction(param.toString());
154         m_pp.DestroyContext();
155         //
156
log.debug("process <- " + rc + " - " + response);
157         p_mp.setR_Result("");
158         p_mp.setR_Info(response); // complete info
159

160         // RESULT=1&PNREF=PN0001480030&RESPMSG=Invalid User Authentication
161
// RESULT=0&PNREF=P60501480167&RESPMSG=Approved&AUTHCODE=010101&AVSADDR=X&AVSZIP=X
162
// RESULT=-31&RESPMSG=The certificate chain did not validate, no local certificate found, javax.net.ssl.SSLException: Cert Path = C:\Compiere2\lib, Working Directory = C:\Compiere\compiere-all2\client\temp
163
StringTokenizer st = new StringTokenizer(response, "&", false);
164         while (st.hasMoreTokens())
165         {
166             String JavaDoc token = st.nextToken();
167             int pos = token.indexOf("=");
168             String JavaDoc name = token.substring(0, pos);
169             String JavaDoc value = token.substring(pos+1);
170             //
171
if (name.equals("RESULT"))
172             {
173                 p_mp.setR_Result (value);
174                 m_ok = RESULT_OK.equals(value);
175             }
176             else if (name.equals("PNREF"))
177                 p_mp.setR_PnRef(value);
178             else if (name.equals("RESPMSG"))
179                 p_mp.setR_RespMsg(value);
180             else if (name.equals("AUTHCODE"))
181                 p_mp.setR_AuthCode(value);
182             else if (name.equals("AVSADDR"))
183                 p_mp.setR_AvsAddr(value);
184             else if (name.equals("AVSZIP"))
185                 p_mp.setR_AvsZip(value);
186             else if (name.equals("IAVS")) // N=YSA, Y=International
187
;
188             else if (name.equals("CVV2MATCH")) // Y/N X=not supported
189
;
190             else
191                 log.error("process - Response unknown = " + token);
192         }
193         // Probelms with rc (e.g. 0 with Result=24)
194
return m_ok;
195     } // process
196

197     /**
198      * Payment is procesed successfully
199      * @return true if OK
200      */

201     public boolean isProcessedOK()
202     {
203         return m_ok;
204     } // isProcessedOK
205

206     /*************************************************************************/
207
208     /**
209      * Check for delimiter fields &= and add length
210      * @param name name
211      * @param value value
212      * @param maxLength maximum length
213      * @return name[5]=value or name=value
214      */

215     private String JavaDoc createPair(String JavaDoc name, BigDecimal value, int maxLength)
216     {
217         if (value == null)
218             return createPair (name, "0", maxLength);
219         else
220             return createPair (name, String.valueOf(value), maxLength);
221     } // createPair
222

223     /**
224      * Check for delimiter fields &= and add length
225      * @param name name
226      * @param value value
227      * @param maxLength maximum length
228      * @return name[5]=value or name=value
229      */

230     private String JavaDoc createPair(String JavaDoc name, int value, int maxLength)
231     {
232         if (value == 0)
233             return "";
234         else
235             return createPair (name, String.valueOf(value), maxLength);
236     } // createPair
237

238     /**
239      * Check for delimiter fields &= and add length
240      * @param name name
241      * @param value value
242      * @param maxLength maximum length
243      * @return name[5]=value or name=value
244      */

245     private String JavaDoc createPair(String JavaDoc name, String JavaDoc value, int maxLength)
246     {
247         // Nothing to say
248
if (name == null || name.length() == 0
249             || value == null || value.length() == 0)
250             return "";
251
252         StringBuffer JavaDoc retValue = new StringBuffer JavaDoc(name);
253         // optional [length]
254
if (value.indexOf("&") != -1 || value.indexOf("=") != -1)
255             retValue.append("[").append(value.length()).append("]");
256         //
257
retValue.append("=");
258         if (value.length() > maxLength)
259             retValue.append(value.substring(0, maxLength));
260         else
261             retValue.append(value);
262         return retValue.toString();
263     } // createPair
264

265 } // PP_PayFowPro
266
Popular Tags