springboot 银联支付(企业网银支付)

应用:企业与企业之间的资金转账、支付等

官方文档:https://open.unionpay.com/tjweb/acproduct/list?apiSvcId=452

*************************

示例

**********************

配置文件

acp_sdk.properties

##############SDK配置文件(证书方式签名)################
# 说明:
# 1. 使用时请将此文件复制到src文件夹下替换原来的acp_sdk.properties。
# 2. 具体配置项请根据注释修改。
#
##########################################################################入网测试环境交易发送地址(线上测试需要使用生产环境交易请求地址)###############################交易请求地址
acpsdk.frontTransUrl=https://gateway.test.95516.com/gateway/api/frontTransReq.do
acpsdk.backTransUrl=https://gateway.test.95516.com/gateway/api/backTransReq.do
acpsdk.singleQueryUrl=https://gateway.test.95516.com/gateway/api/queryTrans.do
acpsdk.batchTransUrl=https://gateway.test.95516.com/gateway/api/batchTrans.do
acpsdk.fileTransUrl=https://filedownload.test.95516.com/
acpsdk.appTransUrl=https://gateway.test.95516.com/gateway/api/appTransReq.do
acpsdk.cardTransUrl=https://gateway.test.95516.com/gateway/api/cardTransReq.do#以下缴费产品使用,其余产品用不到
acpsdk.jfFrontTransUrl=https://gateway.test.95516.com/jiaofei/api/frontTransReq.do
acpsdk.jfBackTransUrl=https://gateway.test.95516.com/jiaofei/api/backTransReq.do
acpsdk.jfSingleQueryUrl=https://gateway.test.95516.com/jiaofei/api/queryTrans.do
acpsdk.jfCardTransUrl=https://gateway.test.95516.com/jiaofei/api/cardTransReq.do
acpsdk.jfAppTransUrl=https://gateway.test.95516.com/jiaofei/api/appTransReq.do######################################################################### 报文版本号,固定5.1.0,请勿改动
acpsdk.version=5.1.0# 签名方式,证书方式固定01,请勿改动
acpsdk.signMethod=01# 是否验证验签证书的CN,测试环境请设置false,生产环境请设置true。非false的值默认都当true处理。
acpsdk.ifValidateCNName=false# 是否验证https证书,测试环境请设置false,生产环境建议优先尝试true,不行再false。非true的值默认都当false处理。
acpsdk.ifValidateRemoteCert=false#后台通知地址,填写接收银联后台通知的地址,必须外网能访问
acpsdk.backUrl=http://gzx7g4.natappfree.cc/notify#前台通知地址,填写银联前台通知的地址,必须外网能访问
acpsdk.frontUrl=http://gzx7g4.natappfree.cc/return#########################入网测试环境签名证书配置 ################################
# 多证书的情况证书路径为代码指定,可不对此块做配置。
# 签名证书路径,必须使用绝对路径,如果不想使用绝对路径,可以自行实现相对路径获取证书的方法;测试证书所有商户共用开发包中的测试签名证书,生产环境请从cfca下载得到。
# windows样例:
acpsdk.signCert.path=D:/certs/acp_test_sign.pfx
# linux样例(注意:在linux下读取证书需要保证证书有被应用读的权限)(后续其他路径配置也同此条说明)
#acpsdk.signCert.path=/SERVICE01/usr/ac_frnas/conf/ACPtest/acp700000000000001.pfx# 签名证书密码,测试环境固定000000,生产环境请修改为从cfca下载的正式证书的密码,正式环境证书密码位数需小于等于6位,否则上传到商户服务网站会失败
acpsdk.signCert.pwd=000000
# 签名证书类型,固定不需要修改
acpsdk.signCert.type=PKCS12##########################加密证书配置################################
# 敏感信息加密证书路径(商户号开通了商户对敏感信息加密的权限,需要对 卡号accNo,pin和phoneNo,cvn2,expired加密(如果这些上送的话),对敏感信息加密使用)
acpsdk.encryptCert.path=D:/certs/acp_test_enc.cer##########################验签证书配置################################
# 验签中级证书路径(银联提供)
acpsdk.middleCert.path=D:/certs/acp_test_middle.cer
# 验签根证书路径(银联提供)
acpsdk.rootCert.path=D:/certs/acp_test_root.cer
acpsdk.validateCert.dir=D:/certs/

