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();
		}
	}
} 

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