| | |
| | | |
| | | import java.io.IOException; |
| | | import java.io.PrintWriter; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | import com.panzhihua.applets.umf.MyAESUtil; |
| | | import com.panzhihua.applets.umf.UmfPayUtil; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.service.user.UserService; |
| | | import com.panzhihua.common.utlis.DateUtils; |
| | | import com.panzhihua.common.utlis.HttpClientUtil; |
| | | import com.umf.api.service.UmfService; |
| | | import com.umf.api.service.UmfServiceImpl; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import com.panzhihua.common.service.community.ComBatteryCommodityOrderFeign; |
| | | import org.json.XML; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | |
| | | import com.panzhihua.common.utlis.StringUtils; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import static com.umf.api.service.UmfServiceImpl.printResult; |
| | | |
| | | /** |
| | | * @auther lyq |
| | |
| | | @RequestMapping("/wx/") |
| | | public class WxCallbackApi { |
| | | |
| | | private static final String SUCCESS="SUCCESS"; |
| | | |
| | | @Resource |
| | | private CommunityService communityService; |
| | | @Resource |
| | | private UmfPayUtil umfPayUtil; |
| | | @Value("${umf.file}") |
| | | private String file; |
| | | @Resource |
| | | private UserService userService; |
| | | @Resource |
| | | private ComBatteryCommodityOrderFeign commodityOrderFeign; |
| | | |
| | | |
| | | @PostMapping("wxNotify") |
| | | public void payCallback(HttpServletRequest request, HttpServletResponse response) { |
| | | log.info("微信支付回调start"); |
| | | log.error("微信支付回调start"); |
| | | String inputLine = ""; |
| | | String notityXml = ""; |
| | | try { |
| | |
| | | } |
| | | // 关闭流 |
| | | request.getReader().close(); |
| | | log.info("微信回调内容信息:" + notityXml); |
| | | log.error("微信回调内容信息:" + notityXml); |
| | | // 解析成Json |
| | | org.json.JSONObject xmlJson = XML.toJSONObject(notityXml); |
| | | if (StringUtils.isNotEmpty(xmlJson.toString())) { |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | @PostMapping("wxNotifyAll") |
| | | @GetMapping("wxNotifyAll") |
| | | public void payCallbackAll(HttpServletRequest request, HttpServletResponse response) { |
| | | log.info("微信支付回调start"); |
| | | //获取联动发送请求的参数 |
| | | String requestParam = request.getQueryString(); |
| | | System.out.println("请求参数 :" + requestParam); |
| | | //调用异步通知解析方法 |
| | | UmfService service = new UmfServiceImpl("53461",file); |
| | | Map respMap = null; |
| | | try { |
| | | respMap = service.notifyDataParserMap(requestParam); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | if(respMap.get("error_code").equals("0000")){ |
| | | //调用uu洗车支付成功回调 |
| | | Map map=new HashMap(); |
| | | map.put("orderId",respMap.get("order_id")); |
| | | HttpClientUtil.sendPostByJson("https://api.uucsh.cn/notify/wx/pzh-pay",JSONObject.toJSONString(map),1,"appid","10000");; |
| | | } |
| | | //调用SDK生成返回联动平台字符串,加到CONTENT中 |
| | | String resMetaData = service.responseUMFMap(respMap); |
| | | response.setContentType("text/html;charset=utf-8"); |
| | | PrintWriter out = null; |
| | | try { |
| | | out = response.getWriter(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); |
| | | out.println("<HTML>"); |
| | | out.println("<HEAD><META NAME=\"MobilePayPlatform\" CONTENT=\"" + resMetaData + "\" /></HEAD>"); |
| | | out.println("<BODY>"); |
| | | out.println("</BODY>"); |
| | | out.println("</HTML>"); |
| | | out.flush(); |
| | | out.close(); |
| | | } |
| | | @ApiOperation("uu洗车退款接口") |
| | | @PostMapping("/uuRepay") |
| | | public R uuRepay(@RequestBody String aesString){ |
| | | try { |
| | | Map<String, String> aesMap= (Map<String, String>) JSON.parse(aesString); |
| | | String desString=MyAESUtil.Decrypt(aesMap.get("aesString"),"Ryo7M3n8loC5Abcd"); |
| | | Map<String,String> desMap= (Map) JSON.parse(desString); |
| | | Map map=umfPayUtil.repay(desMap.get("orderId"),desMap.get("merdate"), DateUtils.getDateFormatString(new Date(),"yyMMddHHmmss")+"0001",desMap.get("refundAmount"),desMap.get("orgAmount")); |
| | | return R.ok(map); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return R.fail("加密验证失败"); |
| | | } |
| | | |
| | | } |
| | | @ApiOperation("uu洗车推送") |
| | | @PostMapping("/uuPush") |
| | | public R uuPush(@RequestBody String aesString){ |
| | | try { |
| | | Map<String, String> aesMap= (Map<String, String>) JSON.parse(aesString); |
| | | String desString=MyAESUtil.Decrypt(aesMap.get("aesString"),"Ryo7M3n8loC5Abcd"); |
| | | Map<String,String> desMap= (Map) JSON.parse(desString); |
| | | return userService.uuPush(desMap.get("washer_mobile"),desMap.get("phone"),desMap.get("washer_name"),Integer.parseInt(desMap.get("order_status"))); |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return R.fail("推送失败"); |
| | | } |
| | | |
| | | } |
| | | @ApiOperation("ws洗车推送") |
| | | @PostMapping("/wsPush") |
| | | public R wsPush(@RequestBody String aesString){ |
| | | try { |
| | | Map<String, String> aesMap= (Map<String, String>) JSON.parse(aesString); |
| | | String desString=MyAESUtil.Decrypt(aesMap.get("aesString"),"Ryo7M3n8loC5Abcd"); |
| | | Map<String,String> desMap= (Map) JSON.parse(desString); |
| | | return userService.wsPush(desMap.get("washer_mobile"),desMap.get("phone"),desMap.get("washer_name"),Integer.parseInt(desMap.get("order_status"))); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return R.fail("推送失败"); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 电动车商城商品购买支付回调 |
| | | * @param request 请求参数 |
| | | * @param response 返回参数 |
| | | */ |
| | | @PostMapping("/batteryPayNotify") |
| | | public void batteryPayNotify(HttpServletRequest request, HttpServletResponse response) { |
| | | log.info("钱包充值微信支付回调start"); |
| | | String inputLine = ""; |
| | | String notityXml = ""; |
| | | try { |
| | |
| | | } |
| | | // 关闭流 |
| | | request.getReader().close(); |
| | | log.info("微信回调内容信息:" + notityXml); |
| | | log.info("钱包充值微信回调内容信息:" + notityXml); |
| | | // 解析成Json |
| | | org.json.JSONObject xmlJson = XML.toJSONObject(notityXml); |
| | | if (StringUtils.isNotEmpty(xmlJson.toString())) { |
| | | JSONObject resultData = JSON.parseObject(xmlJson.get("xml").toString()); |
| | | // 成功支付订单 |
| | | if (resultData.getString("result_code").equals("SUCCESS") |
| | | && resultData.getString("return_code").equals("SUCCESS")) { |
| | | WxPayNotifyOrderDTO notifyOrderDTO = new WxPayNotifyOrderDTO(); |
| | | // 订单号 |
| | | String orderTradeNo = resultData.getString("out_trade_no"); |
| | | notifyOrderDTO.setOrderTradeNo(orderTradeNo); |
| | | // 微信支付订单号 |
| | | String wxTradeNo = resultData.getString("transaction_id"); |
| | | notifyOrderDTO.setWxTradeNo(wxTradeNo); |
| | | // 订单金额 |
| | | String totalFee = resultData.getString("total_fee"); |
| | | notifyOrderDTO.setTotalFee(totalFee); |
| | | // 支付完成时间 |
| | | String payTime = resultData.getString("time_end"); |
| | | notifyOrderDTO.setPayTime(payTime); |
| | | // 现金支付金额 |
| | | String cashFee = resultData.getString("cash_fee"); |
| | | notifyOrderDTO.setCashFee(cashFee); |
| | | if (SUCCESS.equals(resultData.getString("result_code")) && SUCCESS.equals(resultData.getString("result_code"))){ |
| | | WxPayNotifyOrderDTO notifyOrderDTO = getWxNotify(resultData); |
| | | |
| | | |
| | | |
| | | // 封装 返回值 |
| | | StringBuffer buffer = new StringBuffer(); |
| | | buffer.append("<xml>"); |
| | | buffer.append("<return_code>SUCCESS</return_code>"); |
| | | buffer.append("<return_msg>OK</return_msg>"); |
| | | buffer.append("</xml>"); |
| | | |
| | | // 根据订单号修改订单信息 |
| | | commodityOrderFeign.batteryPayNotify(notifyOrderDTO); |
| | | // 给微信服务器返回 成功标示 否则会一直询问 咱们服务器 是否回调成功 |
| | | PrintWriter writer = response.getWriter(); |
| | | // 返回 |
| | | writer.print(buffer.toString()); |
| | | writer.print(getWxSuccessString()); |
| | | } else {// 未成功支付订单 |
| | | // 封装 返回值 |
| | | StringBuffer buffer = new StringBuffer(); |
| | | buffer.append("<xml>"); |
| | | buffer.append("<return_code>FAIL</return_code>"); |
| | | buffer.append("<return_msg>FAIL</return_msg>"); |
| | | buffer.append("</xml>"); |
| | | |
| | | // 给微信服务器返回 成功标示 否则会一直询问 咱们服务器 是否回调成功 |
| | | PrintWriter writer = response.getWriter(); |
| | | // 返回 |
| | | writer.print(buffer.toString()); |
| | | writer.print(getWxFailString()); |
| | | } |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | @PostMapping("/batteryActivityPayNotify") |
| | | public void batteryActivityPayNotify(HttpServletRequest request, HttpServletResponse response) { |
| | | log.info("购买活动商品微信支付回调start"); |
| | | String inputLine = ""; |
| | | String notityXml = ""; |
| | | try { |
| | | while ((inputLine = request.getReader().readLine()) != null) { |
| | | notityXml += inputLine; |
| | | } |
| | | // 关闭流 |
| | | request.getReader().close(); |
| | | log.info("购买活动商品微信回调内容信息:" + notityXml); |
| | | // 解析成Json |
| | | org.json.JSONObject xmlJson = XML.toJSONObject(notityXml); |
| | | if (StringUtils.isNotEmpty(xmlJson.toString())) { |
| | | JSONObject resultData = JSON.parseObject(xmlJson.get("xml").toString()); |
| | | // 成功支付订单 |
| | | if (SUCCESS.equals(resultData.getString("result_code")) && SUCCESS.equals(resultData.getString("result_code"))){ |
| | | WxPayNotifyOrderDTO notifyOrderDTO = getWxNotify(resultData); |
| | | |
| | | // 根据订单号修改订单信息 |
| | | commodityOrderFeign.batteryActivityPayNotify(notifyOrderDTO); |
| | | // 给微信服务器返回 成功标示 否则会一直询问 咱们服务器 是否回调成功 |
| | | PrintWriter writer = response.getWriter(); |
| | | // 返回 |
| | | writer.print(getWxSuccessString()); |
| | | } else {// 未成功支付订单 |
| | | // 给微信服务器返回 成功标示 否则会一直询问 咱们服务器 是否回调成功 |
| | | PrintWriter writer = response.getWriter(); |
| | | // 返回 |
| | | writer.print(getWxFailString()); |
| | | } |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 将微信支付回调的请求参数转义为对象 |
| | | * @param resultData 微信支付回调请求参数 |
| | | * @return 转义为支付请求参数 |
| | | */ |
| | | private WxPayNotifyOrderDTO getWxNotify(JSONObject resultData){ |
| | | WxPayNotifyOrderDTO notifyOrderDTO = new WxPayNotifyOrderDTO(); |
| | | notifyOrderDTO.setResult(resultData.toJSONString()); |
| | | // 订单号 |
| | | String orderTradeNo = resultData.getString("out_trade_no"); |
| | | notifyOrderDTO.setOrderTradeNo(orderTradeNo); |
| | | // 微信支付订单号 |
| | | String wxTradeNo = resultData.getString("transaction_id"); |
| | | notifyOrderDTO.setWxTradeNo(wxTradeNo); |
| | | // 订单金额 |
| | | String totalFee = resultData.getString("total_fee"); |
| | | notifyOrderDTO.setTotalFee(totalFee); |
| | | // 支付完成时间 |
| | | String payTime = resultData.getString("time_end"); |
| | | notifyOrderDTO.setPayTime(payTime); |
| | | // 现金支付金额 |
| | | String cashFee = resultData.getString("cash_fee"); |
| | | notifyOrderDTO.setCashFee(cashFee); |
| | | //附加数据 |
| | | String attach = resultData.getString("attach"); |
| | | notifyOrderDTO.setAttach(attach); |
| | | return notifyOrderDTO; |
| | | } |
| | | |
| | | /** |
| | | * 封装微信成功返回值 |
| | | * @return 成功返回值 |
| | | */ |
| | | private String getWxSuccessString(){ |
| | | StringBuffer buffer = new StringBuffer(); |
| | | buffer.append("<xml>"); |
| | | buffer.append("<return_code>SUCCESS</return_code>"); |
| | | buffer.append("<return_msg>OK</return_msg>"); |
| | | buffer.append("</xml>"); |
| | | return buffer.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 封装微信失败返回值 |
| | | * @return 失败返回值 |
| | | */ |
| | | private String getWxFailString(){ |
| | | StringBuffer buffer = new StringBuffer(); |
| | | buffer.append("<xml>"); |
| | | buffer.append("<return_code>FAIL</return_code>"); |
| | | buffer.append("<return_msg>FAIL</return_msg>"); |
| | | buffer.append("</xml>"); |
| | | return buffer.toString(); |
| | | } |
| | | |
| | | @GetMapping("/settle") |
| | | public R settle(String settleDate){ |
| | | return R.ok(umfPayUtil.settle(settleDate)); |
| | | } |
| | | } |