**********************

config 层

UnionpayConfig:读取配置文件,初始化SDKConfig

@Configuration
public class UnionpayConfig implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) {SDKConfig.getConfig().loadPropertiesFromSrc();}
}

**********************

service 层

UnionpayService

public interface UnionpayService {String pay(String orderId,String txnAmt);    //支付接口
}

**********************

serviceImpl 层

UnionpayServiceImpl

@Service
public class UnionpayServiceImpl implements UnionpayService {@Overridepublic String pay(String orderId, String txnAmt, String termId) {Map<String, String> requestData = new HashMap<>();/***银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改***/requestData.put("version", DemoBase.version);         //版本号,全渠道默认值requestData.put("encoding", DemoBase.encoding);       //字符集编码,可以使用UTF-8,GBK两种方式requestData.put("signMethod", SDKConfig.getConfig().getSignMethod()); //签名方法requestData.put("txnType", "01");                 //交易类型 ,01:消费requestData.put("txnSubType", "01");              //交易子类型, 01:自助消费requestData.put("bizType", "000202");             //业务类型 000202: B2BrequestData.put("channelType", "07");             //渠道类型 固定07/***商户接入参数***/requestData.put("merId", "777290058180063");      //商户号码,请改成自己申请的正式商户号或者open上注册得来的777测试商户号requestData.put("accessType", "0");               //接入类型,0:直连商户requestData.put("orderId",orderId);               //商户订单号,8-40位数字字母,不能含“-”或“_”,可以自行定制规则requestData.put("txnTime", DemoBase.getCurrentTime());   //订单发送时间,取系统时间,格式为YYYYMMDDhhmmss,必须取当前时间,否则会报txnTime无效requestData.put("currencyCode", "156");           //交易币种(境内商户一般是156 人民币)requestData.put("txnAmt", txnAmt);                //交易金额,单位分,不要带小数点//requestData.put("accNo","123456789001");//前台通知地址 (需设置为外网能访问 http https均可),支付成功后的页面 点击“返回商户”按钮的时候将异步通知报文post到该地址//如果想要实现过几秒中自动跳转回商户页面权限,需联系银联业务申请开通自动返回商户权限//异步通知参数详见open.unionpay.com帮助中心 下载  产品接口规范  网关支付产品接口规范 消费交易 商户通知requestData.put("frontUrl", DemoBase.frontUrl);//后台通知地址(需设置为【外网】能访问 http https均可),支付成功后银联会自动将异步通知报文post到商户上送的该地址,失败的交易银联不会发送后台通知//后台通知参数详见open.unionpay.com帮助中心 下载  产品接口规范  网关支付产品接口规范 消费交易 商户通知//注意:1.需设置为外网能访问,否则收不到通知    2.http https均可  3.收单后台通知后需要10秒内返回http200或302状态码//    4.如果银联通知服务器发送通知后10秒内未收到返回状态码或者应答码非http200,那么银联会间隔一段时间再次发送。总共发送5次,每次的间隔时间为0,1,2,4分钟。//    5.后台通知地址如果上送了带有?的参数,例如:http://abc/web?a=b&c=d 在后台通知处理程序验证签名之前需要编写逻辑将这些字段去掉再验签,否则将会验签失败requestData.put("backUrl", DemoBase.backUrl);//实现网银前置的方法://上送issInsCode字段,该字段的值参考《平台接入接口规范-第5部分-附录》(全渠道平台银行名称-简码对照表)2)联系银联业务运营部门开通商户号的网银前置权限//requestData.put("issInsCode", "ABC");                 //发卡机构代码// 订单超时时间,超过此时间后,除网银交易外,其他交易银联系统会拒绝受理,提示超时。 跳转银行网银交易如果超时后交易成功,会自动退款,大约5个工作日金额返还到持卡人账户。// 此时间建议取支付时的北京时间加15分钟,超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。requestData.put("payTimeout", new SimpleDateFormat("yyyyMMddHHmmss").format(new Date().getTime() + 15 * 60 * 1000));// 请求方保留域,透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。// 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:// 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。//requestData.put("reqReserved", "透传信息1|透传信息2|透传信息3");// 2. 内容可能出现&={}[]"'符号时:// 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);// 2) 如果对账文件没有显示要求,可做一下base64(如下)。//    注意控制数据长度,实际传输的数据长度不能超过1024位。//    查询、通知等接口解析时使用new String(Base64.decodeBase64(reqReserved), DemoBase.encoding);解base64后再对数据做后续解析。//requestData.put("reqReserved", Base64.encodeBase64String("任意格式的信息都可以".toString().getBytes(DemoBase.encoding)));/**请求参数设置完毕,以下对请求参数进行签名并生成html表单,将表单写入浏览器跳转打开银联页面**/Map<String, String> reqData = AcpService.sign(requestData,DemoBase.encoding);  //报文中certId,signature的值是在signData方法中获取并自动赋值的,只要证书配置正确即可。String requestFrontUrl = SDKConfig.getConfig().getFrontRequestUrl();  //获取请求银联的前台地址:对应属性文件acp_sdk.properties文件中的acpsdk.frontTransUrlreturn AcpService.createAutoFormHtml(requestFrontUrl,reqData,DemoBase.encoding);   //生成自动跳转的Html表单}}

**********************

controller 层

UnionpayController

@RestController
public class UnionpayController {@Resourceprivate UnionpayService unionpayService;@RequestMapping("/pay")public void pay(HttpServletResponse response) throws Exception{response.setHeader("content-type", "text/html;charset=UTF-8");response.getWriter().write(unionpayService.pay8(DemoBase.getOrderId(),"20000"));}@RequestMapping("/return")public String fun(HttpServletRequest request){Map<String,String> result=new HashMap<>();System.out.println("====== 前台通知 ======");Enumeration<String> names=request.getParameterNames();if (names!=null){while (names.hasMoreElements()){String name=names.nextElement();String value=request.getParameter(name);result.put(name,value);System.out.println(name+" ==> "+value);if (result.get(name)==null||"".equals(result.get(name))){result.remove(name);}}}}@RequestMapping("/notify")public void hello2(HttpServletRequest request,HttpServletResponse response) throws Exception{Map<String,String> result=new HashMap<>();System.out.println("======= 后台通知 ========");Enumeration<String> names=request.getParameterNames();if (names!=null){while (names.hasMoreElements()){String name=names.nextElement();String value=request.getParameter(name);result.put(name,value);System.out.println(name+" ==> "+value);if (result.get(name)==null||"".equals(result.get(name))){result.remove(name);}}}if (AcpService.validate(result, SDKConstants.UTF_8_ENCODING)){System.out.println("后台验签成功");}else {System.out.println("后台验签失败");}response.getWriter().print("ok");}
}

*************************

使用测试

localhost:8080/pay

springboot 银联支付(企业网银支付)相关推荐

