/** * 微信授权登录类 * Author:1327444968 */ var wx_union = (function () { var wx_type = "wx_web"; var isDebug = true; function Debug(str) { if (!isDebug) { return; } console.log(str); } function getCookie(name) { var reg = new RegExp("(^|)("+name+")=([^;]*)(;|$)", 'gi'); var obj={}; document.cookie.replace(reg, (match, p1, p2,p3) => { // console.log(match, p1, p2,p3) Object.defineProperty(obj, name, { value: p3, enumerable: true, writable: true }); return null; }); return (obj[name]||null); } /* * 设置Cookies */ function setCookie(name, value, domain, time) { Debug("设置Cookies:" + name + "=" + value); time = time || 3600 * 24 * 30; var strsec = time; var exp = new Date(); exp.setTime(exp.getTime() + strsec * 1); //document.cookie = name + "=" + escape(value) + ";path=/;expires=" + exp.toGMTString(); domain = domain||"changsha.cn"; document.cookie = name + "=" + escape(value) + ";path=/;domain=" + domain + ";expires=" + exp.toGMTString(); console.log(document.cookie ); } //获取绑定key function getauth(key, sign, backurl) { var domain = document.domain; if (backurl == undefined) { backurl = window.location; } backurl = "https://" + domain + '/oc/callback.php?callback=' + encodeURIComponent(backurl); var url = 'https://u.changsha.cn/OcApi/?action=synUnionLogin'; url += '&type=' + wx_type; url += '&key=' + key; url += '&sign=' + sign; url += '&callback=' + escape(backurl); url += "&t=" + Math.random(); return url; } //解除绑定接口 function getunauth(key, sign) { var url = 'https://u.changsha.cn/OcApi/?action=synUnbindUnionLogin'; url += '&type=' + wx_type; url += '&key=' + key; url += '&sign=' + sign; url += "&t=" + Math.random(); return url; } //获取登录key function getlogin(key, backurl) { var domain = document.domain; if (backurl == undefined) { backurl = window.location; } //var backurl = "https://" + domain + '/index.php?d=login&a=login&m_callback=' + encodeURIComponent(window.location); // backurl = "https://" + domain + '/oc/callback.php?callback=' + encodeURIComponent(backurl); //backurl = "https://" + getCookie('callback_domain') + '/oc/callback.php?callback=' + encodeURIComponent(backurl); var url = 'https://u.changsha.cn/OcApi/?action=synUnionLogin'; url += '&type=' + wx_type; url += '&key=' + key; url += '&callback=' + encodeURIComponent(backurl); url += "&t=" + Math.random(); console.log('returnUrl : ', url); return url; } //获取绑定状态key function getbindstate(key) { var url = 'https://u.changsha.cn/OcApi/?action=synUnionState'; url += '&type=' + wx_type; url += '&key=' + key; url += "&t=" + Math.random(); return url; } function isweixin() { var ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) == "micromessenger") { return true; } return false; } function getkey() { var openid = getCookie("openid"); return openid; } function getWxUserinfo() { var userinfo = getCookie("wx_userinfo"); console.log(userinfo); if (isnull(userinfo)) { return null; } // userinfo = JSON.parse(userinfo); return userinfo; } function isnull(v) { if (v == undefined || v == null || v == "") { return true; } return false; } //初始化微信KEY function init(siteid) { var openid = getkey(); if (!isweixin() && isDebug == true) { setCookie("openid", "otTtC1i4CGSX9r5VnNYBtI01mjlk"); //setCookie("openid","otTtC1gv0J57GpdYNuvqmoqDy9Vk"); return; } siteid = siteid || 8; weixin.init({ siteid: siteid, userinfo: true, islogin: true, callback: function () { // console.log(weixin.userinfo); openid = weixin.userinfo.openid; var wx_userinfo = weixin.userinfo; if (isweixin()) { setCookie("openid", openid); setCookie("wx_userinfo", encodeURI(JSON.stringify(wx_userinfo), 'utf8')); } console.log(wx_userinfo); $(wx_union).trigger("over", [openid, wx_userinfo, false]); } }); } //微信绑定 function bindwx(sign, backfunc) { var key = getkey(); var msg = ""; Debug("openid:" + key); if (key == undefined || key == "") { msg = "openid为空,请确认已经授权"; backfunc(msg, -1); return; } if (sign == undefined || sign == "") { msg = "请先登录"; backfunc(msg, -2); return; } var backurl = getauth(key, sign); console.log(backurl); window.location = backurl; } //解除微信绑定 function unbindwx(sign, backfunc) { var key = getkey(); var msg = ""; Debug("openid:" + key); if (key == undefined || key == "") { msg = "openid为空,请确认已经授权"; backfunc(msg, -1); return; } if (sign == undefined || sign == "") { msg = "请先登录"; backfunc(msg, -2); return; } var url = getunauth(key, sign); $.ajax({ url: url, dataType: "json", success: function (data) { Debug(data); backfunc(data.msg, data.code); } }); } //微信登录 function wxlogin(backfunc, backurl) { var key = getkey(); var msg = ""; Debug("openid:" + key); if (key == undefined || key == "") { msg = "openid为空,请确认已经授权"; backfunc(msg, -1); return; } var backurl = getlogin(key, backurl); //alert(backurl); //$("body").append(backurl); window.location = backurl; } var union = { init: function (option) { var opt = { isDebug: false, }; $.extend(opt, option); isDebug = opt.isDebug; init(); }, wxlogin: function (backfunc, autobind) { backfunc = backfunc || function () { }; wx_union.isbind(function (msg, code) { if (code == "yes" || autobind != undefined) { wxlogin(backfunc); } else { backfunc(msg, code); } }); }, wxloginauto: function (sign, backurl, backfunc) { backfunc = backfunc || function () { }; //if (!isnull(sign)) { // backfunc("已经登录", 0); // return; //} wx_union.isbind(function (msg, code) { if (code == "yes") { wxlogin(backfunc, backurl); } else { backfunc(msg, code); } }); }, bindwx: function (sign, backfunc) { backfunc = backfunc || function () { }; bindwx(sign, backfunc); }, unbindwx: function (sign, backfunc) { backfunc = backfunc || function () { }; unbindwx(sign, backfunc); }, getsign: function () { return getCookie("sign"); }, isbind: function (backfunc) { backfunc = backfunc || function () { }; var key = getkey(); var url = getbindstate(key); $.ajax({ url: url, dataType: "json", success: function (data) { backfunc(data.msg, data.code); console.log(data); } }); }, WxUserinfo: function () { return getWxUserinfo(); }, clear: function (backfunc) { setCookie("openid", ""); setCookie("wx_userinfo", ""); setCookie("sign", ""); backfunc("清除成功", 0); }, setCookie: function (name, value, domain, time) { Debug("设置Cookies:" + name + "=" + value); time = time || 3600 * 24 * 30; var strsec = time; var exp = new Date(); exp.setTime(exp.getTime() + strsec * 1); //document.cookie = name + "=" + escape(value) + ";path=/;expires=" + exp.toGMTString(); domain = "changsha.cn"; document.cookie = name + "=" + escape(value) + ";path=/;domain=" + domain + ";expires=" + exp.toGMTString(); }, }; return union; }) (window.JQuery || $); var oc = (function () { var ishttps = 'https:' == document.location.protocol ? true : false; var http = document.location.protocol + "//"; var base_url = http + 'u.changsha.cn'; var oc_url = base_url + "/OcApi/";//用户中心地址 var oc_callback = http + document.domain + "/oc/callback.php";//回调地址 oc_callback = oc_callback + "?m_callback=" + encodeURIComponent(window.location.href);//此处需和同步回调同步处理 // var oc_callback = http + "u.changsha.cn" + "/oc/callback.php";//回调地址 var opt; var isDebug = false; Debug("ishttps:" + ishttps); Debug("https:" + http); var user;//用户对象 var pub_data;//返回数据对象 var sign;//签名保存 var signdata;//签名数据 var oc_obj;//显示登录状态对象 var oc_qr_obj;//显示二维码对象 var CheckQR_Flag = false;//检测二维码登录状态 /*构造授权链接*/ function getBaseUrl(action) { var url = oc_url + "?action=" + action + "&callback=" + encodeURIComponent(oc_callback) + "&t1_FromDomain=" + document.domain + "&debug=" + isDebug + "&t=" + Math.random(); return url; } function loadcss(src, stype) { var oHead = document.getElementsByTagName('HEAD').item(0); var oCss = document.createElement("link"); oCss.type = "text/css"; if (stype == "1") { oCss.href = base_url + "/OcApi/res/css/" + src; } else { oCss.href = src; } oCss.rel = "stylesheet"; oHead.appendChild(oCss); } function loadjs(src, stype) { var oHead = document.getElementsByTagName('HEAD').item(0); var oScript = document.createElement("script"); oScript.type = "text/javascript"; if (stype == "1") { oScript.src = base_url + "/OcApi/res/js/" + src; } else { oScript.src = src; } oHead.appendChild(oScript); } function incjs(js) { document.write(""); } /*构造SessionID*/ function getSessionID() { var sid = getCookie("PHPSESSID"); return sid; } /*调试信息*/ function Debug(log, flag) { flag = flag || "console"; if (isDebug) { console.log("【" + flag + "】"); console.log(log); $(oc).trigger("onDebug", [log, flag]); } } function GenCodeApi() { center.ajax({ type: "post", url: getBaseUrl("synGenCodeApi"), data: {}, dataType: "json", success: function (data) { //var rect=JsonLower(data.rect); var rect = data.rect; if (data.code == "yes") { setCookie("PHPSESSID", rect.PHPSESSID); } $(oc).trigger("onListenCodeLogin", [data, sign]); }, error: function (a, b, c) { console.log(c); } }); } /*获取url中的参数*/ function Request(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 var r = window.location.search.substr(1).match(reg); //匹配目标参数 if (r == null) { //window.parent.location.search.substr(1).match(reg); //匹配目标参数 } if (r != null) return unescape(r[2]); return null; //返回参数值 } /* * 获取用户信息 */ function _get(key, table, data) { data = data || user; table = maptable(table); // console.log(table+"================"); if (data != undefined) { table = table || "user"; key = key.toLowerCase(); table = table.toLowerCase(); if (data[table] != undefined) { if (data[table][key] != undefined) { return data[table][key]; } else { return null; } } } return null; } function maptable(key) { var mp = { "user": "t1", "userinfo": "t2", "userrole": "t3", "usrsitelevel": "t4", "union_user": "t5", "usercontrol": "t6" }; $.each(mp, function (k, v) { if (key == v) { key = k; return; } } ); return key; } /* * 获取Cookies */ // function getCookie(name) { // Debug("获取Cookies:" + name); // var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); // if (arr = document.cookie.match(reg)) { // if(name=="sign"){ // console.log(arr); // } // Debug(unescape(arr[2]), "getCookie"); // return unescape(arr[2]); // } else { // return null; // } // } function getCookie(name) { var reg = new RegExp("(^|)("+name+")=([^;]*)(;|$)", 'gi'); var obj={}; document.cookie.replace(reg, (match, p1, p2,p3) => { // console.log(match, p1, p2,p3) Object.defineProperty(obj, name, { value: p3, enumerable: true, writable: true }); return null; }); return (obj[name]||null); } /* * 设置Cookies */ function setCookie(name, value, domain, time) { if (http + document.domain == base_url) { //return; } Debug("设置Cookies:" + name + "=" + value); time = time || 3600 * 24 * 30; var strsec = time; var exp = new Date(); exp.setTime(exp.getTime() + strsec * 1); // document.cookie = name + "=" + escape(value) + ";path=/;expires=" + exp.toGMTString(); // domain = "changsha.cn" || document.domain; domain = document.domain; // domain="changsha.cn"; document.cookie = name + "=" + escape(value) + ";path=/;domain=" + domain + ";expires=" + exp.toGMTString(); } /* * 删除Cookies */ function delCookie(name, domain) { Debug("删除Cookies:" + name); var exp = new Date(); exp.setTime(exp.getTime() - 300); document.cookie = name + "=;path=/;expires=" + exp.toGMTString(); domain = "changsha.cn" || document.domain; //domain="changsha.cn"; document.cookie = name + "=;path=/;expires=" + exp.toGMTString() + ";domain=" + domain; } /* * Json对象转换为小写 * */ function JsonLower(data) { return JSON.parse(JSON.stringify(data).toString().toLocaleLowerCase()); } // 转为unicode 编码 function encodeUnicode(str) { var res = []; for (var i = 0; i < str.length; i++) { res[i] = ("00" + str.charCodeAt(i).toString(16)).slice(-4); } return "\\u" + res.join("\\u"); } // 解码 function decodeUnicode(str) { str = str.replace(/\\/g, "%"); return unescape(str); } function encodeUnicodeJson(json) { return json; console.log("+++++++++++++++++++++++++++++++++++++++++++++++++++"); console.log(json); var values = json.match(/(\:\"([^\x00-\xff])+|(\w)+\")/g); $.each(values, function (a, b) { console.log(a + "|" + b + "|" + b.substr(2, b.length - 3) + "===================="); json = json.replace(b.substr(2, b.length - 3), encodeUnicode(b)); }); return json; console.log("+++++++++++++++++++++++++++++++++++++++++++++++++++"); } function urlArgs(url) { var args = {}; var index = url.indexOf('?'); var query = url.substring(index + 1); var pairs = query.split('&'); for (var i = 0; i < pairs.length; i++) { var pos = pairs[i].indexOf('='); if (pos == -1) { continue; } // 如果没找到,就跳过 var name = pairs[i].substr(0, pos); // 获得名称 var value = pairs[i].substr(pos + 1); // 提取value value = decodeURIComponent(value); // 解码value ,如果地址栏的参数没有转码的话则不需要这一步 args[name] = value; } return args } function mergeJSON(target, source) { for (var obj in source) { target[obj] = source[obj]; } return target; } /*生成GUID*/ function GUID() { this.date = new Date(); /* 判断是否初始化过,如果初始化过以下代码,则以下代码将不再执行,实际中只执行一次 */ if (typeof this.newGUID != 'function') { /* 生成GUID码 */ GUID.prototype.newGUID = function () { this.date = new Date(); var guidStr = ''; sexadecimalDate = this.hexadecimal(this.getGUIDTime(), 16); sexadecimalTime = this.hexadecimal(this.getGUIDTime(), 16); for (var i = 0; i < 9; i++) { guidStr += Math.floor(Math.random() * 16).toString(16); } guidStr += sexadecimalDate; guidStr += sexadecimalTime; while (guidStr.length < 32) { guidStr += Math.floor(Math.random() * 16).toString(16); } return this.formatGUID(guidStr); }; /* * 功能:获取当前日期的GUID格式,即8位数的日期:19700101 * 返回值:返回GUID日期格式的字条串 */ GUID.prototype.getGUIDDate = function () { return this.date.getFullYear() + this.addZero(this.date.getMonth() + 1) + this.addZero(this.date.getDay()); }; /* * 功能:获取当前时间的GUID格式,即8位数的时间,包括毫秒,毫秒为2位数:12300933 * 返回值:返回GUID日期格式的字条串 */ GUID.prototype.getGUIDTime = function () { return this.addZero(this.date.getHours()) + this.addZero(this.date.getMinutes()) + this.addZero(this.date.getSeconds()) + this.addZero(parseInt(this.date.getMilliseconds() / 10)); }; /* * 功能: 为一位数的正整数前面添加0,如果是可以转成非NaN数字的字符串也可以实现 * 参数: 参数表示准备再前面添加0的数字或可以转换成数字的字符串 * 返回值: 如果符合条件,返回添加0后的字条串类型,否则返回自身的字符串 */ GUID.prototype.addZero = function (num) { if (Number(num).toString() != 'NaN' && num >= 0 && num < 10) { return '0' + Math.floor(num); } else { return num.toString(); } }; /* * 功能:将y进制的数值,转换为x进制的数值 * 参数:第1个参数表示欲转换的数值;第2个参数表示欲转换的进制;第3个参数可选,表示当前的进制数,如不写则为10 * 返回值:返回转换后的字符串 */ GUID.prototype.hexadecimal = function (num, x, y) { if (y != undefined) { return parseInt(num.toString(), y).toString(x); } else { return parseInt(num.toString()).toString(x); } }; /* * 功能:格式化32位的字符串为GUID模式的字符串 * 参数:第1个参数表示32位的字符串 * 返回值:标准GUID格式的字符串 */ GUID.prototype.formatGUID = function (guidStr) { var str1 = guidStr.slice(0, 8) + '-', str2 = guidStr.slice(8, 12) + '-', str3 = guidStr.slice(12, 16) + '-', str4 = guidStr.slice(16, 20) + '-', str5 = guidStr.slice(20); return str1 + str2 + str3 + str4 + str5; } } } var center = { guid: function (isUpper) { isUpper = false | isUpper; var guid = new GUID(); guid = guid.newGUID(); if (isUpper) { guid = guid.toLocaleUpperCase(); } return guid; }, loadjs: function (src, stype) { stype = 1 | stype; loadjs(src, stype); }, loadcss: function (src, stype) { stype = 1 | stype; loadcss(src, stype); }, syncookie: function (force) { return; if (base_url == http + document.domain) { return; } force = force | false; var _sign = center.getsign(); var _his = getCookie("his"); // console.log(_sign); // console.log(_his); var url = opt.syn_url + "&sign=" + _sign + "&his=" + _his; var client_url = opt.syn_session_url + "&sign=" + _sign; if (force == false) { if (_his == null || _sign == null) { return; } } else { url = opt.syn_url + "&his=" + _his; client_url = ""; } // console.log("url",url); // console.log("client_url",client_url); // alert(url); // alert(client_url); if (url != "") { // $("body").append(""); } if (client_url != "") { $("body").append("");//同步用户BUG } $.each(opt.syn_other_url, function (k, v) { var other_url = v + "/oc/callback.php" + "?noredirect=false"; // console.log("other_url:"+other_url); if (_sign != "") { other_url += "&sign=" + _sign; } if (_his != "") { other_url += "&his=" + _his; } $("body").append(""); }); // console.log("url", url); // console.log("client_url", client_url); // console.log("syncookie"); }, //填充表单数据 fillform: function (obj, data) { $(obj).each(function (k, v) { try { var name = $(this).attr("name").replace(/t[0-9]_/, ""); var table = $(this).attr("name").match(/t\d+/g); var val = _get(name.toLocaleLowerCase(), table, data); // console.log(k+"|"+v+"|"+name+"|"+table+"|"+$(this).attr("type")); if ($(this).attr("type") != "hidden" && table != null) { $(this).val(val); } } catch (e) { // console.log(e); } }); }, hasinit: false,//是否初始化过 /**初始化接口 * _oc_base_domain 域名 * oc_obj_id 显示登录对象 * oc_qr_obj_id 显示二维码对象 * options 参数 */ init: function (_oc_base_domain, oc_obj_id, oc_qr_obj_id, options) { // console.log("init oc"); oc_obj_id = oc_obj_id || "loginbox"; oc_qr_obj_id = oc_qr_obj_id || "loginQRCODE"; oc_obj = "#" + oc_obj_id; oc_qr_obj = "#" + oc_qr_obj_id; base_url = _oc_base_domain || base_url; oc_url = base_url + "/OcApi/"; var normal_opt = { //常规参数 isDebug: false,//是否启用调试 默认为关闭 PHPSESSID: getSessionID(),//SESSIONID base_url: base_url,//接口域名 oc_qr_obj_id: oc_qr_obj_id,//二维码对象ID type: "wx_web",//启用微信登录 //同步接口 syn_url: oc_url + "?action=synCookies",//同步COOKIE接口SESSION和COOKIE syn_session_url: oc_callback + "&noredirect=false",//同步应用SESSION和COOKIE syn_other_url: {},//同步其它应用SESSION和COOKIE }; var defaultopt = { //短信接口 sms_api: getBaseUrl("synSendSms"),//发送短信接口 sms_code: getBaseUrl("synSendSmsCode"),//发送短信验证码接口 sms_check: getBaseUrl("synCheckSmsCode"),//验证短信验证码接口 //二维码登录参数 listencodeurl: getBaseUrl("synGetCodeApi"),//二维码登录监听接口 gencodeurl: getBaseUrl("synGenCodeApi"),//获取登录二维码接口 gencodeqrurl: getBaseUrl("showLoginQR"),//显示登录二维码URL //登录参数 loginapiurl: getBaseUrl("synLoginApi"),//登录接口 loginurl: getBaseUrl("showLogin"),//显示登录页面URL logouturl: getBaseUrl("synLogout"),//退出接口 //注册参数 regurl: getBaseUrl("showRegist"),//显示注册用户URL reguserapi: getBaseUrl("synRegUserApi"),//注册用户接口 token: getBaseUrl("synUserToken"),//会话更新 //用户信息参数 getuserurl: getBaseUrl("synGetuser"),//获取用户信息接口 authurl: getBaseUrl("synAuthApi"),//认证用户信息接口 updateurl: getBaseUrl("showUpdate"),//显示修改信息页面URL updateapi: getBaseUrl("synUpdateApi"),//显示修改信息页面URL //模板参数 qrcode_template: '
',//二维码显示模板 // loginstate_normal_template: "
" +
// " 登录 注册",//登录状态显示模板未登录
loginstate_normal_template: "
" +
" 登录 注册",//登录状态显示模板未登录
loginstate_ucenter_template: "{[user_UserName]}[{[userInfo_NickName]}]|修改|退出"//登录状态显示模板未登录
};
$.extend(defaultopt, normal_opt);
$.extend(defaultopt, options);
opt = defaultopt;
isDebug = opt.isDebug;
if (opt.type == "wx_web") {
opt.loginapiurl += "&type=wx_web";
opt.loginurl += "&type=wx_web";
}
Debug(opt);
try {
center.getsign();
center.checklogin();
} catch (e) {
console.log(e);
}
Debug("初始化参数");
Debug(opt, "Init");
center.briagesign().then(briage_sign=>{
if(briage_sign){
delCookie("sign");
setCookie("sign", briage_sign);
console.log("briage_sign",briage_sign)
}
});
$(document).ready(function () {
var html = center.replacetemplate(opt.qrcode_template);
// $(oc_obj).parent().append(html);
// $("body").append(html);
$(oc).trigger("inited", []);
});
center.hasinit = true;
},
briagesign:function(){
return new Promise(function (res, rej) {
try {
console.log("briagesign");
bridgeImpl.getUserInfo(function (data) {
console.log(data);
data=data.replace(/O0O0O/g, "=")//=号
.replace(/o000o/g, "+")//+号
.replace(/oo00o/g, "/");// /号
userInfo = JSON.parse(Base64.decode(data)); //由JSON字符串转换为JSON对象
var briage_sign = userInfo.userSign;
// alert("briage_sign:"+briage_sign);
// bridgeImpl.showMsg(JSON.stringify(userInfo),false);
if (briage_sign != undefined && briage_sign != "") {
res(briage_sign);
}
$(oc).trigger("onbridge", [userInfo, briage_sign]);
}, function (e) {
rej(e);
// console.log(e)
});
} catch (e) {
res();
// rej(e)
// console.log(e)
}
})
},
replacetemplate: function (str) {
var html = str;
html = html.replace(/\{loginurl\}/g, opt.loginurl);
html = html.replace(/\{base_url\}/g, opt.base_url);
html = html.replace(/\{logouturl\}/g, opt.logouturl);
html = html.replace(/\{regurl\}/g, opt.regurl);
html = html.replace(/\{oc_qr_obj_id\}/g, opt.oc_qr_obj_id);
html = html.replace(/\{updateurl\}/g, opt.updateurl);
var data = html.match(/\{\[(\w+)\]\}/ig);
$(data).each(function (k, v) {
var vkey = v.replace(/\{\[|\]\}/ig, "");
var arr = vkey.split("_");
html = html.replace(v, center.get(arr[1], arr[0]));
});
return html;
},
option: function () {
return opt;
},
/*显示登录二维码*/
getQRCode: function () {
Debug("显示登录二维码");
var frm_box = $(oc_qr_obj);
$(frm_box).css("left", $(document).width() / 2 - $(frm_box).width() / 2);
$(frm_box).css("top", $(document).height() / 2 - $(frm_box).height());
var frm = $(frm_box).find("iframe");
$(frm).attr("src", opt.gencodeqrurl);
$(frm_box).show();
$(oc_qr_obj).find(".RefreshQRCode").on("click", function () {
$(frm).attr("src", opt.gencodeqrurl);
});
center.ListenCodeLogin();
},
/*检测登录*/
checklogin: function () {
Debug("检测登录");
// console.log("checklogin");
setCookie("his", window.location.href);
this.showState();
center.getsign();
$(oc).trigger("onchecklogin", [null, sign]);
this.AuthApi();
},
gen_mac_sn: function (code) {
var url = oc_url + "?action=gen_mac_code&sn=" + code;
$("body").append("