当前位置: 产品API > 运营 > 综合认证业务
产品介绍
  • 服务对象
    银行、收单机构和商户。
  • 产品详情

    银联综合认证业务,是指通过整合银联内部资源(全渠道、多渠道、大数据平台、财税库银系统等)和外部资源,向商户提供非面对面的综合认证服务,包括银行卡认证、银行卡属性和银行名称查询、公民身份信息认证、人脸识别、手机运营商实名认证及在网信息查询、个人风险评估(基于银联风险系统,对个人银行卡、身份证和手机号进行风险评  )、企业风险评估(基于银联风险系统,对商户收单风险进行评估)、工商企业信息验证等服务,形成银联综合认证服务。

  • 产品亮点

    最成熟的银行卡验证通道

    稳定、全面的银行卡验证通道,支持所有主流银行的信用卡及大多数银行借记卡验证。


    一点接入实现多个渠道的用户身份验证服务

    一点接入银联即可实现银行、公安、移动运营商、工商等多个渠道的用户身份验证,即实现银行卡验证、公安部公民身份认证、人脸识别、活体检测、手机运营商实名认证及在网信息查询、工商企业信息查询/验证等多种功能。


    灵活的接入模式

    可根据合作机构需求及具体场景支持API接口和H5页面两种模式,实时返回结果,满足查询时效性需求。

  • 应用场景

    综合认证业务可广泛应用于各行业,包括但不仅限于用户实名制,用户绑卡认证,用户信用信息查询,银行Ⅱ、Ⅲ类账户开户,海关申报等领域。


    PC端案例:

    img-1.jpg


    手机端案例:

    img-2.jpg

快速接入

本板块展示了如何从零开始,使用银联开放服务平台服务端SDK快速接入综合认证平台,完成与银联对接的部分。

注意:文档中的代码示例和Demo是用来阐述API基本使用方法的,针对大部分基本业务场景。供商户参考,特殊情况请按照进阶功能扩展,确保符合实际业务需求。


第一步:申请入网


您有2种方式可以选择:

        1.与属地分公司签约入网:

           银联有36个属地分公司,您可根据商户注册地等因素,与当地分公司进行业务签约。

        2.与金融民生事业部签约入网:

           联系人: 诸中林  金融与民生事业部  021-20631643


第二步:申请证书


开发者调用接口前需要先获取三个证书:签名证书、敏感信息加密证书、验签证书。


签名证书

证书用途

商户对报文中出现签名域(signature)之外的所有数据元采用key=value的形式按照名称排序,然后以&作为连接符拼接成待签名串。其次,对待签名串使用SHA-256算法做摘要,再使用银联颁发给商户的签名私钥证书中的私钥对摘要做签名操作(签名时算法选择 SHA-256)。最后,对签名做Base64编码,将编码后的   签名串放在签名(signature)表单域里和其他表单域一起通过HTTP Post的方式传输给银联全渠道支付平台。

 

如何获取

测试环境签名证书接从开发包中目录assets下获取。

生产环境签名证书获取方式:入网流程走完后,银联业务运营中心会发送入网通知邮件给申请表中的联系人邮箱,请参考邮件中《证书下载、导出及上传流程》文档进行下载,下载时需要的证书序列号、授权码会在邮件正文或者附件中给出。

 

验签证书

证书用途

商户对报文中出现签名域(signature)之外的所有数据元采用key=value的形式按照名称升序排序,然后以&作为连接符拼接成待签名串。其次,对待签名串使用 SHA-256算法做摘要,再使用商户入网时银联提供的验签公钥证书中的公钥对摘要和报文中的签名信息做签名验证操作。

 

如何获取

验签证书直接从开发包中目录assets下获取。


第三步:集成并配置SDK


为了帮助开发者调用开放接口,我们提供了开放平台服务端SDK,包含JAVA、PHP和.NET三语言版本,封装了签名&验签、HTTP接口请求等基础功能。请先下载对应语言版本的SDK并引入您的开发工程。


调用流程               

                              

使用SDK快速接入

公共类

交易状态查询详见:com.unionpay.acp.demo.Form09_6_5_Query

示例代码参考:左侧菜单AAPI接口—交易状态查询


银行卡认证类

银行卡认证详见:com.unionpay.acp.demo.Form_5_3_Card_Identification

示例代码参考:左侧菜单API接口—银行卡认证


银行卡归属地查询详见:com.unionpay.acp.demo.Form_5_5_Card_Regional_Query

示例代码参考:左侧菜单API接口—银行卡归属地查询


银行卡信息查询详见:com.unionpay.acp.demo.Form_5_4_Card_Info_Query

示例代码参考:左侧菜单API接口—银行卡信息查询


企业信息认证类

企业信息认证详见:com.unionpay.acp.demo.Form_5_6_EnterPrise_Info_Identification

示例代码参考:左侧菜单API接口—企业信息认证


企业信息查询详见:com.unionpay.acp.demo. Form_5_7_Enterprise_Info_Query

示例代码参考:左侧菜单API接口—企业信息查询


生物特征(人脸)认证类 

生物特征识别SDK接入:

下载生物特征识别SDK(android版、ios版本)


交易流程:


第1步:商户后台下单

活体检测下单详见:com.unionpay.acp.demo.Form_5_19_Bioassay_In_Order


