java实现银联商务公众号+服务窗对接----退款查询

本文对接银联商务公众号+服务窗支付,实现支付下单、订单查询、订单退款、退款查询和订单关闭几个功能,使用到银联商务的公众+服务窗支付接口规范,请自行百度下载。
在上两篇支付下单和下单查询和订单退款中,已经实现公众号下单支付、下单查询、订单退款功能的实现和接口的封装,本篇将介绍退款查询的对接实现,并将我使用到的银联商务的请求接口和响应接口进行封装,使用测试网页输出测试信息。
一、接口及代码实现
1.订单退款接口
1.1接口规范
接口规范请查看下载的银联商务公众号+服务窗接口规范退款接口接口部分,这里不做展示。
1.2 代码实现
1.2.1 UnifieRefundQueryController代码

/*** 退款查询接口* @param request* @param response* @param refundOrderId* @return* @throws UnsupportedEncodingException*/@RequestMapping(value = "/RefundQuery", method = RequestMethod.POST)
// public Map<String, Object> query(HttpServletRequest request, HttpServletResponse response, String refundOrderId) throws UnsupportedEncodingException {
//  Map<String,Object> map = new HashMap<String,Object>();
//  map.put("merOrderId", refundOrderId); //退款订单号
//  Map<String, Object> refundquerymap = refundqueryserviceimpl.RefundQuery(map);
//  logger.info("refundquerymap = " + refundquerymap);
//  return refundquerymap; //返回map
// }public Map<String, Object> query(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"); //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_Sing");resultmap.put("returnInfo", "签名错误");return resultmap;}//-----------------------step2  验证消息类型  tradeType:refundQuery-------------if (!"refundQuery".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("refundOrderId").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("refundOrderId")); //退款订单号Map<String, Object> refundquerymap = refundqueryserviceimpl.RefundQuery(map);logger.info("refundquerymap = " + refundquerymap);if(!"200".equals(refundquerymap.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", refundquerymap.get("errCode"));    //平台错误码resultdatamap.put("status", refundquerymap.get("status"));     //交易状态resultdatamap.put("totalAmount", refundquerymap.get("totalAmount"));  //退款金额resultdatamap.put("targetSys", refundquerymap.get("targetSys"));   //目标平台代码(第三方代码)resultdatamap.put("targetStatus", refundquerymap.get("targetStatus"));  //目标平台状态resultdatamap.put("refundStatus", refundquerymap.get("refundStatus"));  //支付时间resultdatamap.put("refundOrderId", refundquerymap.get("refundOrderId")); //平台退款订单号resultdatamap.put("refundTargetOrderId", refundquerymap.get("refundTargetOrderId")); //第三方退款订单号resultdatamap.put("messageType", refundquerymap.get("msgType"));   //消息类型resultmap.put("data", resultdatamap);resultmap.put("returnCode", refundquerymap.get("errCode")); //resultmap.put("returnInfo", refundquerymap.get("errMsg"));return resultmap; }

1.2.2 refundqueryserviceimpl代码

本部分代码为银联商务公众号退款查询接口服务实现类。