  1. 网银支付_【成果巡礼】企业网银支付功能上线 上海全市法院再添便民新举措...

    智慧前言 近年来,上海全市法院积极推进智慧法院建设,以移动互联网.云计算.大数据等信息技术为依托不断探索智能化应用,并充分利运用12368.移动微法院等司法服务平台开展在线诉讼服务.通过不断" ...

  2. 网银支付回调 php,企业网银支付回调方法验签是怎么个逻辑?

    最近用php做银行的一个购买服务的功能,用的是银行自己的企业网银接口.现在遇到个问题, 支付成功后,银行那边 还要调我写的一个回调函数,但是我写的这个总是验签失败,谁能给个例子吗? //支付返回界面 ...

  3. 网银支付接口申请介绍

    建立在线商城网站,是为了让用户通过互联网进行商品的购买,除货到付款可以让物流公司代为收款外,另一种支付渠道就是通过用户的银行卡或各种第三方支付账户来进行商品费用的支付.  网站如果希望用户通过在线付款 ...

  4. 西米支付:游戏支付平台,游戏支付接口申请相关知识及流程,需要申请的坛友可参考

    游戏支付平台是专门为游戏玩家提供在线购买道具.皮肤.装备等虚拟物品的充值通道,游戏开发公司只有接入了支付接口,玩家才能通过这些支付通道,购买自己想要的道具物品,进而获得更加优质的游戏体验. 什么是游戏 ...

