📄 mpayment.java
字号:
/**
* Get Trx Type
* @return TrxType
*/
public String getTrxType()
{
return (String)getValue("TrxType");
} // getTrxType
/**
* Set Bank Account for Payment.
* @param C_BankAccount_ID C_BankAccount_ID
*/
public void setC_BankAccount_ID (int C_BankAccount_ID)
{
if (C_BankAccount_ID == 0)
{
setPaymentProcessor();
if (getC_BankAccount_ID() == 0)
throw new IllegalArgumentException("MPayment.setC_BankAccount_ID - can't find Bank Account");
}
else
setValue ("C_BankAccount_ID", new Integer(C_BankAccount_ID));
} // setC_BankAccount_ID
/**
* Get Bank Account
* @return C_BankAccount_ID
*/
public int getC_BankAccount_ID()
{
Integer ii = (Integer)getValue("C_BankAccount_ID");
if (ii == null)
return 0;
return ii.intValue();
} // getC_BankAccount_ID
/**
* Set BankAccount and PaymentProcessor
* @return true if found
*/
public boolean setPaymentProcessor ()
{
return setPaymentProcessor (getTenderType(), getCreditCardType());
} // setPaymentProcessor
/**
* Set BankAccount and PaymentProcessor
* @param tender TenderType see TENDER_
* @param CCType CC Type see CC_
* @return true if found
*/
public boolean setPaymentProcessor (String tender, String CCType)
{
m_mpp = findPaymentProcessor (getCtx(), tender, CCType, getAD_Client_ID(),
getC_Currency_ID(), getPayAmt());
if (m_mpp != null)
setC_BankAccount_ID (m_mpp.getC_BankAccount_ID());
//
return m_mpp != null;
} // setPaymentProcessor
/**
* Get BankAccount & PaymentProcessor
* @param ctx context
* @param tender Tender see TENDER_
* @param CCType CC Type see CC_
* @param AD_Client_ID Client
* @param C_Currency_ID Currency (ignored)
* @param Amt Amount (ignored)
* @return Array of BankAccount[0] & PaymentProcessor[1] or null
*/
public static int findBankAccount (Properties ctx,
String tender, String CCType,
int AD_Client_ID, int C_Currency_ID, BigDecimal Amt)
{
MPaymentProcessor mpp = findPaymentProcessor(ctx,
tender, CCType, AD_Client_ID, C_Currency_ID, Amt);
if (mpp == null)
return 0;
return mpp.getC_BankAccount_ID();
} // findBankAccount
/**
* Get BankAccount & PaymentProcessor
* @param ctx context
* @param tender Tender see TENDER_
* @param CCType CC Type see CC_
* @param AD_Client_ID Client
* @param C_Currency_ID Currency (ignored)
* @param Amt Amount (ignored)
* @return Array of BankAccount[0] & PaymentProcessor[1] or null
*/
protected static MPaymentProcessor findPaymentProcessor (Properties ctx,
String tender, String CCType,
int AD_Client_ID, int C_Currency_ID, BigDecimal Amt)
{
StringBuffer sql = new StringBuffer("SELECT * "
+ "FROM C_PaymentProcessor "
+ "WHERE AD_Client_ID=? AND IsActive='Y'");
if (tender.equals(TENDER_ACH))
sql.append(" AND AcceptACH='Y'");
else if (tender.equals(TENDER_CHECK))
sql.append(" AND AcceptCheck='Y'");
// CreditCards
else if (CCType.equals(CC_AMEX))
sql.append(" AND AcceptAMEX='Y'");
else if (CCType.equals(CC_DINERS))
sql.append(" AND AcceptDiners='Y'");
else if (CCType.equals(CC_DISCOVER))
sql.append(" AND AcceptDiscover='Y'");
else if (CCType.equals(CC_MASTERCARD))
sql.append(" AND AcceptMC='Y'");
else if (CCType.equals(CC_PURCHASE))
sql.append(" AND AcceptCORPORATE='Y'");
else if (CCType.equals(CC_VISA))
sql.append(" AND AcceptVISA='Y'");
//
// sql.append(" AND (C_Currency_ID IS NULL OR C_Currency_ID=?)");
MPaymentProcessor retValue = null;
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString());
pstmt.setInt(1, AD_Client_ID);
// pstmt.setInt(2, C_Currency_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
retValue = new MPaymentProcessor (ctx, rs);
else
s_log.warn("findPaymentProcessor - no found - " + sql + ", AD_Client_ID=" + AD_Client_ID);
rs.close();
pstmt.close();
}
catch (SQLException e)
{
s_log.error("findPaymentProcessor", e);
return null;
}
return retValue;
} // findPaymentProcessor
/*************************************************************************/
/**
* Set Tender Type if valid
* @param TenderType Tender Type see TENDER_
*/
public void setTenderType (String TenderType)
{
if (TenderType == null)
return;
if (TenderType.equals(TENDER_ACH)
|| TenderType.equals(TENDER_CHECK)
|| TenderType.equals(TENDER_CREDITCARD))
setValue ("TenderType", TenderType);
} // setTenderType
/**
* Get Tender Type.
* See TENDER_
* @return Tender Type
*/
public String getTenderType()
{
return (String)getValue("TenderType");
} // getTenderYupe
/**
* Set Credit Card if valid
*
* @param CreditCardType credit card type see CC_
*/
public void setCreditCardType (String CreditCardType)
{
if (CreditCardType == null)
return;
if (CreditCardType.equals(CC_AMEX)
|| CreditCardType.equals(CC_DINERS)
|| CreditCardType.equals(CC_DISCOVER)
|| CreditCardType.equals(CC_MASTERCARD)
|| CreditCardType.equals(CC_PURCHASE)
|| CreditCardType.equals(CC_VISA))
setValue ("CreditCardType", CreditCardType);
} // setCreditCardType
/**
* Get Credit Card Type
* @return Credit Card Type see CC_
*/
public String getCreditCardType()
{
return (String)getValue("CreditCardType");
} // getCreditCardType
/*************************************************************************/
/**
* Credit Card Number
* @param CreditCardNumber CreditCard Number
*/
public void setCreditCardNumber (String CreditCardNumber)
{
setValue("CreditCardNumber", checkNumeric(CreditCardNumber));
} // setCreditCardNumber
/**
* Get Credit Card Number
* @return CC Number
*/
public String getCreditCardNumber()
{
return (String)getValue("CreditCardNumber");
} // getCreditCardNumber
/**
* Validate Credit Card Number.
* - Based on LUHN formula
* @param creditCardNumber credit card number
* @return "" or Error AD_Message
*/
public static String validateCreditCardNumber (String creditCardNumber)
{
if (creditCardNumber == null || creditCardNumber.length() == 0)
return "CreditCardNumberError";
/**
* 1: Double the value of alternate digits beginning with
* the first right-hand digit (low order).
* 2: Add the individual digits comprising the products
* obtained in step 1 to each of the unaffected digits
* in the original number.
* 3: Subtract the total obtained in step 2 from the next higher
* number ending in 0 [this in the equivalent of calculating
* the "tens complement" of the low order digit (unit digit)
* of the total].
* If the total obtained in step 2 is a number ending in zero
* (30, 40 etc.), the check digit is 0.
* Example:
* Account number: 4992 73 9871 6
*
* 4 9 9 2 7 3 9 8 7 1 6
* x2 x2 x2 x2 x2
* -------------------------------
* 4 18 9 4 7 6 9 16 7 2 6
*
* 4 + 1 + 8 + 9 + 4 + 7 + 6 + 9 + 1 + 6 + 7 + 2 + 6 = 70
* 70 % 10 = 0
*/
// Clean up number
String ccNumber1 = checkNumeric(creditCardNumber);
int ccLength = ccNumber1.length();
// Reverse string
StringBuffer buf = new StringBuffer();
for (int i = ccLength; i != 0; i--)
buf.append(ccNumber1.charAt(i-1));
String ccNumber = buf.toString();
int sum = 0;
for (int i = 0; i < ccLength; i++)
{
int digit = Character.getNumericValue(ccNumber.charAt(i));
if (i % 2 == 1)
{
digit *= 2;
if (digit > 9)
digit -= 9;
}
sum += digit;
}
if (sum % 10 == 0)
return "";
s_log.debug("validateCreditCardNumber - " + creditCardNumber + " -> "
+ ccNumber + ", Luhn=" + sum);
return "CreditCardNumberError";
} // validateCreditCardNumber
/**
* Validate Credit Card Number.
* - Check Card Type and Length
* @param creditCardNumber CC Number
* @param creditCardType CC Type
* @return "" or Error AD_Message
*/
public static String validateCreditCardNumber (String creditCardNumber, String creditCardType)
{
if (creditCardNumber == null || creditCardType == null)
return "CreditCardNumberError";
// http://www.beachnet.com/~hstiles/cardtype.html
// http://staff.semel.fi/~kribe/document/luhn.htm
String ccStartList = ""; // comma separated list of starting numbers
String ccLengthList = ""; // comma separated list of lengths
//
if (creditCardType.equals(CC_MASTERCARD))
{
ccStartList = "51,52,53,54,55";
ccLengthList = "16";
}
else if (creditCardType.equals(CC_VISA))
{
ccStartList = "4";
ccLengthList = "13,16";
}
else if (creditCardType.equals(CC_AMEX))
{
ccStartList = "34,37";
ccLengthList = "15";
}
else if (creditCardType.equals(CC_AMEX))
{
ccStartList = "30,36,38";
ccLengthList = "14";
}
else if (creditCardType.equals(CC_DISCOVER))
{
ccStartList = "6011";
ccLengthList = "16";
}
else if (creditCardType.equals(CC_DINERS))
{
ccStartList = "300,301,302,303,304,305,36,38";
ccLengthList = "14";
}
else
{
// enRouteCard
ccStartList = "2014,2149";
ccLengthList = "15";
// JCBCard
ccStartList += ",3088,3096,3112,3158,3337,3528";
ccLengthList += ",16";
// JCBCard
ccStartList += ",2131,1800";
ccLengthList += ",15";
}
// Clean up number
String ccNumber = checkNumeric(creditCardNumber);
/**
* Check Length
*/
int ccLength = ccNumber.length();
boolean ccLengthOK = false;
StringTokenizer st = new StringTokenizer(ccLengthList, ",", false);
while (st.hasMoreTokens() && !ccLengthOK)
{
int l = Integer.parseInt(st.nextToken());
if (ccLength == l)
ccLengthOK = true;
}
if (!ccLengthOK)
{
s_log.debug("validateCreditCardNumber Length="
+ ccLength + " <> " + ccLengthList);
return "CreditCardNumberError";
}
/**
* Check Start Digits
*/
boolean ccIdentified = false;
st = new StringTokenizer(ccStartList, ",", false);
while (st.hasMoreTokens() && !ccIdentified)
{
if (ccNumber.startsWith(st.nextToken()))
ccIdentified = true;
}
if (!ccIdentified)
s_log.debug("validateCreditCardNumber Type="
+ creditCardType + " <> " + ccStartList);
//
String check = validateCreditCardNumber(ccNumber);
if (check.length() != 0)
return check;
if (!ccIdentified)
return "CreditCardNumberProblem?";
return "";
} // validateCreditCardNumber
/*************************************************************************/
/**
* Verification Code
* @param newCreditCardVV CC verification
*/
public void setCreditCardVV(String newCreditCardVV)
{
setValue ("CreditCardVV", checkNumeric(newCreditCardVV));
} // setCreditCardVV
/**
* Get CC Verification Code
* @return CC Verification Code
*/
public String getCreditCardVV()
{
return (String)getValue("CreditCardVV");
} // getCreditCardVV
/**
* Validate Validation Code
* @param creditCardVV CC Verification Code
* @return "" or Error AD_Message
*/
public static String validateCreditCardVV (String creditCardVV)
{
if (creditCardVV == null)
return "";
int length = checkNumeric(creditCardVV).length();
if (length == 3 || length == 4)
return "";
try
{
Integer.parseInt (creditCardVV);
return "";
}
catch (NumberFormatException ex)
{
s_log.debug("validateCreditCardVV - " + ex);
}
s_log.debug("validateCreditCardVV - length=" + length);
return "CreditCardVVError";
} // validateCreditCardVV
/**
* Validate Validation Code
* @param creditCardVV CC Verification Code
* @param creditCardType CC Type see CC_
* @return "" or Error AD_Message
*/
public static String validateCreditCardVV (String creditCardVV, String creditCardType)
{
// no data
if (creditCardVV == null || creditCardVV.length() == 0
|| creditCardType == null || creditCardType.length() == 0)
return "";
int length = checkNumeric(creditCardVV).length();
// Amex = 4 digits
if (creditCardType.equals(CC_AMEX))
{
if (length == 4)
{
try
{
Integer.parseInt (creditCardVV);
return "";
}
catch (NumberFormatException ex)
{
s_log.debug("validateCreditCardVV - " + ex);
}
}
s_log.debug("validateCreditCardVV(4) CC=" + creditCardType + ", length=" + length);
return "CreditCardVVError";
}
// Visa & MasterCard - 3 digits
if (creditCardType.equals(CC_VISA) || creditCardType.equals(CC_MASTERCARD))
{
if (length == 3)
{
try
{
Integer.parseInt (creditCardVV);
return "";
}
catch (NumberFormatException ex)
{
s_log.debug("validateCreditCardVV - " + ex);
}
}
s_log.debug("validateCreditCardVV(3) CC=" + creditCardType + ", length=" + length);
return "CreditCardVVError";
}
// Other
return "";
} // validateCreditCardVV
/*************************************************************************/
/**
* Two Digit CreditCard MM
* @param CreditCardExpMM Exp month
* @return true if valid
*/
public boolean setCreditCardExpMM (int CreditCardExpMM)
{
if (CreditCardExpMM < 1 || CreditCardExpMM > 12)
return false;
setValue ("CreditCardExpMM", new Integer (CreditCardExpMM));
return true;
} // setCreditCardExpMM
/**
* Get Exp month
* @return Exp month
*/
public int getCreditCardExpMM()
{
Integer ii = (Integer)getValue("CreditCardExpMM");
if (ii == null)
return 0;
return ii.intValue();
} // getCreditCardExpMM
/**
* Two digit CreditCard YY (til 2020)
* @param newCreditCardExpYY 2 or 4 digit year
* @return true if valid
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -