water_xcx/lib/ez-wechat-connectwifi-sdk/index.js

250 lines
8.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}