From 1ac9a4c11efb292fc983c7fab19112265b30ccde Mon Sep 17 00:00:00 2001 From: "Stormeye.Wu" Date: Sat, 18 Aug 2018 12:05:49 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83][?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D]:=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E5=A4=84=E7=90=86=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/simple/config/ShiroConfig.java | 1 + .../simple/controller/WxPayController.java | 40 +++++++---- .../main/java/com/simple/utils/XmlUtil.java | 71 +++++++++++++++++++ 3 files changed, 99 insertions(+), 13 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/simple/config/ShiroConfig.java b/mallinkAdmin/src/main/java/com/simple/config/ShiroConfig.java index fc9b10ced..358a9af97 100644 --- a/mallinkAdmin/src/main/java/com/simple/config/ShiroConfig.java +++ b/mallinkAdmin/src/main/java/com/simple/config/ShiroConfig.java @@ -117,6 +117,7 @@ public class ShiroConfig { // } // } filterChainDefinitionMap.put("/swagger-ui.html","anon"); + filterChainDefinitionMap.put("/WxPay/notify/**", "anon"); filterChainDefinitionMap.put("/v2/**","anon"); filterChainDefinitionMap.put("/swagger-resources/**","anon"); filterChainDefinitionMap.put("/webjars/**","anon"); diff --git a/mallinkAdmin/src/main/java/com/simple/controller/WxPayController.java b/mallinkAdmin/src/main/java/com/simple/controller/WxPayController.java index d4ff6e902..6c515655f 100644 --- a/mallinkAdmin/src/main/java/com/simple/controller/WxPayController.java +++ b/mallinkAdmin/src/main/java/com/simple/controller/WxPayController.java @@ -16,6 +16,8 @@ import javax.servlet.http.HttpServletRequest; import java.nio.charset.Charset; import java.util.LinkedHashMap; import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; @RestController @RequestMapping("/WxPay/notify") @@ -34,35 +36,47 @@ public class WxPayController extends BaseController { * @return 接收微信异步通知 * @throws Exception 可能产生的任何异常 */ - @RequestMapping(value = "/pay", method = RequestMethod.POST) + @RequestMapping(value = "/pay") public String _payNotify(HttpServletRequest request) throws Exception { + Map paramMap = null; - String response; try { String xml = IOUtils.toString(request.getInputStream(), Charset.forName("UTF-8")); paramMap = WxPayment.xmlToMap(xml); logger.info("payment wxpay, notify, param: " + paramMap.toString() ); - response = wxPayOrderService.notify(paramMap, EnumPayWay.PAY_WAY_WEAPP); + String response = wxPayOrderService.notify(paramMap, EnumPayWay.PAY_WAY_WEAPP); logger.info("payment wxpay, notify success, req : " + paramMap.toString() + ", resp: " + response.toString()); return response; } catch (BizMessageException e) { - logger.error("payment wxpay, notify error, req: " + paramMap.toString() + ", e:" + e.getLocalizedMessage()); - Map resultMap = new LinkedHashMap<>(); + if (paramMap == null) { + logger.error("payment wxpay, order create error, e: " + e.getMessage()); + } else { + logger.error("payment wxpay, order create error, req: " + paramMap.toString() + ", e: " + e.getMessage()); + } + SortedMap resultMap = new TreeMap<>(); resultMap.put("return_code", "FAIL"); resultMap.put("return_msg", e.getMessage()); - return XmlUtil.parseDto2Xml(resultMap, ""); + return XmlUtil.getRequestXml(resultMap); } catch (MallinkException e) { - logger.error("payment wxpay, notify error, req: " + paramMap.toString() + ", e:" +e.getLocalizedMessage()); - Map resultMap = new LinkedHashMap<>(); + if (paramMap == null) { + logger.error("payment wxpay, order create error, e: " + e.getMessage()); + } else { + logger.error("payment wxpay, order create error, req: " + paramMap.toString() + ", e: " + e.getMessage()); + } + SortedMap resultMap = new TreeMap<>(); resultMap.put("return_code", "FAIL"); resultMap.put("return_msg", e.getMessage()); - return XmlUtil.parseDto2Xml(resultMap, ""); + return XmlUtil.getRequestXml(resultMap); } catch (Exception e) { - logger.error("payment wxpay, order create error, req: " + paramMap.toString() + ", e: " + e.getMessage()); - Map resultMap = new LinkedHashMap<>(); + if (paramMap == null) { + logger.error("payment wxpay, order create error, e: " + e.getMessage()); + } else { + logger.error("payment wxpay, order create error, req: " + paramMap.toString() + ", e: " + e.getMessage()); + } + SortedMap resultMap = new TreeMap(); resultMap.put("return_code", "FAIL"); resultMap.put("return_msg", e.getMessage()); - return XmlUtil.parseDto2Xml(resultMap, ""); + return XmlUtil.getRequestXml(resultMap); } } @@ -72,7 +86,7 @@ public class WxPayController extends BaseController { * @return 接收微信退款异步通知 * @throws Exception 可能产生的任何异常 */ - @RequestMapping(value = "/refund", method = RequestMethod.POST) + @RequestMapping(value = "/refund") public String __refundNotify(HttpServletRequest request) throws Exception { Map paramMap = null; String response; diff --git a/mallinkService/src/main/java/com/simple/utils/XmlUtil.java b/mallinkService/src/main/java/com/simple/utils/XmlUtil.java index d816f4f52..308214dee 100644 --- a/mallinkService/src/main/java/com/simple/utils/XmlUtil.java +++ b/mallinkService/src/main/java/com/simple/utils/XmlUtil.java @@ -5,6 +5,14 @@ import org.apache.commons.logging.LogFactory; import org.dom4j.*; import org.dom4j.tree.DefaultElement; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.StringWriter; import java.util.*; /** @@ -385,4 +393,67 @@ public final class XmlUtil { return map; } + /** + * 将Map转换为XML格式的字符串 + * + * @param data Map类型数据 + * @return XML格式的字符串 + * @throws Exception + */ + public static String mapToXml(Map data) throws Exception { + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder(); + org.w3c.dom.Document document = documentBuilder.newDocument(); + org.w3c.dom.Element root = document.createElement("xml"); + document.appendChild(root); + for (String key: data.keySet()) { + String value = data.get(key); + if (value == null) { + value = ""; + } + value = value.trim(); + org.w3c.dom.Element filed = document.createElement(key); + filed.appendChild(document.createTextNode(value)); + root.appendChild(filed); + } + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = tf.newTransformer(); + DOMSource source = new DOMSource(document); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + transformer.transform(source, result); + String output = writer.getBuffer().toString(); //.replaceAll("\n|\r", ""); + try { + writer.close(); + } + catch (Exception ex) { + } + return output; + } + + /* + * 将SortedMap 集合转化成 xml格式 + */ + public static String getRequestXml(SortedMap parameters){ + StringBuffer sb = new StringBuffer(); + sb.append(""); + Set es = parameters.entrySet(); + Iterator it = es.iterator(); + while(it.hasNext()) { + Map.Entry entry = (Map.Entry)it.next(); + String k = (String)entry.getKey(); + String v = (String)entry.getValue(); + if ("attach".equalsIgnoreCase(k)||"body".equalsIgnoreCase(k)||"sign".equalsIgnoreCase(k)|| + "return_code".equalsIgnoreCase(k)||"return_msg".equalsIgnoreCase(k)) { + sb.append("<"+k+">"+""); + }else { + sb.append("<"+k+">"+v+""); + } + } + sb.append(""); + return sb.toString(); + } + } \ No newline at end of file