250 lines
8.4 KiB
JavaScript
250 lines
8.4 KiB
JavaScript
import { fetchData, stsFailContent } from '../utils/index';
|
||
let wifiConfigTimer = null;
|
||
let wifiConnectTimer = null;
|
||
|
||
class WeChat_EConnectWifi {
|
||
constructor(params) {
|
||
this.params = params;
|
||
// const { accessToken, deviceSerial, validateCode, customId } = params;
|
||
}
|
||
|
||
// 扫描二维码
|
||
scanDevice(accessToken) {
|
||
wx.scanCode({
|
||
success (res) {
|
||
console.log('扫描结果',res)
|
||
const result = res.result;
|
||
console.log(result);
|
||
const temp = result.split('\r');
|
||
console.log('temp', temp);
|
||
if (temp && temp.length > 0) {
|
||
// const res = temp[0];
|
||
const deviceSerial = temp[1];
|
||
const validateCode = temp[2];
|
||
console.log(temp, deviceSerial, validateCode);
|
||
wx.setStorage({
|
||
key: 'deviceSerial',
|
||
data: deviceSerial
|
||
});
|
||
|
||
wx.setStorage({
|
||
key: 'validateCode',
|
||
data: validateCode
|
||
});
|
||
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
searchDeviceInfo = (accessToken = '', deviceSerial = '') => {
|
||
const promise = new Promise((resolve, reject) => {
|
||
if (!accessToken || !deviceSerial) {
|
||
reject('searchDeviceInfo:fail:params error');
|
||
}
|
||
fetchData('/api/v3/device/searchDeviceInfo', '', {accessToken, deviceSerial}, 'POST' ,(res) => {
|
||
|
||
if (res) {
|
||
resolve(res);
|
||
} else {
|
||
reject('searchDeviceInfo:fail:request fail')
|
||
}
|
||
}, (err) => {
|
||
reject('searchDeviceInfo:fail:network error')
|
||
});
|
||
});
|
||
|
||
return promise
|
||
}
|
||
|
||
connectWifi = (deviceSerial = '', validateCode = '', accessToken = '', BSSID, SSID, wifiPassword) => {
|
||
const promise = new Promise((resolve, reject) => {
|
||
if (!accessToken || !deviceSerial || !validateCode || !BSSID || !SSID || !wifiPassword) {
|
||
reject('connectWifi:fail:params error');
|
||
}
|
||
|
||
const deviceSSID = 'SoftAP_' + deviceSerial;
|
||
const devicePassword = 'SoftAP_' + validateCode;
|
||
wx.startWifi({
|
||
success (res) {
|
||
console.log(res.errMsg);
|
||
wx.connectWifi({
|
||
SSID: deviceSSID,
|
||
password: devicePassword,
|
||
success (res) {
|
||
console.log('connectWifi success:', res);
|
||
if (res.errCode == 0 || res.errMsg == 'connectWifi:ok') {
|
||
|
||
// 兼容不同机型,有些机型可以通过onWifiConnected识别是否连上目标wifi,有些机型不可以,因此设置定时器
|
||
let timer = setTimeout(() => {
|
||
console.log('超时调用');
|
||
wifiConfig(SSID, BSSID, wifiPassword,accessToken);
|
||
clearTimeout(timer);
|
||
// 如果设备超时无响应将重试一次
|
||
// 存在设备超时无响应,此时将再次发送请求
|
||
let wifiConfigTimer = setTimeout(() => {
|
||
wifiConfig(SSID, BSSID, wifiPassword,accessToken);
|
||
clearTimeout(wifiConfigTimer);
|
||
}, 30000);
|
||
|
||
// 设置第二次超时时间,仍超时,则默认跳转至配置失败页面
|
||
// 设置响应超时时间为60s
|
||
wifiConnectTimer = setTimeout(() => {
|
||
clearTimeout(wifiConnectTimer);
|
||
|
||
reject('connectWifi:fail:connect deviceNetwork fail')
|
||
}, 31000);
|
||
|
||
}, 3000);
|
||
|
||
// 判断是否连接上目标网络
|
||
wx.onWifiConnected((result) => {
|
||
console.log('onWifiConnected',result.wifi.SSID);
|
||
if (deviceSSID === result.wifi.SSID) {
|
||
wifiConfig(SSID, BSSID, wifiPassword,accessToken);
|
||
clearTimeout(timer);
|
||
// 如果设备超时无响应将重试一次
|
||
// 存在设备超时无响应,此时将再次发送请求
|
||
let wifiConfigTimer = setTimeout(() => {
|
||
wifiConfig(SSID, BSSID, wifiPassword,accessToken);
|
||
clearTimeout(wifiConfigTimer);
|
||
|
||
}, 30000);
|
||
|
||
// 设置第二次超时时间,仍超时,则默认跳转至配置失败页面
|
||
// 设置响应超时时间为30s
|
||
wifiConnectTimer = setTimeout(() => {
|
||
clearTimeout(wifiConnectTimer);
|
||
|
||
reject('connectWifi:fail:connect deviceNetwork fail')
|
||
}, 31000);
|
||
}
|
||
});
|
||
|
||
}
|
||
},
|
||
fail(err) {
|
||
console.log(err);
|
||
// that.setData({
|
||
// pageLoading: false
|
||
// });
|
||
console.log('wifi connect fail');
|
||
// wx.navigateTo({
|
||
// url: '/packageD/pages/connectWifiFail/index?accessToken='+accessToken+'&validateCode='+validateCode+'&deviceSerial='+deviceSerial,
|
||
// })
|
||
reject('connectWifi:fail:connect deviceNetwork fail')
|
||
}
|
||
})
|
||
}
|
||
});
|
||
|
||
const wifiConfig = (SSID, BSSID, wifiPassword,accessToken) => {
|
||
|
||
console.log('正在给设备配置wifi');
|
||
|
||
wx.request({
|
||
url: 'http://192.168.8.1:8682/PreNetwork/WifiConfig',
|
||
method: 'PUT',
|
||
data: {
|
||
areaCode:"",
|
||
token: accessToken,
|
||
lbs_domain: 'open.ys7.com',
|
||
wifi_info:{
|
||
"bssid": BSSID,
|
||
"ssid": SSID,
|
||
"password":wifiPassword
|
||
},
|
||
token: ''
|
||
},
|
||
header: {
|
||
'content-type': 'text/plain'
|
||
},
|
||
success:(res) =>{
|
||
console.log('wifiConfig success:',res);
|
||
clearTimeout(wifiConfigTimer);
|
||
clearTimeout(wifiConnectTimer);
|
||
if (res && res.data ) {
|
||
if (wifiConfigTimer) {
|
||
clearTimeout(wifiConfigTimer);
|
||
}
|
||
|
||
console.log('wifi 配置接口返回',res);
|
||
// 现关闭连接的设备wifi,因为其无法发送网络请求
|
||
wx.startWifi({
|
||
success (res) {
|
||
console.log(res.errMsg);
|
||
wx.connectWifi({
|
||
SSID: SSID,
|
||
password: wifiPassword,
|
||
success (res) {
|
||
}
|
||
})
|
||
}
|
||
});
|
||
// 设备响应需要一定的时间
|
||
let timer = setTimeout(() => {
|
||
|
||
resolve()
|
||
clearTimeout(timer)
|
||
}, 10000);
|
||
|
||
} else {
|
||
// this.setData({
|
||
// pageLoading: false
|
||
// });
|
||
console.log('wifiConfig fail');
|
||
|
||
// wx.navigateTo({
|
||
// url: '/packageD/pages/connectWifiFail/index?accessToken='+accessToken+'&validateCode='+validateCode+'&deviceSerial='+deviceSerial,
|
||
// })
|
||
reject('connectWifi:fail:device config fail')
|
||
}
|
||
},
|
||
error:(err)=>{
|
||
console.log('wifiConfig fail:',err);
|
||
clearTimeout(wifiConfigTimer);
|
||
clearTimeout(wifiConnectTimer);
|
||
// this.setData({
|
||
// pageLoading: false
|
||
// });
|
||
console.log('wifiConfig fail');
|
||
// wx.navigateTo({
|
||
// url: '/packageD/pages/connectWifiFail/index?accessToken='+accessToken+'&validateCode='+validateCode+'&deviceSerial='+deviceSerial,
|
||
// })
|
||
reject('connectWifi:fail:device config fail')
|
||
|
||
|
||
}
|
||
})
|
||
}
|
||
|
||
});
|
||
|
||
return promise
|
||
}
|
||
|
||
// check network
|
||
checkNetWork = () => {
|
||
wx.getNetworkType({
|
||
success(res) {
|
||
const networkType = res.networkType;
|
||
if (!networkType || networkType === 'none') {
|
||
wx.showToast({
|
||
title: '当前网络异常',
|
||
icon: 'none',
|
||
duration: 2000,
|
||
});
|
||
return
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
export const EConnectWifi = (props) => {
|
||
const wechat_econnectWif_sdk = new WeChat_EConnectWifi(props)
|
||
return wechat_econnectWif_sdk;
|
||
} |