第2步:用户通过商户app录入认证要素,商户app调起银联生物特征识别SDK:


第3步:银联生物特征识别SDK检测活体后返回pictureToken给商户app端,app再返给商户后台,商户后台调用人脸比对接口或身份证核查及证件照比对接口。

人脸比对接口详见:com.unionpay.acp.demo.Form_5_10_Face_Alignment

身份证核查及证件照比对接口详见:com.unionpay.acp.demo.Form_5_13_ID_Photo_Check

 

关键请求要素、应答要素详见综合认证平台接口文档。


SDK&Demo下载

开放平台服务端SDK

为了帮助开发者调用交易接口,我们提供了服务端SDK,包含JAVA、PHP和.NET三语言版本封装了签名&验签、HTTP接口请求等基础功能。

综合认证服务产品Demo

根据开发语言下载综合认证服务产品Demo

Demo版本

运行环境

下载链接

JAVA

Eclipse+ jdk1.6.12u5及以上+Tomcat6.0及以上

点击下载

.NET

visual   studio 2010及以上+.NET framework4.0 及以上

PHP

php5.3及以上

运行说明

开发包调用步骤可以参考视频:http://pan.baidu.com/s/1mitsjvq

SDK下载:TODO


常见问题

如何切换真实环境支付

FAQ

respCode返了失败

请看下respMsg里的信息,根据其中的7位数字,到应答码页面搜索。

查询接口什么时候调用

FAQ


异常处理

通知报文验签失败,该怎么办?

FAQ

如果调用数次查询接口后,一直得到处理中状态,该怎么办?

FAQ


应答码

应答码说明

全渠道平台应答码长度为2字节,应答码范围分布如下:

应答码范围

含  义

00

成功

01-09

因银联全渠道系统原因导致的错误

10-29

有关商户端上送报文格式检查导致的错误

30-59

有关商户/收单机构相关业务检查导致的错误

60-89

有关持卡人或者发卡行(渠道)相关的问题导致的错误

90-99

预留

 

应答码清单

银联全渠道平台应答码及含义如下:

应答码

描  述

00

成功

01

交易失败。详情请咨询95516

02

系统未开放或暂时关闭,请稍后再试

03

交易通讯超时,请发起查询交易

04

交易状态未明,请查询对账结果

05

交易已受理,请稍后查询交易结果

06

系统繁忙,请稍后再试

10

报文格式错误

11

验证签名失败

12

重复交易

13

报文交易要素缺失

30

交易未通过,请尝试使用其他银联卡支付或联系95516

31

商户状态不正确

32

无此交易权限

34

查无此交易

35

原交易不存在或状态不正确

37

已超过最大查询次数或操作过于频繁

39

交易不在受理时间范围内

61

输入的卡号无效,请确认后输入

68

您的银行卡暂不支持该业务,请向您的银行或95516咨询

90

账户余额不足

91

认证失败

92

营业执照过期

93

营业执照吊销

94

营业执照注销

95

营业执照迁出

96

营业执照撤销

99

通用错误

应答码说明:

1、  同步应答码及异步通知应答码

(1)同步应答00,仅表示银联受理成功,不表示订单成功。

(2)当同步应答码返回05时,需发起交易状态查询交易查询结果


接口总览

综合认证服务平台API列表


生产地址:https://upverify.95516.com/gateway/api/queryTransReq.do

测试地址:https://upverify.test.95516.com/gateway/api/queryTransReq.do

接口名称

功能说明

交易模式

交易状态查询

对未收到应答的或交易状态未知的交易,应通过该交易进行查询。

后台交易

 

 

生产地址:https://upverify.95516.com/gateway/api/frontTransReq.do

测试地址:https://upverify.test.95516.com/gateway/api/frontTransReq.do

接口名称

功能说明

交易模式

银行卡认证(前台)

用于商户发起对持卡人卡片和身份信息的校验

前台交易

企业信息认证(前台)

用于商户发起对企业营业执照存续状态的查询及企业信息的校验

前台交易

企业信息查询(前台)

查询企业工商注册信息

前台交易

 

 

生产地址:https://upverify.95516.com/gateway/api/backTransReq.do

测试地址:https://upverify.test.95516.com/gateway/api/backTransReq.do

接口名称

功能说明

交易模式

银行卡认证

用于商户发起对持卡人卡片和身份信息的校验

后台交易

银行卡信息查询

用于商户发起对银行卡发卡银行和卡属性的查询

后台交易

银行卡属地查询

用于商户发起对银行卡归属地的查询

后台交易

企业信息认证

用于商户发起对企业营业执照存续状态的查询及企业信息的校验

后台交易

企业信息查询

查询企业工商注册信息

后台交易

公民身份证简项认证并返回照片

核对姓名和身份证的一致性,并返回照片

后台交易

移动运营商手机实名认证

通过运营商核对用户手机和证件一致性

后台交易

移动运营商手机状态和在网时长查询

查询手机在运营商状态及时长

后台交易

短信验证码下发

使用银联短信下发验证码服务

后台交易

短信验证码验证

使用银联短信验证验证码服务

后台交易

银联加密公钥更新查询交易

用于在加密证书到期前,获取加密公钥证书

后台交易

 

 

生产地址:https://faceverify.95516.com/gateway/api/backTransReq.do

