Просмотр исходного кода

[支付回调][修复]:支付回调处理返回

release_toaliyun_real
Stormeye.Wu 7 лет назад
Родитель
Сommit
1ac9a4c11e
3 измененных файлов: 99 добавлений и 13 удалений
  1. +1
    -0
      mallinkAdmin/src/main/java/com/simple/config/ShiroConfig.java
  2. +27
    -13
      mallinkAdmin/src/main/java/com/simple/controller/WxPayController.java
  3. +71
    -0
      mallinkService/src/main/java/com/simple/utils/XmlUtil.java

+ 1
- 0
mallinkAdmin/src/main/java/com/simple/config/ShiroConfig.java Просмотреть файл

@@ -117,6 +117,7 @@ public class ShiroConfig {
// } // }
// } // }
filterChainDefinitionMap.put("/swagger-ui.html","anon"); filterChainDefinitionMap.put("/swagger-ui.html","anon");
filterChainDefinitionMap.put("/WxPay/notify/**", "anon");
filterChainDefinitionMap.put("/v2/**","anon"); filterChainDefinitionMap.put("/v2/**","anon");
filterChainDefinitionMap.put("/swagger-resources/**","anon"); filterChainDefinitionMap.put("/swagger-resources/**","anon");
filterChainDefinitionMap.put("/webjars/**","anon"); filterChainDefinitionMap.put("/webjars/**","anon");


+ 27
- 13
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.nio.charset.Charset;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;


@RestController @RestController
@RequestMapping("/WxPay/notify") @RequestMapping("/WxPay/notify")
@@ -34,35 +36,47 @@ public class WxPayController extends BaseController {
* @return 接收微信异步通知 * @return 接收微信异步通知
* @throws Exception 可能产生的任何异常 * @throws Exception 可能产生的任何异常
*/ */
@RequestMapping(value = "/pay", method = RequestMethod.POST)
@RequestMapping(value = "/pay")
public String _payNotify(HttpServletRequest request) throws Exception { public String _payNotify(HttpServletRequest request) throws Exception {

Map<String, String> paramMap = null; Map<String, String> paramMap = null;
String response;
try { try {
String xml = IOUtils.toString(request.getInputStream(), Charset.forName("UTF-8")); String xml = IOUtils.toString(request.getInputStream(), Charset.forName("UTF-8"));
paramMap = WxPayment.xmlToMap(xml); paramMap = WxPayment.xmlToMap(xml);
logger.info("payment wxpay, notify, param: " + paramMap.toString() ); 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()); logger.info("payment wxpay, notify success, req : " + paramMap.toString() + ", resp: " + response.toString());
return response; return response;
} catch (BizMessageException e) { } catch (BizMessageException e) {
logger.error("payment wxpay, notify error, req: " + paramMap.toString() + ", e:" + e.getLocalizedMessage());
Map<String, String> 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_code", "FAIL");
resultMap.put("return_msg", e.getMessage()); resultMap.put("return_msg", e.getMessage());
return XmlUtil.parseDto2Xml(resultMap, "");
return XmlUtil.getRequestXml(resultMap);
} catch (MallinkException e) { } catch (MallinkException e) {
logger.error("payment wxpay, notify error, req: " + paramMap.toString() + ", e:" +e.getLocalizedMessage());
Map<String, String> 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_code", "FAIL");
resultMap.put("return_msg", e.getMessage()); resultMap.put("return_msg", e.getMessage());
return XmlUtil.parseDto2Xml(resultMap, "");
return XmlUtil.getRequestXml(resultMap);
} catch (Exception e) { } catch (Exception e) {
logger.error("payment wxpay, order create error, req: " + paramMap.toString() + ", e: " + e.getMessage());
Map<String, String> 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_code", "FAIL");
resultMap.put("return_msg", e.getMessage()); resultMap.put("return_msg", e.getMessage());
return XmlUtil.parseDto2Xml(resultMap, "");
return XmlUtil.getRequestXml(resultMap);
} }
} }


@@ -72,7 +86,7 @@ public class WxPayController extends BaseController {
* @return 接收微信退款异步通知 * @return 接收微信退款异步通知
* @throws Exception 可能产生的任何异常 * @throws Exception 可能产生的任何异常
*/ */
@RequestMapping(value = "/refund", method = RequestMethod.POST)
@RequestMapping(value = "/refund")
public String __refundNotify(HttpServletRequest request) throws Exception { public String __refundNotify(HttpServletRequest request) throws Exception {
Map<String, String> paramMap = null; Map<String, String> paramMap = null;
String response; String response;


+ 71
- 0
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.*;
import org.dom4j.tree.DefaultElement; 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.*; import java.util.*;


/** /**
@@ -385,4 +393,67 @@ public final class XmlUtil {
return map; return map;
} }


/**
* 将Map转换为XML格式的字符串
*
* @param data Map类型数据
* @return XML格式的字符串
* @throws Exception
*/
public static String mapToXml(Map<String, String> 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<Object,Object> 集合转化成 xml格式
*/
public static String getRequestXml(SortedMap<Object,Object> parameters){
StringBuffer sb = new StringBuffer();
sb.append("<xml>");
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+">"+"<![CDATA["+v+"]]></"+k+">");
}else {
sb.append("<"+k+">"+v+"</"+k+">");
}
}
sb.append("</xml>");
return sb.toString();
}

} }

Загрузка…
Отмена
Сохранить