付款方对接银联入网仿真测试系统

     对接银联的相关接口是有一整套流程的,其中我所负责的是银联扫码接口对接。

     简介

     明确对接时的个人定位,其中,大方向上分为付款方,收款方和银联,付款方分为付款方(付款银行)和付款方移动应用前置方(对接单位),收款方为商户或者其他企业。此次我所对接的是以付款方移动应用前置的身份对接的银联入网仿真测试系统。

     对接流程

      1.获取银联扫码的相关接口文档以及测试DEMO,具体目录结构如图

相关的测试文档和demo都在这个二维码的压缩包中,根据自己的业务需求去阅读相关文档

2.整合demo

银联这边的demo名字叫QRCSample,我这边导入到自己的IDE中会出现缺少servlet-api的jar包,将其导入即可,或者是tomcat版本和jdk版本比较低,相应配置版本即可。

这边银联的demo跑起来的整体展示图如下:

     能够看到这个页面代表你已经成功了一半,当然,在这里我的建议是先将银联的这个测试demo整合至你的项目中去,否则当你用银联的这个测试demo调通测试仿真系统后再去整合至你的项目,那个时候就不知道会不会又出现什么bug了,况且银联这个东西往后面测试有可能还会收费,所以呀,准备工作先做好。

3.对接银联测试仿真系统

   原谅我之前废话那么多,实在是想讲明白之前的一些东西。好了,现在正式开始。

   整体流程是这样,银联这边是没有相应的技术开发人员给你技术支持的,只会有相应的测试人员解答你测试中出现的问题,当你准备开始测试的时候,银联会提供一个仿真系统给你测试,会拉你进去一个qq群,当你在此处全部调通后,银联会要求你生成一个测试报告,之后会安排相应的测试人员跟你进行下一步的测试,目前,我已经完成之前的所有步骤,在等银联安排相应的测试人员走下一步测试流程,在这里记录对接银联测试仿真系统中的坑和注意点。

   使用中国银联入网测试仿真系统:
   1.获取仿真系统以及案例集,这一点可以自己去官网下载或者找银联对接人员给你下好,我的建议是找银联对接人员,别自己鼓捣半天还搞了错了的东西,注意,不要怕麻烦,对接的时候不懂就问。

    2.在安装仿真系统的时候需要根据机构号登录获取相应的类似于验证码的东西,这边直接登录银联官网用自己的机构码登录即可,注意在自己的代码中需要将机构号与之进行匹配,否则等你请求仿真系统的时候有你好受的。

    3.进入中国银联仿真入网测试仿真系统,如图所示:

 

     这个是我测试完成后的截图,所以跟你们刚进去的有点不一样,不过不影响。

  4.根据系统使用指南进行一步步操作,主要是通讯参数问题,需配置本地的ip和端口,注意此处的端口是仿真系统的端口,不要和本地重复,配置完成后注意点击该页面左上角的保存,如图:

  注意此处配置的端口和IP是仿真系统的端口和IP,检查下自己本地有没有开代理或者什么的,会影响的,至于下方的URL,是银联代表收款方或者银联自己回调你的地址,也就是说这个是你的一个接口地址,至于参数,请求的时候仿真是会打印出来的。

5.了解这两个按钮,一个是我们请求银联,一个是银联请求通知我们,并且,需要我们选定相关按钮的时候才能接口响应成功。

   绿色按钮代表我们需要请求的接口,鼠标选中后,我们自己的后台请求仿真系统就会收到相应的响应,蓝色的代表银联通知我们,也就是通知我们在URL上面配置的地址即可。不过比较不人性化的一点是必须要完成一个接口才能走下面的接口,这一点有点......

6.在你的项目配置文件中修改请求路径和参数,注意采用http形式,修改相应路径和端口号即可

#unionacpsdk.qrcB2cIssBackTransUrl=https://c2c.test.95516.com/qrc/api/issBackTransReq.do
unionacpsdk.qrcB2cIssBackTransUrl=http://192.168.2.36:8089/qrc/api/issBackTransReq.do

上面一行是银联的测试demo地址,下面一行是配置仿真系统的地址,如果需要用https形式进行请求,那仿真是要开启https服务,并且运用相应的证书即可。

7.以C2B码申请为例,测试调用银联仿真系统

7.1修改unionpay_acp_sdk_properties中的请求路径,unionacpsdk.qrcB2cIssBackTransUrl=http://192.168.2.36:8089/qrc/api/issBackTransReq.do
 7.2  注意相应的参数修改  reqReserved,signMethod两个参数不要上送,payeInfo字段需要加密,采用DemoBase.getPayerInfoWithEncrpyt(payerInfoMap,DemoBase.encoding)方法
 7.3  开始请求,我本地配的是192.168.2.36:8089的端口和地址,仿真系统成功会显示上方一个绿色的对勾,并且日志信息是没有报错的,与此同时,本地需要将返回的报文进行验签工作,验签成功才代表测试仿真请求成功。

8.测试调用银联仿真系统小技巧和注意事项

   8.1,如果在一个工作周请求仿真是成功的,到了下个工作周来上班发现请求爆出一大堆问题,这个时候建议你重新认证测试一下重新来一遍就好。

   8.2,payerInfo和payeeInfo两个字段,注意加密的时候不要弄混了,这是两个不同的方法,分别代表收款方和付款方的敏感加密信息。

    8.3,可以自己建个工具类对返回数据进行解析,不然返回一个xml格式的数据显示给客户看会很low,这边我针对我这边的返回信息编写的工具类显示如下:

    


	/**
	 * 银联扫码中xml格式转化为jsonObject
	 * @param xmlStr
	 * @return
	 */
	public static JSONObject xmlToJSON(String xmlStr) {
		String [] strs = xmlStr.split("</br>");
		Pattern p = Pattern.compile("<[^>]+>",Pattern.CASE_INSENSITIVE);
		Map<String, String> map = new HashMap<String, String>();
		for(String s:strs){
			String[] ms = s.split("=");
			Matcher m = p.matcher(ms[0]);//开始编译
			ms[0]=m.replaceAll("");
			if(ms.length==2) {
				map.put(ms[0], ms[1]);
			}else{
				map.put(ms[0],"");
			}
		}
		if(map.get("signature")!=null)
			map.put("signature", new StringBuilder(map.get("signature")).append("==").toString());
		if(map.get("couponInfo")!=null)
			map.put("couponInfo", new StringBuilder(map.get("couponInfo")).append("==").toString());
		JSONObject jsonObject = (JSONObject) JSONObject.toJSON(map);
		return jsonObject;
	}