测试地址:https://faceverify.test.95516.com/gateway/api/backTransReq.do

接口名称

功能说明

交易模式

人脸比对

对两张人脸照片进行比对

后台交易

防HACK

对图片进行HACK度评分

后台交易

活体检测

检测视频文件是否为活体拍摄,并同时进行防HACK校验

后台交易

身份证核查及证件照比对

对用户身份信息及人脸图片进行核查比对

后台交易

身份证照片OCR

识别身份证正反面信息

后台交易

银行卡照片OCR

识别银行卡卡号

后台交易

 

 

生产地址:https://upverify.95516.com/gateway/api/appTransReq.do

测试地址:https://upverify.test.95516.com/gateway/api/appTransReq.do

接口名称

功能说明

交易模式

活体检测下单

APP客户端调用SDK前,商户后台系统通过该接口进行下单

后台交易


API接口
交易状态查询
接口描述
对未收到应答的或交易状态未知的交易,应通过该交易进行查询。
请求方式
POST
生产地址
https://upverify.95516.com/gateway/api/queryTransReq.do
测试地址
https://upverify.test.95516.com/gateway/api/queryTransReq.do
示例代码
请求代码
protected   void doPost(HttpServletRequest req, HttpServletResponse resp)
                            throws   ServletException, IOException {
                   
   String merId =   req.getParameter("merId");
   String orderId =   req.getParameter("orderId");
   String txnTime =   req.getParameter("txnTime");
   
   Map<String, String>   data = new HashMap<String, String>();
   
   /***银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改***/
   data.put("version",   DemoBase.version);                 //版本号
   data.put("encoding",   DemoBase.encoding);               //字符集编码 可以使用UTF-8,GBK两种方式
   data.put("signMethod",   SDKConfig.getConfig().getSignMethod()); //签名方法
   data.put("txnType",   "00");                             //交易类型 00-默认
   data.put("txnSubType",   "03");                            //交易子类型    认证结果查询
   data.put("bizType",   "000803");                           //业务类型
   
   /***商户接入参数***/
   data.put("merId",   merId);                                          //商户号码,请改成自己申请的商户号或者open上注册得来的777商户号测试
   data.put("accessType",   "0");                             //接入类型,商户接入固定填0,不需修改
   
   /***要调通交易以下字段必须修改***/
   data.put("orderId",   orderId);                 //****商户订单号,每次发交易测试需修改为被查询的交易的订单号
   data.put("txnTime",   txnTime);                 //****订单发送时间,每次发交易测试需修改为被查询的交易的订单发送时间

   /**请求参数设置完毕,以下对请求参数进行签名并发送http post请求,接收同步应答报文------------->**/
   
   Map<String, String>   reqData = AcpService.sign(data,DemoBase.encoding);                           //报文中certId,signature的值是在signData方法中获取并自动赋值的,只要证书配置正确即可。
   String url =   SDKConfig.getConfig().getSingleQueryUrl();                                                                 //交易请求url从配置文件读取对应属性文件acp_sdk.properties中的 acpsdk.singleQueryUrl
   Map<String, String>   rspData = AcpService.post(reqData,url,DemoBase.encoding);  //发送请求报文并接受同步应答(默认连接超时时间30秒,读取返回结果超时时间30秒);这里调用signData之后,调用submitUrl之前不能对submitFromData中的键值对做任何修改,如果修改会导致验签不通过
   
   /**对应答码的处理,请根据您的业务逻辑来编写程序,以下应答码处理逻辑仅供参考------------->**/
   //应答码规范参考open.unionpay.com帮助中心 下载    产品接口规范    《平台接入接口规范-第5部分-附录》
   if(!rspData.isEmpty()){
			if(AcpService.validate(rspData,   DemoBase.encoding)){
					 LogUtil.writeLog("验证签名成功");
					 if(("00").equals(rspData.get("respCode"))){//如果查询交易成功
							   String   origRespCode = rspData.get("origRespCode");
							   if(("00").equals(origRespCode)){
										//交易成功,更新商户订单状态
										//TODO
							   }else   if(("03").equals(origRespCode)||
												  ("04").equals(origRespCode)||
												  ("05").equals(origRespCode)){
										//订单处理中或交易状态未明,需稍后发起交易状态查询交易 【如果最终尚未确定交易是否成功请以对账文件为准】
										//TODO
							   }else{
										//其他应答码为交易失败
										//TODO
							   }
					 }else   if(("34").equals(rspData.get("respCode"))){
							   //订单不存在,可认为交易状态未明,需要稍后发起交易状态查询,或依据对账结果为准
							   
					 }else{//查询交易本身失败,如应答码10/11检查查询报文是否正确
							   //TODO
					 }
			}else{
					 LogUtil.writeErrorLog("验证签名失败");
					 //TODO 检查验证签名失败的原因
			}
   }else{
			//未返回正确的http状态
			LogUtil.writeErrorLog("未获取到返回报文或返回http状态码非200");
   }
			
   String reqMessage =   DemoBase.genHtmlResult(reqData);
   String rspMessage =   DemoBase.genHtmlResult(rspData);
   resp.getWriter().write("交易状态查询交易</br>请求报文:<br/>"+reqMessage+"<br/>"   + "应答报文:</br>"+rspMessage+"");
                                     
}


