微信扫码支付和H5支付,开箱即用

支付步骤

1获取微信签名

2发起支付

3处理回调

支付所需工具类

package com.zjy.xzlive.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.jdom.Element;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.util.*;

public class WXAllUitls {

    public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

    /**
     * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
     */
    public static String createSign(String characterEncoding, SortedMap<String, Object> parameters, String apiKey) {
        StringBuffer sb = new StringBuffer();
        Set es = parameters.entrySet();
        Iterator it = es.iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String k = (String) entry.getKey();
            Object v = entry.getValue();
            if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
                sb.append(k + "=" + v + "&");
            }
        }
        sb.append("key=" + apiKey);
        System.out.println(sb.toString());
        String sign = MD5Encode(sb.toString(), characterEncoding).toUpperCase();
        return sign;
    }

    public static String getRequestXml(SortedMap<String, 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 key = (String) entry.getKey();
            String value = (String) entry.getValue();
            if ("attach".equalsIgnoreCase(key) || "body".equalsIgnoreCase(key) || "sign".equalsIgnoreCase(key)) {
                sb.append("<" + key + ">" + "<![CDATA[" + value + "]]></" + key + ">");
            } else {
                sb.append("<" + key + ">" + value + "</" + key + ">");
            }
        }
        sb.append("</xml>");
        return sb.toString();
    }

    public static String MD5Encode(String origin, String charsetname) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (charsetname == null || "".equals(charsetname))
                resultString = byteArrayToHexString(md.digest(resultString
                        .getBytes()));
            else
                resultString = byteArrayToHexString(md.digest(resultString
                        .getBytes(charsetname)));
        } catch (Exception exception) {
        }
        return resultString;
    }

    private static String byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++)
            resultSb.append(byteToHexString(b[i]));

        return resultSb.toString();
    }

    private static String byteToHexString(byte b) {
        int n = b;
        if (n < 0)
            n += 256;
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }

    private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

    //请求方法
    public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {
        try {

            URL url = new URL(requestUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            // 设置请求方式(GET/POST)
            conn.setRequestMethod(requestMethod);
            conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
            // 当outputStr不为null时向输出流写数据
            if (null != outputStr) {
                OutputStream outputStream = conn.getOutputStream();
                // 注意编码格式
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.close();
            }
            // 从输入流读取返回内容
            InputStream inputStream = conn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String str = null;
            StringBuffer buffer = new StringBuffer();
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }
            // 释放资源
            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();
            inputStream = null;
            conn.disconnect();
            return buffer.toString();
        } catch (ConnectException ce) {
            System.out.println("连接超时:{}" + ce);
        } catch (Exception e) {
            System.out.println("https请求异常:{}" + e);
        }
        return null;
    }

    //随机字符串生成
    public static String getRandomString(int length) { //length表示生成字符串的长度
        String base = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }

    public static Map doXMLParse(String strxml) throws Exception {
        strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");

        if (null == strxml || "".equals(strxml)) {
            return null;
        }

        Map m = new HashMap();

        InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
        SAXBuilder builder = new SAXBuilder();
        Document doc = builder.build(in);
        Element root = doc.getRootElement();
        List list = root.getChildren();
        Iterator it = list.iterator();
        while (it.hasNext()) {
            Element e = (Element) it.next();
            String k = e.getName();
            String v = "";
            List children = e.getChildren();
            if (children.isEmpty()) {
                v = e.getTextNormalize();
            } else {
                v = getChildrenText(children);
            }

            m.put(k, v);
        }

        //关闭流
        in.close();

        return m;
    }

    public static String getChildrenText(List children) {
        StringBuffer sb = new StringBuffer();
        if (!children.isEmpty()) {
            Iterator it = children.iterator();
            while (it.hasNext()) {
                Element e = (Element) it.next();
                String name = e.getName();
                String value = e.getTextNormalize();
                List list = e.getChildren();
                sb.append("<" + name + ">");
                if (!list.isEmpty()) {
                    sb.append(getChildrenText(list));
                }
                sb.append(value);
                sb.append("</" + name + ">");
            }
        }

        return sb.toString();
    }

    /**
     * XML格式字符串转换为Map
     *
     * @param strXML XML字符串
     * @return XML数据转换后的Map
     * @throws Exception
     */
    public static Map<String, String> xmlToMap(String strXML) throws Exception {
        Map<String, String> data = new HashMap<String, String>();
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder();
        InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8"));
        org.w3c.dom.Document doc = documentBuilder.parse(stream);
        doc.getDocumentElement().normalize();
        NodeList nodeList = doc.getDocumentElement().getChildNodes();
        for (int idx=0; idx<nodeList.getLength(); ++idx) {
            Node node = nodeList.item(idx);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                org.w3c.dom.Element element = (org.w3c.dom.Element) node;
                data.put(element.getNodeName(), element.getTextContent());
            }
        }
        try {
            stream.close();
        }
        catch (Exception ex) {

        }
        return data;
    }

    public static String generateString(int length) {
        StringBuffer sb = new StringBuffer();
        Random random = new Random();
        for (int i = 0; i < length; i++) {
            sb.append(allChar.charAt(random.nextInt(allChar.length())));
        }
        return sb.toString();
    }

    public static JSONObject httpsRequestALiYun(String url){
        URL uri = null;
        JSONObject result = null;
        try {
            uri = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
            conn.connect();
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String lines = "";
            while ((lines = reader.readLine()) != null) {
                result = JSON.parseObject(lines);
            }
            reader.close();
            conn.disconnect();
        }catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }

    public static String querySjNum(){
        String a = "0123456789abcdefghijklmnopqrstuvwxyz";
        String sjNumber="";
        char[] rands = new char[32];
        for (int i = 0; i < rands.length; i++)
        {
            int rand = (int) (Math.random() * a.length());
            rands[i] = a.charAt(rand);
        }
        for(int i=0;i<rands.length;i++){
            sjNumber += rands[i];
        }
        return sjNumber;
    }


}

