java对接银联商务公众号+服务窗支付(5)
java实现银联商务公众号+服务窗对接----订单撤销
本文对接银联商务公众号+服务窗支付,实现支付下单、订单查询、订单退款、退款查询和订单关闭几个功能,使用到银联商务的公众+服务窗支付接口规范,请自行百度下载。
在上几篇支付下单、下单查询、订单退款和退款查询,已经实现公众号下单支付、下单查询、订单退款、退款查询功能的实现和接口的封装,本篇将介绍订单撤销的对接实现,并将我使用到的银联商务的请求接口和响应接口进行封装,使用测试网页输出测试信息。
一、接口及代码实现
1.订单撤销接口
1.1接口规范
接口规范请查看下载的银联商务公众号+服务窗接口规范订单撤销接口部分,这里不做展示。
1.2 代码实现
1.2.1 CloseOrderController代码
/*** 订单关闭接口* @param request* @param response* @param merOrderId* @return* @throws UnsupportedEncodingException*/@RequestMapping(value = "/OrderClose", method = RequestMethod.POST)
// public Map<String, Object> close(HttpServletRequest request, HttpServletResponse response, String merOrderId) throws UnsupportedEncodingException {
// Map<String,Object> map = new HashMap<String,Object>(); //接收退款请求map
// map.put("merOrderId", merOrderId); //商户订单号
// Map<String, Object> closeordermap = closeorderserviceimpl.CloseOrder(map);
// logger.info("closeordermap = " + closeordermap);
// return closeordermap; //返回refundmap
// }public Map<String, Object> close(HttpServletRequest request, HttpServletResponse response, @RequestBody String jsonreq) throws UnsupportedEncodingException { Map<String,Object> map = new HashMap<String,Object>(); //接收退款查询请求mapMap<String,Object> reqmap = new HashMap<String,Object>(); //客户端原始请求mapMap<String,Object> datamap = new HashMap<String,Object>(); //客户端原始请求Data数据Map<String,Object> resultmap = new HashMap<String,Object>(); //返回结果//接收客户端请求数据并转换成mapreqmap = JsonUtils.JsonToMapObj(jsonreq);logger.info("unifiedquery reqmap = " + reqmap);datamap = (Map<String, Object>) reqmap.get("tradeParam"); //请求体数据logger.info("unifiedquery datamap = " + datamap);//-----------------------step1 验证签名-----------------------------String sign = (String) reqmap.get("sign"); //获取signString key = UnionPayConstants.GGMD5KEY; //国光MD5密钥try {if (!PayUtil.verifySign(datamap,key,sign)) {resultmap.put("returnCode", "Bad_Sign");resultmap.put("returnInfo", "签名错误");return resultmap;}//-----------------------step2 验证消息类型 tradeType:close-------------if (!"close".equals(reqmap.get("tradeType"))) {resultmap.put("returnCode", "TradeType_Error");resultmap.put("returnInfo", "消息类型不符");return resultmap;}//------------------------step3验证传参完整性---------------------------//验证公共参数完整性if(!PayUtil.verifyParameter(datamap)) {resultmap.put("returnCode", "Common_Value_Error");resultmap.put("returnInfo", "缺少必要公共参数");return resultmap;}//验证接口参数完整性if(datamap.get("merOrderId").equals("")) {resultmap.put("returnCode", "Value_Error");resultmap.put("returnInfo", "缺少必要接口参数");return resultmap;}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();resultmap.put("returnCode", "System_Error");resultmap.put("returnInfo", "系统异常");return resultmap;}//------------------------step4 传值并调用退款查询接口----------------------map.put("mid", datamap.get("mid")); //商户号map.put("tid", datamap.get("tid")); //终端号map.put("instMid", datamap.get("instMid")); //机构商户号map.put("msgSrc", datamap.get("msgSrc")); //消息来源map.put("merOrderId", datamap.get("merOrderId")); //原商户订单号Map<String, Object> closeordermap = closeorderserviceimpl.CloseOrder(map);logger.info("closeordermap = " + closeordermap);if(!"200".equals(closeordermap.get("statuscode"))) {resultmap.put("returnCode", "Union_Connect_Error");resultmap.put("returnInfo", "银联网付连接失败");return resultmap;}//------------------------step5接口返回数据------------------------------Map<String,Object> resultdatamap = new HashMap<String,Object>(); //resultmap中data数据resultdatamap.put("errCode", closeordermap.get("errCode")); //平台错误码resultdatamap.put("status", closeordermap.get("status")); //交易状态resultdatamap.put("totalAmount", closeordermap.get("totalAmount")); //退款金额resultdatamap.put("targetSys", closeordermap.get("targetSys")); //目标平台代码(第三方代码)resultdatamap.put("targetStatus", closeordermap.get("targetStatus")); //目标平台状态resultdatamap.put("messageType", closeordermap.get("msgType")); //消息类型resultmap.put("data", resultdatamap);resultmap.put("returnCode", closeordermap.get("errCode")); //resultmap.put("returnInfo", refundquerymap.get("errMsg"));return resultmap; //返回map}
1.2.2 closeorderserviceimpl代码
本部分代码为银联商务公众号订单撤销服务实现类。
@Overridepublic Map<String, Object> CloseOrder(Map<String, Object> map) throws UnsupportedEncodingException {// TODO Auto-generated method stublogger.info("------------------close order--------------------------");Map<String, Object> reqmap = new HashMap<String, Object>(); //请求mapMap<String, Object> resp = new HashMap<String, Object>(); //响应respreqmap.put("mid", map.get("mid").toString()); //1商户号reqmap.put("tid", map.get("tid").toString()); //2终端号reqmap.put("instMid", map.get("instMid").toString()); //3业务类型reqmap.put("msgSrc", map.get("msgSrc").toString()); //4消息来源 reqmap.put("msgType", "close"); //5消息类型String aligetTime = PayUtil.aligetTime();logger.info("请求时间aligetTime = " + aligetTime);reqmap.put("requestTimestamp", aligetTime); //6报文请求时间 reqmap.put("merOrderId", map.get("merOrderId").toString()); //7原交易订单号//生成待签名字符串并进行MD5加密String builderSignStr = "";try {builderSignStr = PayUtil.builderSignStr(reqmap,UnionPayConstants.MD5KEY);//signString = PayUtil.generateSignature(reqmap, UnionPayConstants.MD5KEY);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}reqmap.put("sign", builderSignStr.toLowerCase()); //8签名,转小写logger.info("reqmap= " + reqmap);String jsonstring = GGitUtil.MapToJson2(reqmap); //请求map转成json stringlogger.info("发送CloseOrder post请求消息:" + jsonstring);//接收银联商务返回mapresp = unionpayrequest.dopost(UnionPayConstants.queryURL, jsonstring);return resp;}
1.3测试结果
本文对所写接口写了测试网页进行测试,如图所示。封装的银联商务响应接口中,输入的商户订单号为已支付订单号,响应结果中显示的是OPTION_NOT_ALLOWED,查看银联商务接口文档,表示此订单号已被支付,为关闭状态。(实际测试中,由于参数为测试环境参数,订单关闭接口测试会出现没有配置API的错误,需要连接生产环境,生产环境参数暂时没有下来。)
java对接银联商务公众号+服务窗支付(5)相关推荐
- java对接银联商务公众号+服务窗支付(1)
java实现银联商务公众号+服务窗对接----支付下单 GitLab地址:https://gitlab.com/982837387/UnionPayGetWay.git 本文对接银联商务公众号+服务窗 ...
- java对接银联商务公众号+服务窗支付(4)
java实现银联商务公众号+服务窗对接----退款查询 本文对接银联商务公众号+服务窗支付,实现支付下单.订单查询.订单退款.退款查询和订单关闭几个功能,使用到银联商务的公众+服务窗支付接口规范,请自 ...
- java对接银联商务公众号+服务窗支付(2)
java实现银联商务公众号+服务窗对接----下单查询 本文对接银联商务公众号+服务窗支付,实现支付下单.订单查询.订单退款.退款查询和订单关闭几个功能,使用到银联商务的公众+服务窗支付接口规范,请自 ...
- java对接银联商务公众号+服务窗支付(3)
java实现银联商务公众号+服务窗对接----订单退款 本文对接银联商务公众号+服务窗支付,实现支付下单.订单查询.订单退款.退款查询和订单关闭几个功能,使用到银联商务的公众+服务窗支付接口规范,请自 ...
- 银联支付h5返回商户的地址是post的吗?_php实现银联商务公众号+服务窗支付
一:接口地址: 测试接口地址:https://qr-test2.chinaums.com... 正式接口地址:https://qr.chinaums.com/netpa... 二:主要参数说明: 接口 ...
- 服务号php代码示例,php实现银联商务公众号+服务窗支付的示例代码
之前我们学习了银联商务的H5支付,但是现在H5支付不支持微信支付,最后发现银联商务的公众号+服务窗支付可以支持支付宝支付+微信支付+银联支付 一:接口地址: 测试接口地址:https://qr-tes ...
- php 工商银行公众号支付代码_php实现银联商务公众号+服务窗支付
一:接口地址: 二:主要参数说明: 接口使用的是get传参,直接将接口参数放到接口地址后,此接口是由浏览器直接跳转到接口 1:instMid 业务类型,直接填入:YUEDANDEFAULT 2:mer ...
- php实现银联商务公众号+服务窗支付 代码
1.平台下单接口 参考地址 注意:若是微信公众号支付 请使用 qmf.webPay 并在 微信公众号的环境中测试 $mdKey = 'fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJ ...
- 对接银联商务微信公众号支付遇到的坑
微信公众号支付和微信扫码支付在 支付结果通知上有很大的区别,公众号支付主要是以异步通知去确定支付结果,也可以通过查询接口,而扫码支付通常调用查询接口去查询支付状态.因而,公众号支付的异步通知是一个需要 ...
最新文章
- where field in
- C语言输入end时结束程序,给大家一个程序,输入多个字符串以END结束后排序,这个程序运行,即结果都是对的。...
- fedora8 使用小记之:终端字体设置
- 4gl 上传文件_文件管理密码相册工具app下载-文件管理密码相册工具app安卓版下载v1.8...
- 为什么某些订单的参与者Participant无法被删除
- 阿里巴巴指东打西,PC之后卖盒饭?
- awk 中 {print $1} 什么意思
- centos 7 Hadoop2.7.4完全分布式搭建(一)
- html消息发送接收,在html页面中 如何应用mqtt协议发送/接收消息
- java static调用吗_java中使用static
- C++基础——有关FILE的那些函数
- 大牛学习爬虫经验,转自知乎
- 为什么普遍自学能力不足
- 学习java的第5天
- 计算机导论11.29课后总结
- 消息称GPhone今日发布 揭秘幕后教父(图)
- 【廖雪峰】写一个验证Email地址的正则表达式
- android wifi 视频,Android开发——通过wifi接收IPCamera视频流
- Google Chrome浏览器JS调试工具
- 单片机C语言的“进程调度轮询”
热门文章
- 如何写一个完整的django网站:配置环境啥的不讲(python+mysql+html相关) 肆
- 物联网卡相关的商业模式
- 代码质量与安全 | 一文了解高级驾驶辅助系统(ADAS)及其开发中需要遵循的标准
- 投票助力源码_微信投票助手源码
- 热璞数据库HotDB跨JOIN功能介绍
- 领导都被你镇住的公文金句-写作文稿
- 推荐几个常用的可免费下载PPT模板的网站
- 怎样才能让最重要的事情做起来更容易?
- 大专的电子信息工程技术学什么?
- 有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,“<<”,“>>”,使之能够用于矩阵的输入和输出,以及矩阵之和。