1 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 31 public final class PP_PayFlowPro extends PaymentProcessor 32 implements Serializable 33 { 34 37 public PP_PayFlowPro() 38 { 39 super(); 40 m_pp = new PFProAPI(); 41 String path = Ini.getCompiereHome() + File.separator + "lib"; 42 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 } 49 private PFProAPI m_pp = null; 51 private boolean m_ok = false; 52 53 public final static String RESULT_OK = "0"; 54 public final static String RESULT_DECLINED = "12"; 55 public final static String RESULT_INVALID_NO = "23"; 56 public final static String RESULT_INVALID_EXP = "24"; 57 public final static String RESULT_INSUFFICIENT_FUNDS = "50"; 58 public final static String RESULT_TIMEOUT_PROCESSOR = "104"; 59 public final static String RESULT_TIMEOUT_HOST = "109"; 60 61 65 public String getVersion() 66 { 67 return "PayFlowPro " + m_pp.Version(); 68 } 70 75 public boolean processCC () throws IllegalArgumentException  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 StringBuffer param = new StringBuffer (); 81 if (p_mp.getTrxType().equals(MPayment.TRXTYPE_Sales)) 83 param.append("TRXTYPE=").append(p_mp.getTrxType()); 84 else 85 throw new IllegalArgumentException ("PP_PayFlowPro TrxType not supported - " + p_mp.getTrxType()); 86 87 param.append("&TENDER=C") .append("&ACCT=").append(MPayment.checkNumeric(p_mp.getCreditCardNumber())); param.append("&EXPDATE="); String 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 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()); 104 param.append(createPair("&AUTHCODE", p_mp.getVoiceAuthCode(), 6)); 106 param.append(createPair("&ORIGID", p_mp.getOrig_TrxID(), 12)); param.append(createPair("&CVV2", p_mp.getCreditCardVV(), 4)); 109 111 param.append(createPair("&NAME", p_mp.getA_Name(), 30)); 113 param.append(createPair("&STREET", p_mp.getA_Street(), 30)); param.append(createPair("&ZIP", p_mp.getA_Zip(), 9)); param.append(createPair("&EMAIL", p_mp.getA_EMail(), 64)); 118 param.append(createPair("&SHIPTOZIP", p_mp.getA_Zip(), 6)); param.append(createPair("&TAXAMT", p_mp.getTaxAmt(), 10)); 124 param.append(createPair("&INVNUM", p_mp.getC_Invoice_ID(), 9)); 126 127 param.append(createPair("&COMMENT1", p_mp.getC_Payment_ID(), 128)); param.append(createPair("&COMMENT2", p_mp.getC_BPartner_ID(), 128)); 131 return process(param.toString()); 132 } 134 139 public boolean process (String parameter) 140 { 141 StringBuffer param = new StringBuffer (parameter); 142 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 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 response = m_pp.SubmitTransaction(param.toString()); 154 m_pp.DestroyContext(); 155 log.debug("process <- " + rc + " - " + response); 157 p_mp.setR_Result(""); 158 p_mp.setR_Info(response); 160 StringTokenizer st = new StringTokenizer(response, "&", false); 164 while (st.hasMoreTokens()) 165 { 166 String token = st.nextToken(); 167 int pos = token.indexOf("="); 168 String name = token.substring(0, pos); 169 String value = token.substring(pos+1); 170 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")) ; 188 else if (name.equals("CVV2MATCH")) ; 190 else 191 log.error("process - Response unknown = " + token); 192 } 193 return m_ok; 195 } 197 201 public boolean isProcessedOK() 202 { 203 return m_ok; 204 } 206 207 208 215 private String createPair(String 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 } 223 230 private String createPair(String name, int value, int maxLength) 231 { 232 if (value == 0) 233 return ""; 234 else 235 return createPair (name, String.valueOf(value), maxLength); 236 } 238 245 private String createPair(String name, String value, int maxLength) 246 { 247 if (name == null || name.length() == 0 249 || value == null || value.length() == 0) 250 return ""; 251 252 StringBuffer retValue = new StringBuffer (name); 253 if (value.indexOf("&") != -1 || value.indexOf("=") != -1) 255 retValue.append("[").append(value.length()).append("]"); 256 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 } 265 }
| Popular Tags
|