diff --git a/pages/index/index.js b/pages/index/index.js
index aec3f72..ceb267b 100644
--- a/pages/index/index.js
+++ b/pages/index/index.js
@@ -129,30 +129,16 @@
     })
   },
   doScan: function() {
-    var check = wx.$checkBankcard();
-    if (!check) {
+    // var check = wx.$checkBankcard();
+    // if (!check) {
     
-      return;
-    }
+    //   return;
+    // }
 
     wx.scanCode({
       success(ret) {
         console.log(ret);
-
         var url = ret.result;
-       
-
-        if (url.indexOf("yy.dlsmk.cn") >= 0) {
-          if (url.indexOf("?") > 0) {
-            url = url + '&userid=' + userid;
-          } else {
-            url = url + '?userid=' + userid;
-          }
-          wx.setStorageSync('trueurl', url);
-          wx.navigateTo({
-            url: '../scan2/scan2'
-          })
-        }
         wx.setStorageSync('scanurl', url);
         console.log(url);
         wx.navigateTo({
diff --git a/pages/scan/scan.js b/pages/scan/scan.js
index ba210b1..f3f47fb 100644
--- a/pages/scan/scan.js
+++ b/pages/scan/scan.js
@@ -14,15 +14,50 @@
    */
   onLoad: function(options) {
     var url = wx.getStorageSync("scanurl");
-    this.setData({
-      scanurl:url
-    })
+    var userid = wx.getStorageSync("userid");
+    // this.setData({
+    //   scanurl:url
+    // })
+    var that=this;
+    if (url.indexOf("dwz.cn") >= 0){
+      console.log('init here');
+      wx.request({
+        url: url,
+        method: 'GET',
+        success: function (res) {
+          var model = res.data;
+          var index = model.indexOf('retcobillno');
+          var index2 = model.indexOf(';');
+          var rowbillno = model.substring(index, index2);
+          var billno = rowbillno.substring(rowbillno.indexOf('=') + 1);
+          var url = 'https://yy.dlsmk.cn/water/api/device/qrcode/pretend?cobillno=' + billno + '&userid=' + userid;
 
+          wx.setStorageSync("trueurl", url);
+          wx.navigateTo({
+            url: '../scan2/scan2',
+          })
+        }
+      })
+    } else{
+      console.log('init there');
+      if (url.indexOf("?") > 0){
+        url = url + '&userid=' + userid;
+      }else{
+        url = url + '?userid=' + userid;
+      }
+      console.log(url);
+      this.setData({
+       scanurl:url
+     })
+    }
   },
 
   getTrueUrl: function(res) {
     console.log(res.detail.src);
     var url = res.detail.src;
+    if (url.indexOf("pretend") < 0){
+      return;
+    }
     if (url.indexOf("yy.dlsmk.cn") >= 0) {
       console.log("succ");
       var userid = wx.getStorageSync("userid");
diff --git a/pages/scan/scan.wxml b/pages/scan/scan.wxml
index 0051e08..424bc07 100644
--- a/pages/scan/scan.wxml
+++ b/pages/scan/scan.wxml
@@ -1,4 +1,3 @@
-<!--pages/scan/scan.wxml-->
-
-
-  <web-view src='{{scanurl}}' bindload='getTrueUrl'></web-view>
+<view>
+<web-view src='{{scanurl}}' bindload='getTrueUrl' ></web-view>
+</view>
\ No newline at end of file
