mtl-js-sdk
Version:
ynf-fw-mtl-api
480 lines (463 loc) • 15.8 kB
JavaScript
const KEY_DOMAIN = "key_domain";
const KEY_LANG = "key_lang";
const userAgent = window.navigator.userAgent;
function loginByThirdAccount(option) {
console.log('loginByThirdAccount', option)
dealDomanAndLanguage(option, 0)
}
function loginByYhtAccount(option) {
console.log('loginByYhtAccount', option)
dealDomanAndLanguage(option, 1)
}
function bindYhtAccount(option) {
console.log('bindYhtAccount', option)
dealDomanAndLanguage(option, 2)
}
function logout(option) {
console.log('logout', option)
dealDomanAndLanguage(option, 3)
}
function unBindYhtAccount(option) {
console.log('unBindYhtAccount', option)
dealDomanAndLanguage(option, 4)
}
function dealDomanAndLanguage(option, type) {
const { domain = '', lang = '' } = option
mtl.getStorage({
key: KEY_DOMAIN,
success: function (res) {
if (domain == '' && res.data != '') {
option.domain = res.data
}
mtl.getStorage({
key: KEY_LANG,
success: function (res) {
console.log('111', res)
if (lang == '' && res.data != '') {
option.lang = res.data
}
execAction(option, type)
},
fail: function (err) {
console.log('222', err)
if (lang == '') {
option.lang = 'zh_cn'
}
execAction(option, type)
}
});
},
fail: function () {
if (domain == '') {
option.fail && option.fail({ code: 1, message: 'domain is null' })
return
}
mtl.getStorage({
key: KEY_LANG,
success: function (res) {
console.log('333', res)
if (lang == '' && res.data != '') {
option.lang = res.data
}
execAction(option, type)
},
fail: function (err) {
console.log('444', err)
if (lang == '') {
option.lang = 'zh_cn'
}
execAction(option, type)
}
});
}
});
}
function execAction(option, type) {
switch (type) {
case 0:
thirdLoginAction(option)
break;
case 1:
loginAction(option)
break;
case 2:
bindAction(option)
break;
case 3:
logoutAction(option)
break;
case 4:
unBindAction(option)
break;
default:
break;
}
}
function thirdLoginAction(option) {
console.log('thirdLoginAction', option)
let url = `${option.domain}/rest/v1/mobile/unitifyLogin/loginByThirdAccount?lang=${option.lang}`;
const pf = mtl.platform.toLowerCase();
let data = {}
if (pf.indexOf("android") !== -1 || pf.indexOf("ios") !== -1) {
const { tdUserId = '' } = getUrlParams() || {}
if (tdUserId == '') {
option.fail && option.fail({ code: 1, message: 'tdUserId is null' })
return
}
const params = {
tdUserId
}
data = { type: 'app', params }
} else if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) {
const {
wxAppId = '', wxCode = '', encryptedData = '', iv = ''
} = getUrlParams() || {};
if (wxAppId == '' || wxCode == '' || encryptedData == '' || iv == '') {
option.fail && option.fail({ code: 1, message: 'params is null' })
return
}
localStorage.setItem("wxAppId", wxAppId);
let ed = encryptedData + '=='
let niv = iv + '=='
const params = {
wxAppId,
wxCode,
encryptedData: ed,
iv: niv,
lang: option.lang
}
data = { type: 'wx', params }
} else if (userAgent.indexOf("wxwork") !== -1) {
const {
agentId = '', code = '', corpId = ''
} = getUrlParams() || {};
if (agentId == '' || code == '' || corpId == '') {
option.fail && option.fail({ code: 1, message: 'params is null' })
return
}
const params = {
agentId,
corpId,
wxWorkCode: code
}
data = { type: 'wxwork', params }
}
mtl.request({
url: url,
method: 'POST',
params: data,
headers: {
'content-type': 'application/json;'
},
paramsType: 1,
responseType: 'json',
success(res) {
let { status: code, statusText: message, data } = res;
if (code === 200) {
let dataObj = convertToObject(data);
if (dataObj && dataObj.data) {
const code = dataObj.code;
if (code === '1002') {
if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) {
localStorage.setItem("mtlUniId", dataObj.data.attributes.openId);
} else {
localStorage.setItem("mtlUniId", dataObj.data.attributes.userId);
}
} else if (code === '0') {
mtl.setStorage({
domain: 'mtlUnitifyLogin',
key: 'data',
data: dataObj.data
});
if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) {
localStorage.setItem("mtlUniId", dataObj.data.attributes.openId);
} else {
localStorage.setItem("mtlUniId", dataObj.data.attributes.userId);
}
}
}
option.success && option.success(data);
} else {
option.fail && option.fail({ code, message, data });
}
option.complete && option.complete({ code, message, data });
},
fail: function (err) {
option.fail && option.fail(err);
option.complete && option.complete(err);
}
})
}
function loginAction(option) {
console.log('loginAction', option)
let url = `${option.domain}/rest/v1/mobile/login/password?lang=${option.lang}`;
let data = {
username: option.username,
password: option.password,
tenantId: option.tenantId ? option.tenantId : ''
}
mtl.request({
url: url,
method: 'POST',
params: data,
headers: {
'content-type': 'application/json;'
},
paramsType: 1,
responseType: 'json',
success(res) {
let { status: code, statusText: message, data } = res;
if (code === 200) {
let dataObj = convertToObject(data);
if (dataObj && dataObj.data) {
mtl.setStorage({
domain: 'mtlUnitifyLogin',
key: 'data',
data: dataObj.data
});
}
option.success && option.success(data);
} else {
option.fail && option.fail({ code, message, data });
}
option.complete && option.complete({ code, message, data });
},
fail: function (err) {
option.fail && option.fail(err);
option.complete && option.complete(err);
}
})
}
function bindAction(option) {
console.log('bindAction', option)
let url = `${option.domain}/rest/v1/mobile/unitifyLogin/bindWithYhtAndThirdAccount?lang=${option.lang}`;
const pf = mtl.platform.toLowerCase();
let data = {
username: option.username,
password: option.password,
}
const mtlUniId = localStorage.getItem('mtlUniId')
let params = {}
if (pf.indexOf("android") !== -1 || pf.indexOf("ios") !== -1) {
params = {
tdUserId: mtlUniId
}
data.type = 'app'
} else if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) {
url = `${option.domain}/rest/v1/mobile/login/weChatBindAndLogin?lang=${option.lang}`;
const {
wxAppId = ''
} = getUrlParams() || {};
localStorage.setItem("wxAppId", wxAppId);
params = {
openId: mtlUniId,
wxAppId,
validateCodeType: 'username',
lang: option.lang
}
data.type = 'wx'
} else if (userAgent.indexOf("wxwork") !== -1) {
params = {
wwUserId: mtlUniId
}
data.type = 'wxwork'
}
data.params = params
mtl.request({
url: url,
method: 'POST',
params: data,
headers: {
'content-type': 'application/json;'
},
paramsType: 1,
responseType: 'json',
success(res) {
let { status: code, statusText: message, data } = res;
if (code === 200) {
option.success && option.success(data);
} else {
option.fail && option.fail({ code, message, data });
}
option.complete && option.complete({ code, message, data });
},
fail: function (err) {
option.fail && option.fail(err);
option.complete && option.complete(err);
}
})
}
function logoutAction(option) {
console.log('logoutAction', option)
let url = `${option.domain}/rest/v1/mobile/user/logout?lang=${option.lang}`;
mtl.getStorage({
domain: 'mtlUnitifyLogin',
key: 'data',
success(res) {
const data = res.data || {};
if (data) {
let dataObj = typeof data === 'string' ? JSON.parse(data) : data
const yhtToken = dataObj.yhtToken.yhtAccessToken;
const wbAt = dataObj.sessionInfo.sessionId;
const vv = `yht_access_token=${yhtToken};wb_at=${wbAt};`;
mtl.request({
url: url,
method: 'POST',
headers: {
'content-type': 'application/json;',
cookie: vv
},
paramsType: 1,
responseType: 'json',
success(res) {
let { status: code, statusText: message, data } = res;
if (code === 200) {
option.success && option.success(data);
} else {
option.fail && option.fail({ code, message, data });
}
option.complete && option.complete({ code, message, data });
},
fail: function (err) {
option.fail && option.fail(err);
option.complete && option.complete(err);
}
})
} else {
option.fail && option.fail({ message: "Please login again!", code: 1 })
option.complete && option.complete({ message: "Please login again!", code: 1 })
}
},
fail(err) {
option.fail && option.fail(err)
option.complete && option.complete(err)
}
})
}
function unBindAction(option) {
console.log('logoutAction', option)
let url = `${option.domain}/rest/v1/mobile/unitifyLogin/unBindYhtAccount?lang=${option.lang}`;
const mtlUniId = localStorage.getItem('mtlUniId')
const pf = mtl.platform.toLowerCase();
let data = {}
let params = {}
if (pf.indexOf("android") !== -1 || pf.indexOf("ios") !== -1) {
params = {
tdUserId: mtlUniId
}
data.type = 'app'
} else if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) {
wxUnBindUser(option)
return
} else if (userAgent.indexOf("wxwork") !== -1) {
params = {
wwUserId: mtlUniId
}
data.type = 'wxwork'
}
data.params = params
mtl.request({
url: url,
method: 'POST',
params: data,
headers: {
'content-type': 'application/json;'
},
paramsType: 1,
responseType: 'json',
success(res) {
let { status: code, statusText: message, data } = res;
if (code === 200) {
option.success && option.success(data);
} else {
option.fail && option.fail({ code, message, data });
}
option.complete && option.complete({ code, message, data });
},
fail: function (err) {
option.fail && option.fail(err);
option.complete && option.complete(err);
}
})
}
function wxUnBindUser(option) {
const url = `${option.domain}/rest/v1/mobile/user/weChatUnbind?lang=${option.lang}`;
const mtlUniId = localStorage.getItem('mtlUniId')
mtl.getStorage({
domain: 'mtlUnitifyLogin',
key: 'data',
success: function (res) {
const wxAppId = localStorage.getItem('wxAppId');
const dataObj = convertToObject(res.data);
const yhtToken = dataObj.yhtToken.yhtAccessToken;
const data = {
yhtToken: yhtToken,
openId: mtlUniId,
wxAppId: wxAppId,
lang: option.lang
}
mtl.request({
url: url,
method: 'POST',
params: data,
headers: {
'content-type': 'application/json;'
},
paramsType: 1,
responseType: 'json',
success(res) {
let { status: code, statusText: message, data } = res;
if (code === 200) {
option.success && option.success(data);
} else {
option.fail && option.fail({ code, message, data });
}
option.complete && option.complete({ code, message, data });
},
fail: function (err) {
option.fail && option.fail(err);
option.complete && option.complete(err);
}
})
}
});
}
function getUrlParams() {
let res = {};
let serach = window.location.search;
if (!serach || serach === '') {
serach = window.location.href.split("?").pop();
}
let str = decodeURIComponent(serach);
str = str.trim().replace(/^[?#&]/, "");
if (!str) {
return res;
}
str.split("&").forEach((strItem) => {
if (strItem) {
let parts = strItem.split("=");
let partKey = parts[0],
partValue = parts[1] || "";
res[partKey] = partValue;
}
});
return res;
}
function convertToObject(res) {
let dataObj = res;
if (typeof (res) === 'string') {
try {
dataObj = JSON.parse(res)
} catch (error) {
dataObj = res;
}
}
return dataObj;
}
export default {
loginByThirdAccount,
loginByYhtAccount,
bindYhtAccount,
logout,
unBindYhtAccount
};