  5. 【支付系统学习笔记】-二支付系统设计(支付网关设计)

    前言: 本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/ 一 概述 在支付系统中,支付网关和支付渠道的对接是最核心的功能.其中支付网关是对外提供服务的接 ...

  6. 【支付系统学习笔记】-二支付系统设计(支付产品设计)

    本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/ 支付产品模块是按照支付场景来为业务方提供支付服务.这个模块一般位于支付网关之后,支付渠道之前. 它根据 ...

  7. springboot 银联支付(快捷支付)

    springboot 银联支付(快捷支付) 应用:持卡人预留银行卡号,使用手机验证码等方式完成支付 官方文档:https://open.unionpay.com/tjweb/api/dictionar ...

  8. 杂记--企业网银B2B支付

    1.要做企业网银的B2B支付. 银行的支付产品有:常见的产品分类上看可以分为直付,保付,预授权支付,协议支付等等. 本次先关注B2B直付. 2. 支付流程: 对于买方支付企业,服务渠道都是通过银行网银 ...

  9. springboot 银联支付(手机app支付)

    springboot 银联支付(手机app支付) 应用:在手机app中使用银联支付,支持安卓.ios 官方文档:https://open.unionpay.com/tjweb/acproduct/li ...

最新文章

  1. Android应用如何开机自启动、自启动失败原因
  2. Android TextView 属性设置
  3. 全开源纵横支付多平台多功能支付系统源码
  4. windows传文件到linux服务器--- secureCRT PK xftp
  5. BZOJ.3495.[PA2010]Riddle(2-SAT 前缀优化建图)
  6. python数据检索_python – Hachoir – 从组中检索数据
  7. java对象生成的时间_Java基础之一组有用的类——生成日期和时间(TryDateFormats)...
  8. 每个项目都不同:支持一个摄像头,到现在还没搞好
  9. ActivityGroup对子Activity的管理
  10. 用计算机弹出记事本,为何电脑开机会弹出desktop的记事本出来的
  11. 【字符串】13. 罗马数字转整数
  12. 网络工程师 运维工程师 面试题
  13. 最新的AOC有源光缆介绍,看这一篇就够了
  14. KVM多电脑切换器的KVM发展史
  15. 发现一个微博图床API和图片上传代码
  16. 失眠可以用什么东西改善一个失眠多年的朋友给我推荐
  17. 外接显示器屏幕亮度调到最低还是太亮
  18. 视频教程-区块链基础:共识算法-区块链
  19. 接口技术--输入输出技术
  20. 盒子模型(CSS)-微信小程序

热门文章

  1. 方法论分享之:刻意练习,微小改进
  2. pac4j探索(一)之buji-pac4j
  3. 上海大学计算机获奖上央视新闻,为青年打好中国底色 逐梦新时代——上海大学思政课为什么“红”...
  4. 国科大学习资料–模式识别--第五次作业
  5. 全栈开发学习路线总结(全网最详细的全栈开发资源汇总)
  6. SPI锡膏检查机的作用和检测原理
  7. 以抖音为例,解构数据分析三个核心原理
  8. adb Android禁用四大组件与如何冻结APP
  9. freeswitch配置SBC实例
  10. 解析HTML简历Java_教大家一个用html5写简历的方法