微信扫码支付和H5的签名

    //获取微信sign--H5支付
    public String querySignH5(PayWechat payWechat,String price,String ip,String WXNonceStr,String WXOutTradeNo){
        String sign = "";
        SortedMap<String, Object> mapSign = new TreeMap<>();
        mapSign.put("appid", payWechat.getAppid());
        mapSign.put("mch_id", payWechat.getMchId());
        mapSign.put("nonce_str", WXNonceStr);
        mapSign.put("body", WXBody);
        mapSign.put("out_trade_no", WXOutTradeNo);
        mapSign.put("total_fee", price);
        mapSign.put("spbill_create_ip", ip);
        mapSign.put("notify_url", WXNotifyUrl);
        mapSign.put("trade_type", trade_type_H5);
        sign = WXAllUitls.createSign("UTF-8", mapSign, payWechat.getApiKey());
        return sign;
    }

    //获取微信sign--扫码支付
    public String querySignSaoma(PayWechat payWechat,String price,String ip,String WXNonceStr,String WXOutTradeNo){
        String sign = "";
        SortedMap<String, Object> mapSign = new TreeMap<>();
        mapSign.put("appid", payWechat.getAppid());
        mapSign.put("mch_id", payWechat.getMchId());
        mapSign.put("nonce_str", WXNonceStr);
        mapSign.put("body", WXBody);
        mapSign.put("out_trade_no", WXOutTradeNo);
        mapSign.put("total_fee", price);
        mapSign.put("spbill_create_ip", ip);
        mapSign.put("notify_url", WXNotifyUrl);
        mapSign.put("trade_type", trade_type_SM);
        sign = WXAllUitls.createSign("UTF-8", mapSign, payWechat.getApiKey());
        return sign;
    }

//获取公网ip,注意格式
    public static String getPublicIp() {
        try {
            String path = "http://2018.ip138.com/ic.asp";// 要获得html页面内容的地址
            //String path = "https://www.jiatui.com/new/js/city-picker.data.js";
            URL url = new URL(path);//
            // 创建url对象

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 打开连接

            conn.setRequestProperty("contentType", "GBK"); // 设置url中文参数编码

            conn.setConnectTimeout(5 * 1000);// 请求的时间

            conn.setRequestMethod("GET");// 请求方式

            InputStream inStream = conn.getInputStream();
            // readLesoSysXML(inStream);

            BufferedReader in = new BufferedReader(new InputStreamReader(
                    inStream, "GBK"));
            StringBuffer buffer = new StringBuffer();
            String line = "";
            // 读取获取到内容的最后一行,写入
            while ((line = in.readLine()) != null) {
                buffer.append(line);
            }
            String str = buffer.toString();
            Document doc = Jsoup.parse(str);
            Elements e = doc.select("center");
//            System.out.println("str======"+str);
//            String ipString1 = str.substring(str.indexOf("您的IP是:["));
//            // 获取你的IP是中间的[182.149.82.50]内容
//            String ipsString2 = ipString1.substring(ipString1.indexOf("[") + 1,
//                    ipString1.lastIndexOf("]"));
//            //获取当前IP地址所在地址
//			String ipsString3=ipString1.substring(ipString1.indexOf(": "),ipString1.lastIndexOf("</center>"));
//			System.err.println(ipsString3);

            // 返回公网IP值
            return e.text();

        } catch (Exception e) {
            System.out.println("获取公网IP连接超时");
            return "";
        }
    }

