一、導入中金支付的jar包;
二、將所需要的支付方法拷貝出來;
三、將讀取文件的相對地址改爲動態獲取服務器的地址,便於不同服務器之間部署項目不用修改地址;
四、代碼:
package com.yqs.pay.util.cpcn;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.HashMap;
import java.util.Properties;
import org.apache.log4j.Logger;
import payment.api.system.CMBEnvironment;
import payment.api.system.CrossBorderEnvironment;
import payment.api.system.PaymentEnvironment;
import payment.api.system.PaymentUserEnvironment;
import payment.api.system.TxMessenger;
import payment.api.tx.accountvalidation.Tx2341Request;
import payment.api.tx.accountvalidation.Tx2341Response;
import payment.api.tx.accountvalidation.Tx2342Request;
import payment.api.tx.accountvalidation.Tx2342Response;
import payment.api.tx.bankcorp.Tx4510Request;
import payment.api.tx.bankcorp.Tx4510Response;
import payment.api.tx.bankcorp.Tx4530Request;
import payment.api.tx.bankcorp.Tx4530Response;
import payment.api.tx.bankcorp.Tx4532Request;
import payment.api.tx.bankcorp.Tx4532Response;
import payment.api.tx.merchantorder.Tx1112Request;
import payment.api.tx.realgathering.Tx2011Request;
import payment.api.tx.realgathering.Tx2011Response;
import payment.api.vo.BankAccount;
import payment.api.vo.PaymentAccount;
public class CPCNUtil {
private static final String institutionID = "****";
private static final Logger log = Logger.getLogger(CPCNUtil.class);
private static String paymentAccountName;
private static String paymentAccountNumber;
/**李總的銀行信息*/
public static String bankID;
public static String accountName;
public static String accountPhone;
public static String accountNum;
public static HashMap<String,String> dealRequestResult(HashMap<String,String> map){
HashMap<String,String> paramMap = new HashMap<String,String>();
try {
// 獲得參數message和signature
String message = map.get("message");
String signature = map.get("signature");
String txCode = map.get("txCode");
String flag = map.get("Flag");
// 與支付平臺進行通訊
TxMessenger txMessenger = new TxMessenger();
String[] respMsg = null;
// Flag=10:cmb, 20:paymentAccount
if ("10".equals(flag)) {
//HTTP默認連接超時時間是25s,讀超時時間是25s
//HTTPS默認連接超時時間是50s,讀超時時間是50s
respMsg = txMessenger.send(message, signature, CMBEnvironment.cmbtxURL);// 0:message;
//設置連接超時時間和讀超時時間
//int connectTimeoutLimit = 50000; 設置連接超時時間(單位ms)
//int readTimeoutLimit = 50000; 設置讀超時時間(單位ms)
//respMsg = txMessenger.send(message, signature, connectTimeoutLimit, readTimeoutLimit, CMBEnvironment.cmbtxURL);// 0:message;
} else if ("20".equals(flag)) {
//HTTP默認連接超時時間是25s,讀超時時間是25s
//HTTPS默認連接超時時間是50s,讀超時時間是50s
respMsg = txMessenger.send(message, signature, PaymentUserEnvironment.paymentusertxURL);
//設置連接超時時間和讀超時時間
//int connectTimeoutLimit = 50000; 設置連接超時時間(單位ms)
//int readTimeoutLimit = 50000; 設置讀超時時間(單位ms)
//respMsg = txMessenger.send(message, signature, connectTimeoutLimit, readTimeoutLimit, PaymentUserEnvironment.paymentusertxURL);// 0:message;
} else if ("30".equals(flag)) {
//HTTP默認連接超時時間是25s,讀超時時間是25s
//HTTPS默認連接超時時間是50s,讀超時時間是50s
respMsg = txMessenger.send(message, signature, CrossBorderEnvironment.crossBorderTxURL);
//設置連接超時時間和讀超時時間
//int connectTimeoutLimit = 50000; 設置連接超時時間(單位ms)
//int readTimeoutLimit = 50000; 設置讀超時時間(單位ms)
//respMsg = txMessenger.send(message, signature, connectTimeoutLimit, readTimeoutLimit, PaymentUserEnvironment.paymentusertxURL);// 0:message;
} else {
//HTTP默認連接超時時間是25s,讀超時時間是25s
//HTTPS默認連接超時時間是50s,讀超時時間是50s
respMsg = txMessenger.send(message, signature);// 0:message;
//設置連接超時時間和讀超時時間
//int connectTimeoutLimit = 50000; 設置連接超時時間(單位ms)
//int readTimeoutLimit = 50000; 設置讀超時時間(單位ms)
//respMsg = txMessenger.send(message, signature, connectTimeoutLimit, readTimeoutLimit);// 0:message;
}
// 1:signature
String plainText = new String(payment.tools.util.Base64.decode(respMsg[0]), "UTF-8");
log.debug("[message]=[" + respMsg[0] + "]");
log.debug("[signature]=[" + respMsg[1] + "]");
log.debug("[plainText]=[" + plainText + "]");
// 將結果保存在request中,以備在Response.jsp頁面顯示
if ("2011".equals(txCode)) {
Tx2011Response txResponse = new Tx2011Response(respMsg[0], respMsg[1]);
if(txResponse.getCode().equals("2000")){
paramMap.put("Code", txResponse.getCode());
log.info("[Message]=[" + txResponse.getMessage() + "]");
log.info("[InstitutionID]=[" + txResponse.getInstitutionID() + "]");
log.info("[TxSN]=[" + txResponse.getTxSN() + "]");
log.info("[Amount]=[" + txResponse.getAmount() + "]");
log.info("[Status]=[" + txResponse.getStatus() + "]");
log.info("[BankTxTime]=[" + txResponse.getBankTxTime() + "]");
log.info("[ResponseCode]=[" + txResponse.getResponseCode() + "]");
log.info("[ResponseMessage]=[" + txResponse.getResponseMessage() + "]");
paramMap.put("Message", txResponse.getMessage());
paramMap.put("TxSN", txResponse.getTxSN());
paramMap.put("Amount", txResponse.getAmount()+"");
paramMap.put("Status", txResponse.getStatus()+"");
paramMap.put("BankTxTime", txResponse.getBankTxTime());
paramMap.put("ResponseCode", txResponse.getResponseCode());
paramMap.put("ResponseMessage", txResponse.getResponseMessage());
return paramMap;
}
// 處理業務
} else if ("2341".equals(txCode)) {// 賬戶驗證
Tx2341Response tx2340Response = new Tx2341Response(respMsg[0], respMsg[1]);
log.info("[Code]=["+tx2340Response.getCode()+"]");
log.info("[Message]=["+tx2340Response.getMessage()+"]");
paramMap.put("Code", tx2340Response.getCode());
paramMap.put("Message", tx2340Response.getMessage());
return paramMap;
} else if ("2342".equals(txCode)) {
Tx2342Response tx2342Response = new Tx2342Response(respMsg[0], respMsg[1]);
if(tx2342Response.getCode().equals("2000")){
log.info("[Message]=[" + tx2342Response.getMessage() + "]");
log.info("[InstitutionID]=[" + tx2342Response.getInstitutionID() + "]");
log.info("[TxSN]=[" + tx2342Response.getTxSN() + "]");
log.info("[VerifyStatus]=[" + tx2342Response.getVerifyStatus() + "]");
log.info("[Status]=[" + tx2342Response.getStatus() + "]");
log.info("[ResponseTime]=[" + tx2342Response.getResponseTime() + "]");
log.info("[ResponseCode]=[" + tx2342Response.getResponseCode() + "]");
log.info("[ResponseMessage]=[" + tx2342Response.getResponseMessage() + "]");
log.info("[IssueBankID]=[" + tx2342Response.getIssueBankID() + "]");
log.info("[IssueCardType]=[" + tx2342Response.getIssueCardType() + "]");
paramMap.put("Code", tx2342Response.getCode());
paramMap.put("Message", tx2342Response.getMessage());
paramMap.put("TxSN", tx2342Response.getTxSN());
paramMap.put("VerifyStatus", tx2342Response.getVerifyStatus());
paramMap.put("Status", tx2342Response.getStatus());
paramMap.put("ResponseMessage", tx2342Response.getResponseMessage());
paramMap.put("IssueBankID", tx2342Response.getIssueBankID());
paramMap.put("IssueCardType", tx2342Response.getIssueCardType());
// 處理業務
return paramMap;
}
} else if("4530".equals(txCode)){
Tx4530Response tx4530Response = new Tx4530Response(respMsg[0], respMsg[1]);
if(tx4530Response.getCode().equals("2000")){
log.info("[Code]=["+tx4530Response.getCode()+"]");
log.info("[Message]=["+tx4530Response.getMessage()+"]");
log.info("[TxSN]=["+tx4530Response.getTxSN()+"]");
log.info("[Status]=["+tx4530Response.getStatus()+"]");
log.info("[BankResponseCode]=["+tx4530Response.getBankResponseCode()+"]");
log.info("[BankResponseMessage]=["+tx4530Response.getBankResponseMessage()+"]");
paramMap.put("Code", tx4530Response.getCode());
paramMap.put("Message", tx4530Response.getMessage());
paramMap.put("TxSN", tx4530Response.getTxSN());
paramMap.put("Status", tx4530Response.getStatus()+"");
paramMap.put("BankResponseCode", tx4530Response.getBankResponseCode());
paramMap.put("BankResponseMessage", tx4530Response.getBankResponseMessage());
return paramMap;
}
}else if("4532".equals(txCode)){
Tx4532Response tx4532Response = new Tx4532Response(respMsg[0], respMsg[1]);
if(tx4532Response.getCode().equals("2000")){
log.info("[Code]=["+tx4532Response.getCode()+"]");
log.info("[Message]=["+tx4532Response.getMessage()+"]");
log.info("[TxSN]=["+tx4532Response.getTxSN()+"]");
log.info("[Status]=["+tx4532Response.getStatus()+"]");
log.info("[BankResponseCode]=["+tx4532Response.getBankResponseCode()+"]");
log.info("[BankResponseMessage]=["+tx4532Response.getBankResponseMessage()+"]");
paramMap.put("Message", tx4532Response.getMessage());
paramMap.put("TxSN", tx4532Response.getTxSN());
paramMap.put("Status", tx4532Response.getStatus()+"");
paramMap.put("BankResponseCode", tx4532Response.getBankResponseCode());
paramMap.put("BankResponseMessage", tx4532Response.getBankResponseMessage());
return paramMap;
}
}else if ("4510".equals(txCode)) {// 支付賬戶餘額查詢
Tx4510Response tx4510Response = new Tx4510Response(respMsg[0], respMsg[1]);
if ("2000".equals(tx4510Response.getCode())) {
// 處理業務
paramMap.put("Code", tx4510Response.getCode());
paramMap.put("Message", tx4510Response.getMessage());
paramMap.put("BankResponseMessage", tx4510Response.getBalance()+"");
return paramMap;
}
}
// 轉向Response.jsp頁面
return paramMap;
} catch (Exception e) {
e.printStackTrace();
return paramMap;
}
}
/**中金四要素驗證*/
public static HashMap<String,String> tx2341(String txSN,String accountName,String accountNumber,String identificationType,String identificationNumber,String phoneNumber){
HashMap<String, String> map = new HashMap<String,String>();
try {
/* 2.創建交易請求對象 */
Tx2341Request tx2341Request = new Tx2341Request();
tx2341Request.setInstitutionID(institutionID);
tx2341Request.setTxSN(txSN);
tx2341Request.setAccountNumber(accountNumber);
tx2341Request.setAccountName(accountName);
tx2341Request.setIdentificationType(identificationType);
tx2341Request.setIdentificationNumber(identificationNumber);
tx2341Request.setPhoneNumber(phoneNumber);
/* 3.執行報文處理 */
tx2341Request.process();
/* 4.將參數放置到request對象 */
map.put("plainText", tx2341Request.getRequestPlainText());
map.put("message", tx2341Request.getRequestMessage());
map.put("signature", tx2341Request.getRequestSignature());
map.put("txCode", "2341");
map.put("txName", "四要素驗證(發送驗證短信)");
return dealRequestResult(map);
} catch (Exception e) {
e.printStackTrace();
log.fatal("報文處理異常:"+e.getMessage());
//request.setAttribute("errorMessage", e.getMessage());
map.put("exception", e.getMessage());
return map;
}
}
/**中金四要素短信驗證*/
public static HashMap<String,String> tx2342(String txSN,String SMSValidationCode){
HashMap<String, String> map = new HashMap<String,String>();
try {
/* 1.取參數 */
log.info("txSN: "+txSN);
log.info("SMSValidationCode: "+SMSValidationCode);
/* 2.創建交易請求對象 */
Tx2342Request tx2342Request = new Tx2342Request();
tx2342Request.setInstitutionID(institutionID);
tx2342Request.setTxSN(txSN);
tx2342Request.setSMSValidationCode(SMSValidationCode);
/* 3.執行報文處理 */
tx2342Request.process();
/* 4.將參數放置到request對象 */
map.put("plainText", tx2342Request.getRequestPlainText());
map.put("message", tx2342Request.getRequestMessage());
map.put("signature", tx2342Request.getRequestSignature());
map.put("txCode", "2342");
map.put("txName", "四要素驗證(驗證短信並驗證信息)");
return dealRequestResult(map);
} catch (Exception e) {
e.printStackTrace();
log.fatal("報文處理異常:"+e.getMessage());
//request.setAttribute("errorMessage", e.getMessage());
map.put("exception", e.getMessage());
return map;
}
}
/**中金c2b代收*/
public static HashMap<String,String> tx2011(String txSN,String amount,String bankID,String accountName
,String accountNumber,String identificationNumber,String phoneNum){
HashMap<String, String> map = new HashMap<String,String>();
try {
// 2.創建交易請求對象
Tx2011Request tx2011Request = new Tx2011Request();
tx2011Request.setInstitutionID(institutionID);
tx2011Request.setTxSN(txSN);
tx2011Request.setAmount(Long.parseLong(amount));
tx2011Request.setBankID(bankID);
tx2011Request.setAccountName(accountName);
tx2011Request.setAccountNumber(accountNumber);
tx2011Request.setAccountType(11);
tx2011Request.setSettlementFlag("0002");
tx2011Request.setNote("10");/**測試充值備註10 返回充值成功!*/
tx2011Request.setIdentificationType("0");
tx2011Request.setIdentificationNumber(identificationNumber);
tx2011Request.setPhoneNumber(phoneNum);
// 3.執行報文處理
tx2011Request.process();
// 4.將參數放置到request對象
map.put("plainText", tx2011Request.getRequestPlainText());
map.put("message", tx2011Request.getRequestMessage());
map.put("signature", tx2011Request.getRequestSignature());
map.put("txCode", "2011");
map.put("txName", "單筆代收請求");
return dealRequestResult(map);
} catch (Exception e) {
e.printStackTrace();
log.fatal("請求代收異常:"+e.getMessage());
map.put("exception", e.getMessage());
return map;
}
}
/**中金代付單筆代付*/
public static HashMap<String,String> tx4530Request(String txSN,int amount){
HashMap<String, String> map = new HashMap<String,String>();
try {
/**拼接參數*/
Tx4530Request tx4530Request = new Tx4530Request();
tx4530Request.setInstitutionID(institutionID);
tx4530Request.setTxSN(txSN);
tx4530Request.setPayer(new PaymentAccount());
tx4530Request.getPayer().setPaymentAccountName(paymentAccountName);
tx4530Request.getPayer().setPaymentAccountNumber(paymentAccountNumber);
tx4530Request.setPayee(new BankAccount());
tx4530Request.getPayee().setAccountType(11);
tx4530Request.getPayee().setBankID(bankID);
tx4530Request.getPayee().setAccountName(accountName);
tx4530Request.getPayee().setAccountNumber(accountNum);
tx4530Request.getPayee().setPhoneNumber(accountPhone);
tx4530Request.setAmount(amount);
/**發送請求並請求數據*/
tx4530Request.process();
/**打包數據,轉方法進行解析*/
map.put("plainText", tx4530Request.getRequestPlainText());
map.put("message", tx4530Request.getRequestMessage());
map.put("signature", tx4530Request.getRequestSignature());
map.put("txCode", "4530");
map.put("txName", "單筆代付請求");
return dealRequestResult(map);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.fatal("請求代付異常",e);
map.put("exception",e.getMessage());
return map;
}
}
/**4532查詢接口,查詢4530代收支付狀態*/
public static HashMap<String,String> tx4532Request(String txSN){
HashMap<String, String> map = new HashMap<String,String>();
try {
Tx4532Request tx4532Request = new Tx4532Request();
tx4532Request.setInstitutionID(institutionID);
tx4532Request.setTxSN(txSN);
tx4532Request.process();
map.put("plainText", tx4532Request.getRequestPlainText());
map.put("message", tx4532Request.getRequestMessage());
map.put("signature", tx4532Request.getRequestSignature());
map.put("txCode", "4532");
map.put("txName", "單筆代付查詢");
return dealRequestResult(map);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.fatal("用流水號查詢訂單異常",e);
map.put("exception", e.getMessage());
return map;
}
}
/**請求中金B2B非直通車*///可能用
public static HashMap<String,String> getTx1112Message(String payMentNo,String amount,String notificationURL){
Tx1112Request tx1112Request = new Tx1112Request();
tx1112Request.setInstitutionID(institutionID);
tx1112Request.setPaymentNo(payMentNo);
tx1112Request.setAmount(Long.parseLong(amount));
tx1112Request.setSettlementFlag("0001");
tx1112Request.setNotificationURL(notificationURL);
// 3.執行報文處理
HashMap<String, String> map = new HashMap<String,String>();
try {
tx1112Request.process();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
map.put("code","-1");
map.put("msg", "向中金髮送請求失敗!");
return map;
}
map.put("code", "1112");
map.put("plainText", tx1112Request.getRequestPlainText());
map.put("message", tx1112Request.getRequestMessage());
map.put("signature", tx1112Request.getRequestSignature());
map.put("action", PaymentEnvironment.paymentURL);
return map;
}
/**查詢中金機構賬戶餘額*/
public static HashMap<String,String> tx4510(){
HashMap<String, String> map = new HashMap<String,String>();
try {
Tx4510Request tx4510Request = new Tx4510Request();
tx4510Request.setInstitutionID(institutionID);
tx4510Request.setPaymentAccountName(paymentAccountName);
tx4510Request.setPaymentAccountNumber(paymentAccountNumber);
tx4510Request.process();
map.put("plainText", tx4510Request.getRequestPlainText());
map.put("message", tx4510Request.getRequestMessage());
map.put("signature", tx4510Request.getRequestSignature());
map.put("txCode", "4510");
map.put("txName", "機構支付賬戶餘額查詢");
return dealRequestResult(map);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.fatal("請求中金查詢機構餘額異常",e);
map.put("exception", e.toString());
return map;
}
}
static
{
//InputStream in = CPCNUtil . class .getResourceAsStream("/CPCNpay.properties");
InputStreamReader in = null;
try {
in = new InputStreamReader(CPCNUtil.class.getClassLoader().getResourceAsStream("CPCNpay.properties"), "UTF-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Properties prop = new Properties();
try {
prop.load(in);
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
URL url = CPCNUtil.class.getResource("/");
String path = url.getPath();
// String payment = path.substring(0,path.indexOf("WEB-INF")) + File.separator + "WEB-INF" + File.separator + "payment";
// String paymentConfigPath = payment;
String paymentConfigPath = "/D:/apache-tomcat-9.0.0.M17/webapps/yqs.pay/WEB-INF/payment"; //main方法測試用
paymentAccountName = prop.getProperty("paymentAccountName");
paymentAccountNumber = prop.getProperty("paymentAccountNumber");
//李總銀行卡信息
bankID = prop.getProperty("bankID");
accountName = prop.getProperty("accountName");
accountPhone = prop.getProperty("accountPhone");
accountNum = prop.getProperty("accountNum");
try {
PaymentEnvironment.initialize(paymentConfigPath);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}