银行卡认证
接口描述
用于商户发起对持卡人卡片和身份信息的校验
请求方式
POST
生产地址
https://upverify.95516.com/gateway/api/backTransReq.do
测试地址
https://upverify.test.95516.com/gateway/api/backTransReq.do
示例代码
请求代码
protected   void doPost(HttpServletRequest req, HttpServletResponse resp)
                            throws   ServletException, IOException {
                    
                   String merId =   req.getParameter("merId");
                   String orderId =   req.getParameter("orderId");
                   String txnTime =   req.getParameter("txnTime");
                    
                   Map<String, String>   data = new HashMap<String, String>();
                    
                   /***银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改***/
                   data.put("version",   DemoBase.version);                 //版本号
                   data.put("encoding",   DemoBase.encoding);               //字符集编码 可以使用UTF-8,GBK两种方式
                   data.put("signMethod",   SDKConfig.getConfig().getSignMethod()); //签名方法
                   data.put("txnType",   "72");                               //交易类型 00-默认
                   data.put("txnSubType",   "12");                            //交易子类型 银行卡认证
                   data.put("bizType",   "000803");                           //业务类型 代收
                    
                   //B152:银行卡三要素(卡号、身份证号、姓名)
                   //B156:银行卡四要素(卡号、手机号、身份证号、姓名)
                   data.put("productId",   "B152"); 
                    
                    
                   /***商户接入参数***/
                   data.put("merId",   merId);                                          //商户号码,请改成自己申请的商户号或者open上注册得来的777商户号测试
                   data.put("accessType",   "0");                             //接入类型,商户接入固定填0,不需修改
                    
                   /***要调通交易以下字段必须修改***/
                   data.put("orderId",   orderId);                 //****商户订单号,每次发交易测试需修改为被查询的交易的订单号
                   data.put("txnTime",   txnTime);                 //****订单发送时间,每次发交易测试需修改为被查询的交易的订单发送时间
                    
                    
                   //B152:银行卡三要素(卡号、身份证号、姓名)
                   //B156:银行卡四要素(卡号、手机号、身份证号、姓名)
                   //根据 productId 的值选择选送类型
                   Map<String,String>   customerInfoMap = new HashMap<String,String>();
                   //customerInfoMap.put("certifTp",   "01");                                                    //证件类型
                   customerInfoMap.put("certifId",   "341126197709218366");          //证件号码
                   customerInfoMap.put("customerNm",   "认证平台");                                         //姓名
                   customerInfoMap.put("phoneNo",   "13552535506");                           //手机号
   
                   ////////////如果商户号开通了【商户对敏感信息加密】的权限那么需要对 accNo,pin和phoneNo,cvn2,expired加密(如果这些上送的话),对敏感信息加密使用:
                   String accNo =   AcpService.encryptData("6216261000000000018",   "UTF-8");  //这里测试的时候使用的是测试卡号,正式环境请使用真实卡号
                   data.put("accNo",   accNo);
                   String customerInfoStr =   AcpService.getCustomerInfoWithEncrypt(customerInfoMap,null,DemoBase.encoding);
                   //////////
                   data.put("customerInfo",   customerInfoStr);
                    
   
                   /**请求参数设置完毕,以下对请求参数进行签名并发送http post请求,接收同步应答报文------------->**/
                    
                   Map<String, String>   reqData = AcpService.sign(data,DemoBase.encoding);                           //报文中certId,signature的值是在signData方法中获取并自动赋值的,只要证书配置正确即可。
                   String url =   SDKConfig.getConfig().getSingleQueryUrl();                                                                 //交易请求url从配置文件读取对应属性文件acp_sdk.properties中的 acpsdk.singleQueryUrl
                   Map<String, String>   rspData = AcpService.post(reqData,url,DemoBase.encoding);  //发送请求报文并接受同步应答(默认连接超时时间30秒,读取返回结果超时时间30秒);这里调用signData之后,调用submitUrl之前不能对submitFromData中的键值对做任何修改,如果修改会导致验签不通过
                    
                   /**对应答码的处理,请根据您的业务逻辑来编写程序,以下应答码处理逻辑仅供参考------------->**/
                   //应答码规范参考open.unionpay.com帮助中心 下载    产品接口规范    《平台接入接口规范-第5部分-附录》
                   if(!rspData.isEmpty()){
                            if(AcpService.validate(rspData,   DemoBase.encoding)){
                                     LogUtil.writeLog("验证签名成功");
                                     if(("00").equals(rspData.get("respCode"))){//如果查询交易成功
                                               String   origRespCode = rspData.get("origRespCode");
                                               if(("00").equals(origRespCode)){
                                                        //交易成功,更新商户订单状态
                                                        //TODO
                                               }else   if(("03").equals(origRespCode)||
                                                                  ("04").equals(origRespCode)||
                                                                  ("05").equals(origRespCode)){
                                                        //订单处理中或交易状态未明,需稍后发起交易状态查询交易 【如果最终尚未确定交易是否成功请以对账文件为准】
                                                        //TODO
                                               }else{
                                                        //其他应答码为交易失败
                                                        //TODO
                                               }
                                     }else   if(("34").equals(rspData.get("respCode"))){
                                               //订单不存在,可认为交易状态未明,需要稍后发起交易状态查询,或依据对账结果为准
                                                
                                     }else{//查询交易本身失败,如应答码10/11检查查询报文是否正确
                                               //TODO
                                     }
                            }else{
                                     LogUtil.writeErrorLog("验证签名失败");
                                     //TODO 检查验证签名失败的原因
                            }
                   }else{
                            //未返回正确的http状态
                            LogUtil.writeErrorLog("未获取到返回报文或返回http状态码非200");
                   }
                             
                   String reqMessage =   DemoBase.genHtmlResult(reqData);
                   String rspMessage =   DemoBase.genHtmlResult(rspData);
                   resp.getWriter().write("交易状态查询交易</br>请求报文:<br/>"+reqMessage+"<br/>"   + "应答报文:</br>"+rspMessage+"");
                                      
}
银行卡信息查询
接口描述
用于商户发起对银行卡发卡银行和卡属性的查询
请求方式
POST
生产地址
https://upverify.95516.com/gateway/api/backTransReq.do
测试地址
https://upverify.test.95516.com/gateway/api/backTransReq.do
示例代码
请求代码
protected   void doPost(HttpServletRequest req, HttpServletResponse resp)
                            throws   ServletException, IOException {
                   
                   String merId =   req.getParameter("merId");
                   String orderId =   req.getParameter("orderId");
                   String txnTime =   req.getParameter("txnTime");
                   
                   Map<String, String>   data = new HashMap<String, String>();
                   
                   /***银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改***/
                   data.put("version",   DemoBase.version);                 //版本号
                   data.put("encoding",   DemoBase.encoding);               //字符集编码 可以使用UTF-8,GBK两种方式
                   data.put("signMethod",   SDKConfig.getConfig().getSignMethod()); //签名方法
                   data.put("txnType",   "70");                               //交易类型 00-默认
                   data.put("txnSubType",   "03");                            //交易子类型    银行卡信息查询
                   data.put("bizType",   "000803");                           //业务类型 代收
                   
                   data.put("productId",   "Q001");                           //产品ID 银行卡属性和发卡行查询
                   
                   /***商户接入参数***/
                   data.put("merId",   merId);                                          //商户号码,请改成自己申请的商户号或者open上注册得来的777商户号测试
                   data.put("accessType",   "0");                             //接入类型,商户接入固定填0,不需修改
                   
                   /***要调通交易以下字段必须修改***/
                   data.put("orderId",   orderId);                 //****商户订单号,每次发交易测试需修改为被查询的交易的订单号
                   data.put("txnTime",   txnTime);                 //****订单发送时间,每次发交易测试需修改为被查询的交易的订单发送时间
  
                   String accNo =   AcpService.encryptData("6216261000000000018",   "UTF-8");  //这里测试的时候使用的是测试卡号,正式环境请使用真实卡号
                   data.put("accNo",   accNo);
                   
                   /**请求参数设置完毕,以下对请求参数进行签名并发送http post请求,接收同步应答报文------------->**/
                   
                   Map<String, String>   reqData = AcpService.sign(data,DemoBase.encoding);                           //报文中certId,signature的值是在signData方法中获取并自动赋值的,只要证书配置正确即可。
                   String url =   SDKConfig.getConfig().getSingleQueryUrl();                                                                 //交易请求url从配置文件读取对应属性文件acp_sdk.properties中的 acpsdk.singleQueryUrl
                   Map<String, String>   rspData = AcpService.post(reqData,url,DemoBase.encoding);  //发送请求报文并接受同步应答(默认连接超时时间30秒,读取返回结果超时时间30秒);这里调用signData之后,调用submitUrl之前不能对submitFromData中的键值对做任何修改,如果修改会导致验签不通过
                   
                   /**对应答码的处理,请根据您的业务逻辑来编写程序,以下应答码处理逻辑仅供参考------------->**/
                   //应答码规范参考open.unionpay.com帮助中心 下载    产品接口规范    《平台接入接口规范-第5部分-附录》
                   if(!rspData.isEmpty()){
                            if(AcpService.validate(rspData,   DemoBase.encoding)){
                                     LogUtil.writeLog("验证签名成功");
                                     if(("00").equals(rspData.get("respCode"))){//如果查询交易成功
                                              String   origRespCode = rspData.get("origRespCode");
                                               if(("00").equals(origRespCode)){
                                                        //交易成功,更新商户订单状态
                                                        //TODO
                                               }else   if(("03").equals(origRespCode)||
                                                                  ("04").equals(origRespCode)||
                                                                  ("05").equals(origRespCode)){
                                                        //订单处理中或交易状态未明,需稍后发起交易状态查询交易 【如果最终尚未确定交易是否成功请以对账文件为准】
                                                        //TODO
                                               }else{
                                                        //其他应答码为交易失败
                                                        //TODO
                                               }
                                     }else   if(("34").equals(rspData.get("respCode"))){
                                               //订单不存在,可认为交易状态未明,需要稍后发起交易状态查询,或依据对账结果为准
                                               
                                     }else{//查询交易本身失败,如应答码10/11检查查询报文是否正确
                                               //TODO
                                     }
                            }else{
                                     LogUtil.writeErrorLog("验证签名失败");
                                     //TODO 检查验证签名失败的原因
                            }
                   }else{
                            //未返回正确的http状态
                            LogUtil.writeErrorLog("未获取到返回报文或返回http状态码非200");
                   }
                            
                   String reqMessage =   DemoBase.genHtmlResult(reqData);
                   String rspMessage =   DemoBase.genHtmlResult(rspData);
                   resp.getWriter().write("交易状态查询交易</br>请求报文:<br/>"+reqMessage+"<br/>"   + "应答报文:</br>"+rspMessage+"");
                                     
}
银行卡归属地查询
接口描述
用于商户发起对银行卡归属地的查询
请求方式
POST
生产地址
https://upverify.95516.com/gateway/api/backTransReq.do
测试地址
https://upverify.test.95516.com/gateway/api/backTransReq.do
示例代码
请求代码
protected   void doPost(HttpServletRequest req, HttpServletResponse resp)
                            throws   ServletException, IOException {
                   
                   String merId =   req.getParameter("merId");
                   String orderId =   req.getParameter("orderId");
                   String txnTime =   req.getParameter("txnTime");
                   
                   Map<String, String>   data = new HashMap<String, String>();
                   
                   /***银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改***/
                   data.put("version",   DemoBase.version);                 //版本号
                   data.put("encoding",   DemoBase.encoding);               //字符集编码 可以使用UTF-8,GBK两种方式
                   data.put("signMethod",   SDKConfig.getConfig().getSignMethod()); //签名方法
                   data.put("txnType",   "70");                               //交易类型 00-默认
                   data.put("txnSubType",   "04");                            //交易子类型    默认00
                   data.put("bizType",   "000803");                           //业务类型 代收
                   
                   data.put("productId",   "Q002");                         //产品ID银行卡属地查询
                   
                   String accNo =   AcpService.encryptData("6216261000000000018",   "UTF-8");  //这里测试的时候使用的是测试卡号,正式环境请使用真实卡号
                   data.put("accNo",   accNo);
                   
                   /***商户接入参数***/
                   data.put("merId",   merId);                                          //商户号码,请改成自己申请的商户号或者open上注册得来的777商户号测试
                   data.put("accessType",   "0");                             //接入类型,商户接入固定填0,不需修改
                   
                   /***要调通交易以下字段必须修改***/
                   data.put("orderId",   orderId);                 //****商户订单号,每次发交易测试需修改为被查询的交易的订单号
                   data.put("txnTime",   txnTime);                 //****订单发送时间,每次发交易测试需修改为被查询的交易的订单发送时间
  
                   /**请求参数设置完毕,以下对请求参数进行签名并发送http post请求,接收同步应答报文------------->**/
                   
                   Map<String, String>   reqData = AcpService.sign(data,DemoBase.encoding);                           //报文中certId,signature的值是在signData方法中获取并自动赋值的,只要证书配置正确即可。
                   String url = SDKConfig.getConfig().getSingleQueryUrl();                                                                 //交易请求url从配置文件读取对应属性文件acp_sdk.properties中的 acpsdk.singleQueryUrl
                   Map<String, String>   rspData = AcpService.post(reqData,url,DemoBase.encoding);  //发送请求报文并接受同步应答(默认连接超时时间30秒,读取返回结果超时时间30秒);这里调用signData之后,调用submitUrl之前不能对submitFromData中的键值对做任何修改,如果修改会导致验签不通过
                   
                   /**对应答码的处理,请根据您的业务逻辑来编写程序,以下应答码处理逻辑仅供参考------------->**/
                   //应答码规范参考open.unionpay.com帮助中心 下载    产品接口规范    《平台接入接口规范-第5部分-附录》
                   if(!rspData.isEmpty()){
                            if(AcpService.validate(rspData,   DemoBase.encoding)){
                                     LogUtil.writeLog("验证签名成功");
                                     if(("00").equals(rspData.get("respCode"))){//如果查询交易成功
                                               String   origRespCode = rspData.get("origRespCode");
                                               if(("00").equals(origRespCode)){
                                                        //交易成功,更新商户订单状态
                                                        //TODO
                                               }else   if(("03").equals(origRespCode)||
                                                                  ("04").equals(origRespCode)||
                                                                  ("05").equals(origRespCode)){
                                                        //订单处理中或交易状态未明,需稍后发起交易状态查询交易 【如果最终尚未确定交易是否成功请以对账文件为准】
                                                        //TODO
                                               }else{
                                                        //其他应答码为交易失败
                                                        //TODO
                                               }
                                     }else   if(("34").equals(rspData.get("respCode"))){
                                               //订单不存在,可认为交易状态未明,需要稍后发起交易状态查询,或依据对账结果为准
                                               
                                     }else{//查询交易本身失败,如应答码10/11检查查询报文是否正确
                                               //TODO
                                     }
                            }else{
                                     LogUtil.writeErrorLog("验证签名失败");
                                     //TODO 检查验证签名失败的原因
                            }
                   }else{
                            //未返回正确的http状态
                            LogUtil.writeErrorLog("未获取到返回报文或返回http状态码非200");
                   }
                            
                   String reqMessage =   DemoBase.genHtmlResult(reqData);
                   String rspMessage =   DemoBase.genHtmlResult(rspData);
                   resp.getWriter().write("交易状态查询交易</br>请求报文:<br/>"+reqMessage+"<br/>"   + "应答报文:</br>"+rspMessage+"");
                                     
}
企业信息认证
接口描述
用于商户发起对企业营业执照存续状态的查询及企业信息的校验
请求方式
POST
生产地址
https://upverify.95516.com/gateway/api/backTransReq.do
测试地址
https://upverify.test.95516.com/gateway/api/backTransReq.do
示例代码
请求代码
protected   void doPost(HttpServletRequest req, HttpServletResponse resp)
                            throws   ServletException, IOException {
                   
                   String merId =   req.getParameter("merId");
                   String orderId = req.getParameter("orderId");
                   String txnTime =   req.getParameter("txnTime");
                   
                   Map<String, String>   data = new HashMap<String, String>();
                   
                   /***银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改***/
                   data.put("version",   DemoBase.version);                 //版本号
                   data.put("encoding",   DemoBase.encoding);               //字符集编码 可以使用UTF-8,GBK两种方式
                   data.put("signMethod",   SDKConfig.getConfig().getSignMethod()); //签名方法
                   data.put("txnType",   "83");                               //交易类型 00-默认
                   data.put("txnSubType",   "00");                          //交易子类型  默认00
                   data.put("bizType",   "000803");                           //业务类型 代收
                   
                   //G008:工商-企业存续状态验证(营业执照号)
                   //G009:工商-注册地址验证(营业执照号、注册地址)
                   //G010:工商-企业名称验证(营业执照号、企业名称)
                   //G011:工商-名称+注册地验证(营业执照号、企业名称、注册地址)
                   //G012:工商-法人代表验证(营业执照号、法人代表姓名)
                   //G013:工商-法人+注册地验证(营业执照号、法人代表姓名、注册地址)
                   //G014:工商-名称+法人验证(营业执照号、法人代表姓名、企业名称)
                   //G015:工商-四要素验证(营业执照号、法人代表姓名、企业名称、注册地址)
                   data.put("productId",   "000803");                           //业务类型 代收
                   
                   /***商户接入参数***/
                   data.put("merId",   merId);                                          //商户号码,请改成自己申请的商户号或者open上注册得来的777商户号测试
                   data.put("accessType",   "0");                             //接入类型,商户接入固定填0,不需修改
                   
                   /***要调通交易以下字段必须修改***/
                   data.put("orderId",   orderId);                 //****商户订单号,每次发交易测试需修改为被查询的交易的订单号
                   data.put("txnTime",   txnTime);                 //****订单发送时间,每次发交易测试需修改为被查询的交易的订单发送时间
                   
                   data.put("businessLicenseRegNo",   "");  //M  营业执照号码
                   
                   data.put("legalRepreNm",   "");  //法定代表人姓名  根据productId 值选择上送
                   data.put("registeredAddr   ", "");  //注册地址  根据productId 值选择上送
                   data.put("comNm",   "");  //企业名称  根据productId 值选择上送
                     
                   
                   /**请求参数设置完毕,以下对请求参数进行签名并发送http post请求,接收同步应答报文------------->**/
                   
                   Map<String, String>   reqData = AcpService.sign(data,DemoBase.encoding);                           //报文中certId,signature的值是在signData方法中获取并自动赋值的,只要证书配置正确即可。
                   String url =   SDKConfig.getConfig().getSingleQueryUrl();                                                                 //交易请求url从配置文件读取对应属性文件acp_sdk.properties中的 acpsdk.singleQueryUrl
                   Map<String, String>   rspData = AcpService.post(reqData,url,DemoBase.encoding);  //发送请求报文并接受同步应答(默认连接超时时间30秒,读取返回结果超时时间30秒);这里调用signData之后,调用submitUrl之前不能对submitFromData中的键值对做任何修改,如果修改会导致验签不通过
                   
                   /**对应答码的处理,请根据您的业务逻辑来编写程序,以下应答码处理逻辑仅供参考------------->**/
                   //应答码规范参考open.unionpay.com帮助中心 下载    产品接口规范    《平台接入接口规范-第5部分-附录》
                   if(!rspData.isEmpty()){
                            if(AcpService.validate(rspData,   DemoBase.encoding)){
                                     LogUtil.writeLog("验证签名成功");
                                     if(("00").equals(rspData.get("respCode"))){//如果查询交易成功
                                               String   origRespCode = rspData.get("origRespCode");
                                               if(("00").equals(origRespCode)){
                                                        //交易成功,更新商户订单状态
                                                        //TODO
                                               }else   if(("03").equals(origRespCode)||
                                                                  ("04").equals(origRespCode)||
                                                                  ("05").equals(origRespCode)){
                                                        //订单处理中或交易状态未明,需稍后发起交易状态查询交易 【如果最终尚未确定交易是否成功请以对账文件为准】
                                                        //TODO
                                               }else{
                                                        //其他应答码为交易失败
                                                        //TODO
                                               }
                                     }else   if(("34").equals(rspData.get("respCode"))){
                                               //订单不存在,可认为交易状态未明,需要稍后发起交易状态查询,或依据对账结果为准
                                               
                                     }else{//查询交易本身失败,如应答码10/11检查查询报文是否正确
                                               //TODO
                                     }
                            }else{
                                     LogUtil.writeErrorLog("验证签名失败");
                                     //TODO 检查验证签名失败的原因
                            }
                   }else{
                            //未返回正确的http状态
                            LogUtil.writeErrorLog("未获取到返回报文或返回http状态码非200");
                   }
                            
                   String reqMessage =   DemoBase.genHtmlResult(reqData);
                   String rspMessage =   DemoBase.genHtmlResult(rspData);
                   resp.getWriter().write("交易状态查询交易</br>请求报文:<br/>"+reqMessage+"<br/>"   + "应答报文:</br>"+rspMessage+"");
                                     
}
企业信息查询
接口描述
查询企业工商注册信息
请求方式
POST
生产地址
https://upverify.95516.com/gateway/api/backTransReq.do
测试地址
https://upverify.test.95516.com/gateway/api/backTransReq.do
示例代码
请求代码
protected void   doPost(HttpServletRequest req, HttpServletResponse resp)
                            throws   ServletException, IOException {
                   
                   String merId =   req.getParameter("merId");
                   String orderId =   req.getParameter("orderId");
                   String txnTime =   req.getParameter("txnTime");
                   String businessLicenseRegNo   = req.getParameter("businessLicenseRegNo");
                   
                   Map<String, String>   data = new HashMap<String, String>();
                   
                   /***银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改***/
                   data.put("version",   DemoBase.version);                 //版本号
                   data.put("encoding",   DemoBase.encoding);               //字符集编码 可以使用UTF-8,GBK两种方式
                   data.put("signMethod",   SDKConfig.getConfig().getSignMethod()); //签名方法
                   data.put("txnType",   "83");                             //交易类型 00-默认
                   data.put("txnSubType",   "01");                            //交易子类型    企业信息查询
                   data.put("bizType",   "000803");                           //业务类型 代收
                   
                   data.put("productId",   "G016");                           //产品编码    工商-企业注册信息查询
                   
                   /***商户接入参数***/
                   data.put("merId",   merId);                                          //商户号码,请改成自己申请的商户号或者open上注册得来的777商户号测试
                   data.put("orderId",   orderId);                 //****商户订单号,每次发交易测试需修改为被查询的交易的订单号
                   data.put("txnTime",   txnTime);                 //****订单发送时间,每次发交易测试需修改为被查询的交易的订单发送时间    
                   
                   data.put("businessLicenseRegNo",   businessLicenseRegNo);  //M  营业执照号码
  
  
                   /**请求参数设置完毕,以下对请求参数进行签名并发送http post请求,接收同步应答报文------------->**/
                   
                   Map<String, String>   reqData = AcpService.sign(data,DemoBase.encoding);                           //报文中certId,signature的值是在signData方法中获取并自动赋值的,只要证书配置正确即可。
                   String url =   SDKConfig.getConfig().getBackRequestUrl();                                                                         //交易请求url从配置文件读取对应属性文件acp_sdk.properties中的 acpsdk.singleQueryUrl
                   Map<String, String>   rspData = AcpService.post(reqData,url,DemoBase.encoding);  //发送请求报文并接受同步应答(默认连接超时时间30秒,读取返回结果超时时间30秒);这里调用signData之后,调用submitUrl之前不能对submitFromData中的键值对做任何修改,如果修改会导致验签不通过
                   
                   /**对应答码的处理,请根据您的业务逻辑来编写程序,以下应答码处理逻辑仅供参考------------->**/
                   //应答码规范参考open.unionpay.com帮助中心 下载    产品接口规范    《平台接入接口规范-第5部分-附录》
                   if(!rspData.isEmpty()){
                            if(AcpService.validate(rspData,   DemoBase.encoding)){
                                     LogUtil.writeLog("验证签名成功");
                                     if(("00").equals(rspData.get("respCode"))){//如果查询交易成功
                                               String   origRespCode = rspData.get("origRespCode");
                                               if(("00").equals(origRespCode)){
                                                        //交易成功,更新商户订单状态
                                                        //TODO
                                               }else   if(("03").equals(origRespCode)||
                                                                  ("04").equals(origRespCode)||
                                                                  ("05").equals(origRespCode)){
                                                        //订单处理中或交易状态未明,需稍后发起企业信息查询交易 【如果最终尚未确定交易是否成功请以对账文件为准】
                                                        //TODO
                                               }else{
                                                        //其他应答码为交易失败
                                                        //TODO
                                               }
                                     }else   if(("34").equals(rspData.get("respCode"))){
                                               //订单不存在,可认为交易状态未明,需要稍后发起企业信息查询,或依据对账结果为准
                                               
                                     }else{//查询交易本身失败,如应答码10/11检查查询报文是否正确
                                               //TODO
                                     }
                            }else{
                                     LogUtil.writeErrorLog("验证签名失败");
                                     //TODO 检查验证签名失败的原因
                            }
                   }else{
                            //未返回正确的http状态
                            LogUtil.writeErrorLog("未获取到返回报文或返回http状态码非200");
                   }
                            
                   String reqMessage =   DemoBase.genHtmlResult(reqData);
                   String rspMessage =   DemoBase.genHtmlResult(rspData);
                   resp.getWriter().write("企业信息查询交易</br>请求报文:<br/>"+reqMessage+"<br/>"   + "应答报文:</br>"+rspMessage+"");
                                     
         }
联系我们

业务咨询: 诸中林

021-20631643

zhuzhonglin@unionpay.com

技术咨询: 诸中林

021-20631643

zhuzhonglin@unionpay.com

中国银联版权所有©2002-2019沪 ICP备07032180号