java對接中金支付接口

一、導入中金支付的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();
		}
	}
} 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章