一、导入中金支付的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和signatureString 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:paymentAccountif ("10".equals(flag)) {//HTTP默认连接超时时间是25s,读超时时间是25s//HTTPS默认连接超时时间是50s,读超时时间是50srespMsg = 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,读超时时间是50srespMsg = 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,读超时时间是50srespMsg = 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,读超时时间是50srespMsg = txMessenger.send(message, signature);// 0:message;//设置连接超时时间和读超时时间//int connectTimeoutLimit = 50000;  设置连接超时时间(单位ms)//int readTimeoutLimit = 50000;  设置读超时时间(单位ms)//respMsg = txMessenger.send(message, signature, connectTimeoutLimit, readTimeoutLimit);// 0:message;}// 1:signatureString 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 blocke.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 blocke.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 blocke.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 blocke.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 blocke1.printStackTrace();}Properties prop = new Properties();    try {prop.load(in);in.close();} catch (IOException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();}}
}

java对接中金支付接口相关推荐

  1. java支付接口开发原理_java对接微信支付接口开发的过程是什么?

    java对接微信支付接口开发的过程是什么?以下是小编整理的java对接微信支付接口实现的方法和过程,有需要的朋友可以学习以下的java对接微信支付接口内容. java对接微信支付接口开发的过程是什么? ...

  2. JAVA对接支付宝支付(超详细,一看就懂)

    Java对接支付宝支付 更多内容 冷文博客: 传送门 引入 为什么要发这篇帖子呢?原因很简单,就是因为在一个稍稍正规一点的应用上都会有支付这个环节,我们日常的在线支付如今包括支付宝,微信钱包,QQ钱包 ...

  3. java对接微信支付收不到支付通知问题(亲身实践)

    问题描述: 用java对接微信支付时,统一下单接口正常.但是用户扫码付款成功后,设置用于回调的notify_url对应的接口并没有收到请求(这个url测试过,是正常的且外网能访问的). 由于官方文档没 ...

  4. java对接支付宝支付

    java对接支付宝支付演示 现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付 废话不多说 上代码 引入支付宝官方的sdk <!-- https://mvnrepository ...

  5. Android java对接建行支付SDK

    Android java 对接建行支付 准备工作 创建常量类 编写支付工具类 遇到的坑 用到的工具类 准备工作 在对接建行支付之前,需要准备好这几个东西:商户代码.商户柜台代码.分行代码.公钥 创建常 ...

  6. java对接PayPal支付-自动续费功能

    一. java对接PayPal支付(v2). 讲了PayPal v2:checkout-sdk 的对接过程 二. java对接PayPal支付 (添加物流跟踪信息). 讲了PayPal添加物流信息 的 ...

  7. Java对接第三方支付渠道之支付宝支付

    提示:支付宝相对于微信支付更人性化,且细节做得更好. Java对接第三方支付渠道之支付宝支付 一.前期准备工作 二.导入依赖 三.书写配置类 四.书写配置文件 五.调用相关支付接口 1.流程图 2.创 ...

  8. Java对接微信支付(完整全流程)

    Java对接微信支付及支付回调通知的全流程 一.所用框架.对接微信支付我们技术组用的是payment框架,因为该框架已整合springboot因此很方便快捷 <dependency>< ...

  9. java对接PayPal支付(v2)

    java对接PayPal支付 我们公司最近开通了网上支付功能,国内选择对接支付宝和微信,国外选择对接paypal, 今天我先将paypal对接方式记录下来,后面会记录微信和支付宝(本人比较懒,微信和支 ...

最新文章

  1. Failed to resolve:com.android.support:appcompat-v7:报错处理
  2. 俄罗斯 Android 系统受限,或将转用 HarmonyOS!
  3. 学会使用svn:externals
  4. qperf测量网络带宽和延迟
  5. 北邮OJ 981. 16校赛-Saber's Number Game
  6. BZOJ3427 Poi2013 Bytecomputer
  7. 找不到腾讯云MFA动态码了,无法登录腾讯云的解决办法
  8. [ZJOI2009]取石子游戏
  9. 怎么样获取浏览器“该页无法显示”这类的异常 - -
  10. 21天Jmeter打卡day9HTTP不同方法post提交表单和json
  11. Android 基础知识 -- Linux环境搭建
  12. 如何优雅的调用第三方接口
  13. 序列化和反序列化(三)——父类的序列化
  14. Retrofit结合RxJava使用指南
  15. android A工程引用B工程
  16. openvino系列 16. OpenVINO 手写字体识别 OCR
  17. 大数据技术原理与应用-林子雨课后(部分习题答案)
  18. 【DIY小记】Win10编程字体主题设置全攻略
  19. java堆排序递归代码,无原理版,比较好理解
  20. 新侨快讯:官方公布加拿大时薪最高和最低的工作,你的行业上榜吗?

热门文章

  1. 燕十八 mysql_布尔教育燕十八mysql优化视频课件源码分享
  2. 根据拼音首字母筛选人名 1
  3. 微信小游戏-CocosCreator教学系列--Sprite教学
  4. 技术丨如何处理有依赖的消息
  5. [需求管理-4]:需求分析全过程:需求分析+资源评估+项目计划
  6. 【小程序源码合集】云开发前后端完整代码,大学生校园社团体管理活动预约微信小程序源码
  7. ADI中文手册获取方法
  8. CSS快速学习(2021.2.7-15)
  9. vue打包后dist目录直接打开index资源路径错误和css样式背景图路径问题
  10. 怀旧服美服哪个服务器人最多,魔兽怀旧服:最新美服人口普查,增长6万,总玩家数破22万...