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;
+ }
+ }));
+
+
参数配置
-
输入后台密码获取配置:
- --- 单个单个的参数后面跟一个修改按钮,每个按钮对应一个事件,事件用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;
}