diff --git a/src/main/java/com/demo/Interceptor.java b/src/main/java/com/demo/Interceptor.java new file mode 100644 index 0000000..2205437 --- /dev/null +++ b/src/main/java/com/demo/Interceptor.java @@ -0,0 +1,36 @@ +package com.demo; + +import com.utils.Utils; +import org.springframework.web.servlet.HandlerInterceptor; +import javax.servlet.http.*; + +public class Interceptor implements HandlerInterceptor { + @Override + public boolean preHandle( + HttpServletRequest request, + HttpServletResponse response, + Object handler) throws Exception { + + + response.setCharacterEncoding("utf-8"); + response.setContentType("text/html;charset=utf-8"); + request.setCharacterEncoding("utf-8"); + + if( + (Utils.getPeoperties("aliNotifyUrl")+"").replace("null","").trim().length()<1 + || (Utils.getPeoperties("appid")+"").replace("null","").trim().length()<1 + || (Utils.getPeoperties("private_key")+"").replace("null","").trim().length()<1 + || (Utils.getPeoperties("public_key")+"").replace("null","").trim().length()<1 + || (Utils.getPeoperties("pwd")+"").replace("null","").trim().length()<1 + || (Utils.getPeoperties("dburl")+"").replace("null","").trim().length()<1 + || (Utils.getPeoperties("dbport")+"").replace("null","").trim().length()<1 + || (Utils.getPeoperties("dbname")+"").replace("null","").trim().length()<1 + || (Utils.getPeoperties("dbusername")+"").replace("null","").trim().length()<1 + || (Utils.getPeoperties("dbpassword")+"").replace("null","").trim().length()<1 + ){ + response.sendRedirect("./install.html"); + return false; + }else return true; + + } +} diff --git a/src/main/java/com/demo/payController.java b/src/main/java/com/demo/payController.java index 1954522..ccaec59 100644 --- a/src/main/java/com/demo/payController.java +++ b/src/main/java/com/demo/payController.java @@ -141,22 +141,24 @@ public class payController { String pwd = Utils.getPeoperties("pwd") + ""; if(pwd.replace("null","").trim().length()>0){ - try { - response.sendRedirect("./settings.html"); - } catch (IOException e) { - throw new RuntimeException(e); - } - return "{\"code\":\"-1\"}"; + Map m = new HashMap<>(); + m.put("code","1"); + m.put("msg","已经初始化"); + m.put("url","./settings.html"); + return Utils.ObjectToJson(m); }else if(p.replace("null","").trim().length()>0) { Utils.setPeoperties("pwd",p); - return "{\"code\":\"1\"}"; + Map m = new HashMap<>(); + m.put("code","1"); + m.put("msg","初始化成功"); + m.put("url","./settings.html"); + return Utils.ObjectToJson(m); } - try { - response.sendRedirect("./install.html"); - } catch (IOException e) { - throw new RuntimeException(e); - } - return "{\"code\":\"-1\"}"; + + Map m = new HashMap<>(); + m.put("code","-1"); + m.put("url","./install.html"); + return Utils.ObjectToJson(m); } @RequestMapping(value = "/settings", produces = "text/html;charset=UTF-8") @@ -170,17 +172,17 @@ public class payController { String pwd = Utils.getPeoperties("pwd") + ""; if(pwd.replace("null","").trim().length()<1){ - try { - response.sendRedirect("./install.html"); - } catch (IOException e) { - throw new RuntimeException(e); - } - return "{\"code\":\"-1\"}"; + Map m = new HashMap<>(); + m.put("code","-1"); + m.put("msg","请前往初始化"); + m.put("url","./install.html"); + return Utils.ObjectToJson(m); }else if("get".equals(k)&&pwd.equals(v)){ //获取配置 Map m = new HashMap<>(); m.put("code","1"); m.put("pwd#后台密码",Utils.getPeoperties("pwd") + ""); + m.put("dburl#数据库地址(不含http)",Utils.getPeoperties("dburl")+""); m.put("dbname#数据库库名",Utils.getPeoperties("dbname")+""); m.put("dbport#数据库端口",Utils.getPeoperties("dbport")+""); m.put("dbusername#数据库用户名",Utils.getPeoperties("dbusername")+""); @@ -193,15 +195,68 @@ public class payController { }else if(pwd.equals(p)){ //k,v,写入properties - + Utils.setPeoperties(k,v); + Map m = new HashMap<>(); + m.put("code","1"); + m.put("msg","已将["+k+"]的值设置为["+v+"]"); + return Utils.ObjectToJson(m); }else{ Map m = new HashMap<>(); m.put("code","-1"); - m.put("msg","请输入后台密码"); - m.put("url","./settings"); + m.put("msg","密码不正确"); return Utils.ObjectToJson(m); } - return null; } + @RequestMapping(value = "/createTable", produces = "text/html;charset=UTF-8") + public String createTable( + HttpServletRequest request, + HttpServletResponse response + ) { + Map m = new HashMap<>(); + DBUtil db = new DBUtil(); + boolean is = db.cktable("_orders"); + if(is){ + m.put("code","-1"); + m.put("msg","表已存在"); + return Utils.ObjectToJson(m); + }else{ + String sql =""; + sql += "CREATE TABLE `_orders` ("; + sql += " `out_trade_no` bigint(255) NOT NULL COMMENT '商家订单号',"; + sql += " `trade_no` varchar(255) DEFAULT '' COMMENT '支付宝订单号',"; + sql += " `otitle` varchar(255) DEFAULT '' COMMENT '交易标题',"; + sql += " `onum` decimal(11,2) DEFAULT '0.00' COMMENT '交易金额',"; + sql += " `ostatus` int(11) DEFAULT '0' COMMENT '交易状态 0:无订单,1:等待付款,2:超时关闭,3:支付成功,4:交易结束',"; + sql += " `qrcode` varchar(255) DEFAULT '' COMMENT '二维码地址',"; + sql += " `zfbuser` varchar(255) DEFAULT '' COMMENT '买家支付宝账号(已隐藏)',"; + sql += " `paynum` decimal(11,2) DEFAULT '0.00' COMMENT '买家实付款',"; + sql += " `getnum` decimal(11,2) DEFAULT '0.00' COMMENT '实际收款',"; + sql += " `zfbuserid` varchar(255) DEFAULT '' COMMENT '支付宝用户id(16位纯数字)',"; + sql += " `buytype` int(11) DEFAULT '0' COMMENT '买家用户类型 0个人,1企业',"; + sql += " `getbody` text COMMENT '订单body',"; + sql += " `remark` varchar(255) DEFAULT NULL,"; + sql += " `payuser` varchar(255) DEFAULT '' COMMENT '对应本站用户id',"; + sql += " `payway` varchar(255) DEFAULT '' COMMENT '对应本站付款原因(可以是打赏,购买等)',"; + sql += " `paytag` varchar(255) DEFAULT '' COMMENT '绑定物品(若是购买,填写物品id)',"; + sql += " `createtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,"; + sql += " PRIMARY KEY (`out_trade_no`)"; + sql += ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"; + db.execUpdate(sql,null); + if(db.cktable("_orders")){ + m.put("code","1"); + m.put("msg","建表成功"); + return Utils.ObjectToJson(m); + }else{ + m.put("code","-1"); + m.put("msg","建表失败,请检查参数配置"); + return Utils.ObjectToJson(m); + } + + } + + } + + + } diff --git a/src/main/java/com/utils/DBUtil.java b/src/main/java/com/utils/DBUtil.java index 872a3b7..bd19988 100644 --- a/src/main/java/com/utils/DBUtil.java +++ b/src/main/java/com/utils/DBUtil.java @@ -18,7 +18,7 @@ public class DBUtil { // 四大金刚 String dname = Utils.getPeoperties("dbname")+""; String driver = "com.mysql.jdbc.Driver";// 驱动名称 - String url = "jdbc:mysql://127.0.0.1:"+Utils.getPeoperties("dbport")+"/"+dname+"?useUnicode=false&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true&autoReconnect=true&useSSL=false";// 连接 + String url = "jdbc:mysql://"+Utils.getPeoperties("dburl")+":"+Utils.getPeoperties("dbport")+"/"+dname+"?useUnicode=false&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true&autoReconnect=true&useSSL=false";// 连接 String username = Utils.getPeoperties("dbusername")+"";// 用户名 String password = Utils.getPeoperties("dbpassword")+"";// 密码 @@ -258,4 +258,27 @@ public class DBUtil { } + /** + * 检查某个表是否存在 + * @param name + * @return + */ + public boolean cktable(String name){ + boolean is = false; + try { + + this.getConnection();// 获得连接对象 + ResultSet tables = this.con.getMetaData().getTables(null, null, name, null); + if (tables.next()) is = true; + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + this.close(this.rs, this.pstmt, this.con); + } + return is; + } + + } diff --git a/src/main/java/com/utils/Utils.java b/src/main/java/com/utils/Utils.java index 8aad430..b26749c 100644 --- a/src/main/java/com/utils/Utils.java +++ b/src/main/java/com/utils/Utils.java @@ -167,6 +167,14 @@ public class Utils { public static void setPeoperties(String k,Object v){ Properties p = new Properties(); + + InputStream inputStream = Utils.class.getClassLoader().getResourceAsStream("t.properties"); + try{ + p.load(inputStream); + }catch(Exception e1) { + e1.printStackTrace(); + } + p.put(k,v); URL f = Utils.class.getClassLoader().getResource("t.properties"); diff --git a/src/main/resources/spring-mvc.xml b/src/main/resources/spring-mvc.xml index 897626b..470af4b 100644 --- a/src/main/resources/spring-mvc.xml +++ b/src/main/resources/spring-mvc.xml @@ -27,6 +27,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/install.html b/src/main/webapp/install.html index f259f9f..b95bef8 100644 --- a/src/main/webapp/install.html +++ b/src/main/webapp/install.html @@ -29,10 +29,23 @@ var p = $('#p').val(); let response = await fetch('./install?p=' + p); let res = JSON.parse(await response.text()); - if (res.code / 1 == 1) { - window.location.href = "./settings.html"; - } + + if(res.msg) alert(res.msg); + if(res.url) window.location.href = res.url; + } + + $.get("./install").done((r =>{ + let res = JSON.parse(r); + if(res.msg)alert(res.msg); + if(res.url){ + var u = res.url.substring(1); + var au = window.location.href.substring(window.location.href.length - u.length); + if(u != au) window.location.href = res.url; + } + })); + + diff --git a/src/main/webapp/settings.html b/src/main/webapp/settings.html index 7455016..efaa459 100644 --- a/src/main/webapp/settings.html +++ b/src/main/webapp/settings.html @@ -17,8 +17,42 @@


参数配置

-

输入后台密码获取配置: - --- 单个单个的参数后面跟一个修改按钮,每个按钮对应一个事件,事件用pkv传给后台,像是当面付回调地址、写上解释怎么填, API接口写一个调用示例解释一下 --- 运行建表程序 +

+
+ 输入后台密码获取配置: + +
+ +
+ 请先在你的MySql数据库中建好上述填写的数据库名,再点击此按钮
+ + +


+ 测试环境:tomcat8.5,jdk1.8 +
+
支付宝开放平台:https://open.alipay.com/ +
本人以_创建网页应用_做步骤展示: +
1.在控制台点击【网页/移动应用】创建网页移动应用(根据自己需求可以创建其他的) +
+
2.创建成功后,点击“开发设置”,设置【接口加签方式】选择“秘钥”,根据步骤提示下载"秘钥工具"安装,根据提示步骤生成秘钥,按照步骤填写公钥,下载生成的公钥文件,一定要保存好。 +
+
3.还是上步骤的“开发设置”里填写【支付宝网关地址】,此地址与下述java代码里的支付宝回调地址是一个东西,本测试代码填写的是:yourweb/war名称[根目录此项去掉]/alinotify。用户支付成功后支付宝会将成功数据发送到你填的这个网关地址上 +
+
4.在“产品绑定”页面,点击去绑定,在产品里找到"当面付",选中,点击确定。 +
+
5.在当面付“未开通”后面的!上鼠标悬浮,弹框中点击“去开通”,根据要求填写内容,不用上传营业执照,店铺招牌和店铺内景自己从百度找一张高清无水印的,写的什么名称就搜什么名称的图片,一般都能搜到同名的店,内景无所谓,只要合适就行,有能力的可以ps一下,提交审核就可以。 +
+
6.回到支付宝开放平台“网页应用”界面,将应用提交审核. + +


+ API接口说明: +
./createOrder?n=金额&t=备注 ==> 获取付款码 +
+
./queryOrder?id=生成的订单号 ==> 查询订单 +
+
./queryPay?id=生成的订单号 ==> 查询订单是否支付成功 +
+
一般通过 轮询 查询订单是否支付成功 即可实现支付成功回调. @@ -28,7 +62,61 @@ var p = $('#p').val(); let response = await fetch('./settings?k=get&v=' + p); let res = JSON.parse(await response.text()); - console.log(res); + if(res.code / 1 == 1){ + $('#kvs').empty(); + + for(var k in res){ + if(k=='code') continue; + var v = res[k]; + var ks = k.split('#'); + if(v=='null') v=''; + + var span1 = document.createElement('span'); + + var e0 = document.createElement('span'); + e0.innerHTML=ks[1]+":"; + + var e1 = document.createElement('input'); + e1.setAttribute("type","text"); + e1.setAttribute("name",ks[0]); + e1.setAttribute("id",ks[0]); + e1.setAttribute("value",v); + + var e2 = document.createElement('button'); + e2.setAttribute("onclick","setk('"+res['pwd#后台密码']+"','"+ks[0]+"')"); + e2.innerHTML = "修改"; + var e3 = document.createElement('hr'); + + span1.appendChild(e0); + span1.appendChild(e1); + span1.appendChild(e2); + span1.appendChild(e3); + + $('#kvs').append(span1); + } + + + }else{ + if(res.msg)alert(res.msg); + if(res.url) window.location.href = res.url; + } + } + + async function setk(pwd,k) { + var p = $('#'+k).val(); + let response = await fetch('./settings?p='+pwd+'&k='+k+'&v=' + p); + let res = JSON.parse(await response.text()); + if(res.code / 1 == 1){ + alert(res.msg); + }else alert(res.msg); + } + + async function createTable(){ + let response = await fetch('./createTable'); + let res = JSON.parse(await response.text()); + + if(res.msg) alert(res.msg); + if(res.url) window.location.href = res.url; }