@Overridepublic Map<String, Object> RefundQuery(Map<String, Object> map) throws UnsupportedEncodingException {// TODO Auto-generated method stublogger.info("------------------refundquery--------------------------");Map<String, Object> reqmap = new HashMap<String, Object>(); //请求mapMap<String, Object> resp = new HashMap<String, Object>(); //响应respreqmap.put("mid", map.get("mid").toString());   //商户号reqmap.put("tid", map.get("tid").toString());   //终端号reqmap.put("instMid", map.get("instMid").toString());reqmap.put("msgSrc", map.get("msgSrc").toString());  //消息来源reqmap.put("msgId", "UnionPay_F004");     //退款查询reqmap.put("msgType", "refundQuery");     //消息类型//报文请求时间String aligetTime = PayUtil.aligetTime();logger.info("请求时间aligetTime = " + aligetTime);reqmap.put("requestTimestamp", aligetTime); reqmap.put("merOrderId", map.get("merOrderId").toString()); //退货订单号,前端传入//生成待签名字符串并进行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);logger.info("reqmap= " + reqmap);String jsonstring = GGitUtil.MapToJson2(reqmap); //请求map转成json stringlogger.info("发送refundquery post请求消息:" + jsonstring);//接收银联商务返回mapresp = unionpayrequest.dopost(UnionPayConstants.queryURL, jsonstring);return resp;}

1.3测试结果
本文对所写接口写了测试网页进行测试,填入退款接口中生成的商户退款订单号,结果如图所示。封装的银联商务响应接口中,返回商户退款订单号,第三方退款订单号,消息类型、退款状态等,其中消息类型messageType为wx.refundQuery,退款状态status为TRADE_SUCCESS,表示退款查询成功。

java对接银联商务公众号+服务窗支付(4)相关推荐

  1. java对接银联商务公众号+服务窗支付(1)

    java实现银联商务公众号+服务窗对接----支付下单 GitLab地址:https://gitlab.com/982837387/UnionPayGetWay.git 本文对接银联商务公众号+服务窗 ...

  2. java对接银联商务公众号+服务窗支付(5)

    java实现银联商务公众号+服务窗对接----订单撤销 本文对接银联商务公众号+服务窗支付,实现支付下单.订单查询.订单退款.退款查询和订单关闭几个功能,使用到银联商务的公众+服务窗支付接口规范,请自 ...

  3. java对接银联商务公众号+服务窗支付(2)

    java实现银联商务公众号+服务窗对接----下单查询 本文对接银联商务公众号+服务窗支付,实现支付下单.订单查询.订单退款.退款查询和订单关闭几个功能,使用到银联商务的公众+服务窗支付接口规范,请自 ...

  4. java对接银联商务公众号+服务窗支付(3)

    java实现银联商务公众号+服务窗对接----订单退款 本文对接银联商务公众号+服务窗支付,实现支付下单.订单查询.订单退款.退款查询和订单关闭几个功能,使用到银联商务的公众+服务窗支付接口规范,请自 ...

  5. 银联支付h5返回商户的地址是post的吗?_php实现银联商务公众号+服务窗支付

    一:接口地址: 测试接口地址:https://qr-test2.chinaums.com... 正式接口地址:https://qr.chinaums.com/netpa... 二:主要参数说明: 接口 ...

  6. 服务号php代码示例,php实现银联商务公众号+服务窗支付的示例代码

    之前我们学习了银联商务的H5支付,但是现在H5支付不支持微信支付,最后发现银联商务的公众号+服务窗支付可以支持支付宝支付+微信支付+银联支付 一:接口地址: 测试接口地址:https://qr-tes ...

  7. php 工商银行公众号支付代码_php实现银联商务公众号+服务窗支付

    一:接口地址: 二:主要参数说明: 接口使用的是get传参,直接将接口参数放到接口地址后,此接口是由浏览器直接跳转到接口 1:instMid 业务类型,直接填入:YUEDANDEFAULT 2:mer ...

  8. php实现银联商务公众号+服务窗支付 代码

    1.平台下单接口 参考地址 注意:若是微信公众号支付 请使用 qmf.webPay 并在 微信公众号的环境中测试 $mdKey = 'fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJ ...

  9. 对接银联商务微信公众号支付遇到的坑

    微信公众号支付和微信扫码支付在 支付结果通知上有很大的区别,公众号支付主要是以异步通知去确定支付结果,也可以通过查询接口,而扫码支付通常调用查询接口去查询支付状态.因而,公众号支付的异步通知是一个需要 ...

最新文章

  1. 北大博士“最高荣誉”,出炉!
  2. 从羊毛党看一个成功的裂变活动
  3. Python基础day06【匿名函数lambda、列表生成式、集合set、文件读写】
  4. python3 log_Python3 log10()函数简单用法
  5. 【Pytorch神经网络理论篇】 22 自编码神经网络:概述+变分+条件变分自编码神经网络
  6. 东北真有“油炸冰溜子”这道菜吗?
  7. 李飞飞离职Google重返斯坦福,CMU计算机学院院长Andrew Moore接任
  8. 微信小程序scroll-view横向滚动
  9. 整流3-前级三相PWM整流器软件层面理解
  10. 十大常用经典排序算法总结!!!
  11. IPS与IDS部署场景
  12. linux编译poco静态库,Xcode 编译poco c++静态库
  13. 微服务探索:nuoyi-cloud(诺伊)
  14. 【最优估计学习笔记】贝叶斯公式的深入理解
  15. 查看linux服务器的品牌和型号
  16. QOpenGLWidget运行时闪退
  17. 深度解析京东个性化推荐系统
  18. 026惯导卫星组合导航仿真
  19. 英语语法---限定词详解
  20. 自动修改域用户计算机名,Windows自动改计算机名和加入域工具

热门文章

  1. 统计计算第五节课,Mante Calor方法(二)——减小估计量的方差
  2. 【巨杉数据库SequoiaDB】巨杉数据库荣获《金融电子化》“金融科技创新奖”
  3. RecyclerView刷新跳到顶部
  4. 自动加域脚本,bat和vbs配合使用,使加域操作更简单
  5. 了解一下MISC出题思路
  6. z370支持pcie信号拆分吗_不再混乱 PCI-E插槽都有哪些样子?
  7. 绘制UML各种图详解
  8. UG模具设计:强复位的作用及运作原理
  9. 2013年博客的第一次随笔,算加权平均分
  10. 4U 智能航行器的含义