发起支付
 

    @ResponseBody
    @RequestMapping("/sendWXpay")
    public WXPayDto sendWXpay(String userGid, String price, String type, String loginName){
        WXPayDto wXPayDto = new WXPayDto();
        wXPayDto.setUserGid(userGid);
        Double money = 0.0;
        String code_url = null;
        String ip = PublicInterIp.getPublicIp();
        int first = ip.lastIndexOf("[");
        int last = ip.lastIndexOf("]");
        ip = ip.substring(first+1,last);
        String WXNonceStr = WXAllUitls.getRandomString(32);
        wXPayDto.setWXNonceStr(WXNonceStr);
        String WXOutTradeNo =String.valueOf(System.currentTimeMillis());
        wXPayDto.setWXOutTradeNo(WXOutTradeNo);
        SortedMap<String, Object> mapSign = new TreeMap<String, Object>();
        PayWechat payWechat = payWechatService.selectByPrimaryKey();
        mapSign.put("appid", payWechat.getAppid());
        mapSign.put("mch_id", payWechat.getMchId());
        mapSign.put("nonce_str", WXNonceStr);
        mapSign.put("body", WXBody);
        mapSign.put("out_trade_no", WXOutTradeNo);//订单号(我方)
        mapSign.put("total_fee", price);
        mapSign.put("spbill_create_ip", ip);
        mapSign.put("notify_url", WXNotifyUrl);
        if(type.equals("1")){//扫码支付
            String sign = querySignSaoma(payWechat,price,ip,WXNonceStr,WXOutTradeNo);
            mapSign.put("trade_type", trade_type_SM);
            mapSign.put("sign",sign);
            String requestXML = WXAllUitls.getRequestXml(mapSign);
            System.out.println(requestXML);
            String result = WXAllUitls.httpsRequest(WXPayUrl, "POST", requestXML);
            System.out.println(result);
            Map<String, String> map = new HashMap<>();
            try {
                map = WXAllUitls.doXMLParse(result);
                String return_code = map.get("return_code");
                if (return_code.contains("SUCCESS")) {
                    code_url = map.get("code_url");//获取到code_url
                    code_url = imgUrl(code_url,userGid);
                    wXPayDto.setCodeUrl(code_url);
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
            }
        }else{//H5支付
            String sign = querySignH5(payWechat,price,ip,WXNonceStr,WXOutTradeNo);
            mapSign.put("trade_type", trade_type_H5);
            mapSign.put("sign",sign);//scene_info
            //mapSign.put("scene_info",scene_info);
            String requestXML = WXAllUitls.getRequestXml(mapSign);
            System.out.println(requestXML);
            String result = WXAllUitls.httpsRequest(WXPayUrl, "POST", requestXML);
            System.out.println(result);
            Map<String, String> map = new HashMap<>();
            try {
                map = WXAllUitls.doXMLParse(result);
                String return_code = map.get("return_code");
                if (return_code.contains("SUCCESS")) {
                    code_url = map.get("mweb_url");//获取到mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟
                    wXPayDto.setCodeUrl(code_url);
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
            }

        }
         //处理业务信息
       return null;

    }

回调
推荐一个内网穿透地址https://www.ngrok.cc/
 

    //支付完成回调
    @RequestMapping("/WXCallBack")
    public String payReturnRequest(HttpServletRequest request,HttpServletResponse response){
        System.out.println("进入回调");
        String tradState = "";
        String xmlString = "";
        String resXml = "";
        try {
            xmlString = getXmlString(request);
            System.out.println("微信返回的回调结果是:::::::" + xmlString);
            // 先解析返回的数据
            Map<String, String> dataMap = WXAllUitls.xmlToMap(xmlString);
            String returnCode = dataMap.get("return_code");//返回码
            String outTradeNo = dataMap.get("out_trade_no");//商户订单号
            String transactionId = dataMap.get("transaction_id");//微信支付订单号
            String nonceStr = dataMap.get("nonce_str");//随机字符串

            //

            //查询微信订单号状态 tradState
            // SUCCESS—支付成功
            //
            //REFUND—转入退款
            //
            //NOTPAY—未支付
            //
            //CLOSED—已关闭
            //
            //REVOKED—已撤销(刷卡支付)
            //
            //USERPAYING--用户支付中
            //
            //PAYERROR--支付失败(其他原因,如银行返回失败)
            tradState = setQueryWXOrderInfo(userGid, outTradeNo,nonceStr);
            System.out.println("该微信订单号状态:"+tradState);
            // 通知微信闭嘴,交易完成无需回调
            if("SUCCESS".equals(returnCode)){
                resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
                        + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
                //处理业务
            }else{
                resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"
                        + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> ";
                //处理业务
            }
            BufferedOutputStream out = new BufferedOutputStream(
                    response.getOutputStream());
            out.write(resXml.getBytes());
            out.flush();
            out.close();

        }catch (Exception e){
            e.printStackTrace();
        }

        return tradState;
    }

//查询订单状态
    @RequestMapping("/taskQueryOrderStatu")
    public String setQueryWXOrderInfo(String gid,String WXOutTradeNo,String WXNonceStr){
        String path = ServiceImgUrl+gid+".jpg";
        String trade_state = "";
        SortedMap<String, Object> mapSign = new TreeMap<String, Object>();
        PayWechat payWechat = payWechatService.selectByPrimaryKey();
        mapSign.put("appid", payWechat.getAppid());
        mapSign.put("mch_id", payWechat.getMchId());
        mapSign.put("nonce_str", WXNonceStr);
        mapSign.put("out_trade_no", WXOutTradeNo);//订单号
        String sign = WXAllUitls.createSign("UTF-8", mapSign, payWechat.getApiKey());
        mapSign.put("sign",sign);
        String requestXML = WXAllUitls.getRequestXml(mapSign);
        String result = WXAllUitls.httpsRequest(queryWXOrderInfo, "POST", requestXML);
        System.out.println(result);
        Map<String, String> map = new HashMap<>();
        try {
            map = WXAllUitls.doXMLParse(result);
            String return_code = map.get("return_code");
            if (return_code.contains("SUCCESS")) {
                trade_state = map.get("trade_state");//获取到code_url
                File file = new File(path);
                if(file.exists()){
                    file.delete();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
        }
        return trade_state;
    }

二维码图片使用流返回即可

pom.xml
 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.zjy</groupId>
	<artifactId>xzlive</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>xzlive</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.7</java.version>
		<swagger.version>2.7.0</swagger.version>
		<google.guava>18.0</google.guava>
		<fastjson.version>1.2.47</fastjson.version>
		<poi.version>3.17</poi.version>
		<jwt.version>0.9.0</jwt.version>
		<mybatis.version>1.3.2</mybatis.version>
	</properties>

	<dependencies>
		<!-- web-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.11.3</version>
		</dependency>

		<dependency>
			<groupId>com.qiniu</groupId>
			<artifactId>qiniu-java-sdk</artifactId>
			<version>[7.0.9]</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.5</version>
		</dependency>

		<dependency>
			<groupId>net.glxn.qrgen</groupId>
			<artifactId>javase</artifactId>
			<version>2.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- 支付宝即时到账接口 -->
		<dependency>
			<groupId>com.pentahohub.nexus</groupId>
			<artifactId>alipay-sdk-java</artifactId>
			<version>20150820220052</version>
		</dependency>

		<dependency>
			<groupId>org.jdom</groupId>
			<artifactId>jdom</artifactId>
			<version>1.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.3</version>
		</dependency>

		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>${google.guava}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.8</version>
		</dependency>

		<!-- <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId>
			</dependency> -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>commons-httpclient</groupId>
			<artifactId>commons-httpclient</artifactId>
			<version>3.1</version>
		</dependency>
		<!--<dependency>-->
		<!--<groupId>org.springframework.boot</groupId>-->
		<!--<artifactId>spring-boot-starter-security</artifactId>-->
		<!--</dependency>-->
		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-jexl -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-jexl</artifactId>
			<version>2.1.1</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>${mybatis.version}</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>${swagger.version}</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-bean-validators</artifactId>
			<version>${swagger.version}</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>${swagger.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>${poi.version}</version>
		</dependency>
		<dependency>
			<groupId>io.jsonwebtoken</groupId>
			<artifactId>jjwt</artifactId>
			<version>${jwt.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.41</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.2.5</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-mongodb</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.5</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
		</plugins>
	</build>


</project>

猜你喜欢

转载自blog.csdn.net/qq_38108719/article/details/84566438
今日推荐