diff --git a/app.js b/app.js
new file mode 100644
index 0000000..7e7902f
--- /dev/null
+++ b/app.js
@@ -0,0 +1,136 @@
+//app.js
+var server = 'https://yy.dlsmk.cn/payapi/mobileapi';
+
+wx.$doCountdown=function(that){
+  var inter = setInterval(function () {
+    that.setData({
+      smsFlag: false,
+      sendColor: '#cccccc',
+      sendTime: that.data.snsMsgWait + 's后重发',
+      snsMsgWait: that.data.snsMsgWait - 1
+    });
+    if (that.data.snsMsgWait < 0) {
+      clearInterval(inter)
+      that.setData({
+        smsFlag: true,
+        sendColor: 'rgb(124, 255, 112)',
+        sendTime: '获取验证码',
+        snsMsgWait: 30
+
+      });
+    }
+  }.bind(that), 1000);
+}
+
+
+wx.$checkBankcard=function() {
+  var userid = wx.getStorageSync("userid");
+  if (wx.$isEmpty(userid)) {
+    wx.showModal({
+      title: '提示',
+      content: '使用该功能前请先绑卡',
+    })
+    return false;
+  }
+  return true;
+}
+
+wx.$doPost = function(url, param, callback) {
+  var token = wx.getStorageSync("token") || '';
+  var tenantid = wx.getStorageSync("tenantid") || '';
+  var auth = 'Bearer ' + token;
+  var tenantid = tenantid;
+
+  wx.request({
+    url: server + url,
+    timeout: 10000,
+    method: 'POST',
+    header: {
+      'content-type': 'application/x-www-form-urlencoded',
+      'Authorization': auth,
+      'X-TENANT-ID': tenantid
+    },
+    data: param,
+    success: function(result) {
+      console.log(result);
+      if (callback) {
+        callback(true, result)
+      }
+    },
+    fail: function(result) {
+      console.log(result);
+      var status=result.status;
+      
+      if (status && status == 401) {
+        wx.redirectTo({
+          url: '../wxlogin/wxlogin'
+        })
+      } else {
+        if (callback) {
+          callback(false, result)
+        }
+      }
+    }
+  })
+}
+
+wx.$isEmpty = function(str) {
+  if (!str || str == 'undefined' || str == null || str == '') {
+    return true;
+  }
+  return false;
+}
+
+wx.$getUUID = function(str) {
+  var d = new Date().getTime();
+  if (window.performance && typeof window.performance.now === "function") {
+    d += performance.now(); //use high-precision timer if available
+  }
+  var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+    var r = (d + Math.random() * 16) % 16 | 0;
+    d = Math.floor(d / 16);
+    return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
+  });
+  return uuid;
+}
+
+App({
+
+  onLaunch: function() {
+    // 展示本地存储能力
+    var logs = wx.getStorageSync('logs') || []
+    logs.unshift(Date.now())
+    wx.setStorageSync('logs', logs)
+
+    // 登录
+    wx.login({
+      success: res => {
+        // 发送 res.code 到后台换取 openId, sessionKey, unionId
+      }
+    })
+    // 获取用户信息
+    wx.getSetting({
+      success: res => {
+        if (res.authSetting['scope.userInfo']) {
+          // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
+          wx.getUserInfo({
+            success: res => {
+              // 可以将 res 发送给后台解码出 unionId
+              this.globalData.userInfo = res.userInfo
+
+              // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
+              // 所以此处加入 callback 以防止这种情况
+              if (this.userInfoReadyCallback) {
+                this.userInfoReadyCallback(res)
+              }
+            }
+          })
+        }
+      }
+    })
+  },
+  globalData: {
+    userInfo: null
+  }
+
+})
\ No newline at end of file