这边针对银联返回的信息做了相应的对应处理,返回的数据如图显示,

这个时候data里面显示的就是以key-value格式显示的数据。

8.4通知地址

这边仿真上面的系统通知分为两类,一类是主扫模式下的消费通知,一类是被扫模式下的消费通知,主扫模式下的消费通知交易类型是0160000903,被扫模式下的消费通知交易类型0250000903,他们的字段名都是reqType,但是细致一点会发现,消费通知的接口是没有返回成功或者失败的respCode码,只有一个origRespCode,与此同时,我们会看到会返回一个origReqType,经过多次测试发现,主扫和被扫模式的通知是不一样的,类似于消费撤销冲正等接口,他们返回的reqType都是一样的,里面的origReqType是不一样的,所以我们要在获取到reqType的时候再次判断里面的小类型,只能是银联的文档是没有解释这个的,需要我们细致一点去发现。

8.5被扫模式下的附加处理请求和通知

银联接口中关于附加处理请求通知是异步的,这里我是让回调银联的通知睡眠几秒然后请求,这样可以避免请求堵塞的问题,但是性能上是否提高就需要后面进行考量了。

public void qrPayNotify(GoldCardRecevieNotifyDto recevieNotifyDto,HttpServletRequest req,
			HttpServletResponse resp) {
		Runnable runnable = new Runnable() {
			@Override
			public void run() {
				try{
					//暂时休眠三秒钟,与附加处理通知错开
					Thread.sleep(1000*3);
					BaseResponse baseResponses = recevieNotify(recevieNotifyDto,req,resp);
					logger.info("附加处理请求通知返回码:{}",baseResponses.getRcode());
					if(Constants.FUYOU_SUCCESS.equals(baseResponses.getRcode())) {
						logger.info("满嘉附加处理请求通知已经成功发出");
					}else{
						logger.info("满嘉附加处理请求通知发送失败!");
					}
					/*if(Constants.FUYOU_SUCCESS.equals(baseResponse.getRcode())) {
						break;
					}else{
						logger.info("满嘉附加处理请求通知发送失败!二维码为{}",rqCode);
					}*/
				}catch (Exception e){
					e.printStackTrace();
					logger.info("回调异常");
				}
			}

		};
		Thread thread = new Thread(runnable);
		thread.start();
	}

传递参数因人而异,大概意思就在这里,有需要的可以拿走自己修改。

8.6,payeeInfo,payerInfo,couponInfo信息的解密和展示

   前面两者都是可以利用银联提供的demo进行相应的解密,后面的couponInfo优惠信息则需要先将信息进行xml转换,然后读取json里面的数组,最后转json进行读取,这个主要在查询营销的时候会进行返回,大家注意注意即可。

8.7带花括号且多空格的字符串转map数组

很想说的是,就是因为转map中的一个空格,困扰了我好久,明明转成功了就是取不出来,最后发现是空格的原因,这里将字符串转map的方法也放在这里,有需要的可以拿走自己修改。

public class StringToMapUtils {
	
	public static Map<String, String> maps(String map2){
		String map = map2.replace(" ", ""); 
		if (map.startsWith("{")) {
		    map = map.substring(1, map.length());
		}
		if (map.endsWith("}")) {
		    map = map.substring(0, map.length() - 1);
		}

		
		String[] out = map.split(",");
		Map<String, String> map1 = new HashMap<String, String>();
		for (String anOut : out) {
		    String[] inn = anOut.split("=");
		    map1.put(inn[0], inn[1]);
		}
		System.out.println(map1);
		String strmap = JSONObject.toJSONString(map1);
		Map<String, String> maps= (Map<String, String>) JSON.parse(strmap);
		return maps;
	}

}

其中考虑了去除空格的情况,至少我是不会再掉进这个坑了。。

8.8证书问题,一般情况下调用银联的仿真系统是会有问题的,需要下载测试群中以400开头的加密证书,并且需要使用仿真系统中相对应的解密证书进行验签处理,这个到时候问下就好,知道是这么一个问题。

9.测试完成,生成测试报告

将你负责的业务开发完成后,想要进行下一步,需要生成相应的测试报告提交给银联测试商务那边,审核通过后会安排专门的测试人员进行另外一个环境的测试,这里我介绍喜爱怎么生成测试报告。

 

整个的全貌是这样的,我们只需要选中不需要测试的接口然后跳过测试即可,最后不需要管弹出的提示消息,直接生成测试报告提交给银联那边,等待下一步的测试,而我,目前就是正在等待下一步的进行时间。

  讲道理,刚拿到这个东西的时候一脸懵逼,压根不知道怎么用,但是一旦摸索出来了就会发现,这只不过是本地开了一个端口启动了一个应用配合你本地进行测试,毕竟银联是个大公司,对接全国这么多银行和企业,通过这个仿真系统可以解决很多不必要的问题,提高效率,当我会用了才发现了它的良苦用心。等我下个步骤完成后再来总结。加油。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值