function getValueFromStringByKey(str, key, spliter) {
var result;
if (!str || !key || !spliter) {
return result;
}
var index = str.indexOf(key);
if (index > -1) {
index += key.length;
var end_index = str.indexOf(spliter, index);
if (end_index > -1) {
result = str.substring(index, end_index);
} else {
result = str.substring(index);
}
}
return result;
}
//获取url中参数值
function getParamFromUrl(urlValue, paramValue) {
var urlParamReg = new RegExp("([?|&|#]" + paramValue + "=)([^&#]*)(&|#|$)", "i");
if (urlValue.search(urlParamReg) === -1) {
return false;
}
var valueList = urlValue.match(urlParamReg);
if (valueList && valueList.length > 3) {
return valueList[2];
}
return "";
}
//追踪用户首个落地页
var firstPage = window.localStorage.getItem("_fp");
if (!firstPage) {
window.localStorage.setItem("_fp", window.location.pathname + window.location.search);
}
//上一级页面的参数带入 到下一级页面
function insertLPUrlToCPUrl(paramValue){
var value = getParamFromUrl(window.location.href, paramValue);
if(!(value !== false && value.length > 0)){
if(value != "yitiao"){
var referrer = document.referrer;
var value = getParamFromUrl(referrer, paramValue);
if (value !== false && value.length > 0) {
if(value != "yitiao"){
var searchValue = window.location.search;
if(searchValue && searchValue.length > 1){
searchValue += '&' + paramValue + "=" + value;
}else if(searchValue.indexOf("?") > -1){
searchValue += paramValue + "=" + value;
}else{
searchValue += '?' + paramValue + "=" + value;
}
var hrefValue = window.location.protocol + "//" + window.location.hostname + window.location.pathname + searchValue + window.location.hash;
window.history.replaceState({},document.title,hrefValue);
}
}
}
}
}
//获取cookie中的参数
function getCookieParam(name){
var reg = new RegExp("(" + name + "=)([^;]*)(;|$)", "i");
var r = document.cookie.match(reg);
if(r && r.length > 0){
return r[2];
}
return null;
}
//清理所有cms种入的cookie
function clearCookieParam(exdate){
var clearFlag = window.localStorage.getItem("clearFlag");
if(!clearFlag){
var params = ["19_ttk", "_ttk", "_spms", "utm_medium", "utm_campaign", "utm_content", "utm_term", "_src", "_src_t", "utm_medium", 'utm_source', 'utm_content'];
for(var i = 0; i < params.length; i++){
document.cookie = params[i] + "=12"
+ ";path=/;domain=.yit.com" + ";expires=" + exdate;
}
window.localStorage.setItem("clearFlag", "true")
}
}
clearCookieParam("Thu, 01 Jan 1970 00:00:00 GMT");
var hostname = window.location.hostname;
var exdate = new Date();
var now = new Date().getTime().toString();
var reffer = document.referrer;
var searchValue = window.location.search;
exdate.setMinutes(exdate.getMinutes() + 30);
//channel以及utm参数设置
var src = getParamFromUrl(searchValue, "_src") || getParamFromUrl(searchValue, "channel");
var utmSource = getParamFromUrl(searchValue, "utm_source"),
utmParams = ["utm_medium", "utm_campaign", "utm_content", "utm_term"],
EXPIRES = "Thu, 01 Jan 1970 00:00:00 GMT";
var srcInCookie = getCookieParam("_src");
var utmSourceCookie = getCookieParam("utm_source");
//当url中的channel或者utm_source和cookie中的不相等时,则都进行重置更新,否则把url中多出的参数加入到cookie中
if(src !== false && srcInCookie && src != srcInCookie || utmSource !== false && utmSourceCookie && utmSource != utmSourceCookie){
document.cookie = "_src=" + src
+ ";path=/;expires=" + (!!src ? exdate.toGMTString() : EXPIRES);
if(src !== false){
document.cookie = "_src_t=" + now + ";path=/;";
}
document.cookie = "utm_source=" + utmSource
+ ";path=/;expires=" + (!!utmSource ? exdate.toGMTString() : EXPIRES);
}else{
if(src !== false && !srcInCookie){
document.cookie = "_src=" + src
+ ";path=/;expires=" + exdate.toGMTString() ;
document.cookie = "_src_t=" + now + ";path=/;";
if(utmSource === false && utmSourceCookie){
document.cookie = "utm_source=" + utmSource
+ ";path=/;expires=" + EXPIRES;
}
}
if(utmSource !== false && !utmSourceCookie){
document.cookie = "utm_source=" + utmSource
+ ";path=/;expires=" + exdate.toGMTString() ;
if(src === false && srcInCookie){
document.cookie = "_src=" + src
+ ";path=/;expires=" + EXPIRES;
}
}
}
//当url中的utmsource存在时,则对其他的utm参数进行更新,否则只把url中的其他utm参数更新到cookie
if(utmSource !== false && utmSource != utmSourceCookie || src !== false && src != srcInCookie){
// 将 其他 utm 参数设置到 cookie
for (var i = 0, len = utmParams.length; i < len; i++) {
// 从 url 获取该参数的值
var cookieValue = getParamFromUrl(searchValue, utmParams[i]);
// 如果 url 中存在 该 utm 参数,则 [设置] 或 [更新] 这个参数到 cookie,否则 [清除]。
document.cookie = utmParams[i] + "=" + cookieValue
+ ";path=/;expires=" + (cookieValue !== false? exdate.toGMTString() : EXPIRES);
}
}else{
// 从 url 获取该参数的值
for (var i = 0, len = utmParams.length; i < len; i++) {
// 从 url 获取该参数的值
var cookieValue = getParamFromUrl(searchValue, utmParams[i]);
// 如果 url 中存在 该 utm 参数,则 [设置] 或 [更新] 这个参数到 cookie。
if(cookieValue !== false){
document.cookie = utmParams[i] + "=" + cookieValue
+ ";path=/;expires=" + exdate.toGMTString();
}
}
}
window.cmsLoadUrlFlag = true;
//判断h5的react
if(window.location.pathname.indexOf("/r/") == -1){
//追踪分销来源
var paramsList = ["_sdpchannel", "utm_medium", 'utm_source', 'utm_content'];
//对于h5的react的/r/路径,不增加这些参数
// if(window.location.href.indexOf("/r/") == -1){
for(var i = 0; i < paramsList.length; i++){
insertLPUrlToCPUrl(paramsList[i]);
}
// }
}
if(window.cmsLoadUrlOpt){
if(yit && yit.share){
yit.share();
}
}
function dealSpms(spm){
if (spm && spm.length > 0) {
spm = encodeURIComponent(spm) + "_";
var old_spm = getValueFromStringByKey(document.cookie, "_spms=", ";");
var exdate = new Date();
if (old_spm) {
old_spm = old_spm.replace(spm, "");
spm = spm + old_spm;
var pos = spm.indexOf("_");
if (pos > -1) {
pos = spm.indexOf("_", pos + 1);
}
if (pos > -1) {
pos = spm.indexOf("_", pos + 1);
}
if (pos > -1) {
spm = spm.substring(0, pos + 1);
}
}
exdate.setDate(exdate.getDate() + 3);
document.cookie = "_spms=" + spm + ";expires=" + exdate.toGMTString() + ";path=/;";
}
}
if(!window.isBack){
window.isBack = false;
//追踪站内轨迹
var spm = getParamFromUrl(window.location.search, "_spm");
dealSpms(spm);
}
var currentHref = window.location.href;
var isCmsUrl = false;
var cmsDom = document.querySelector("[data-cms-layoutid]");
if(!!cmsDom){
isCmsUrl = true;
}
if(!isCmsUrl){
function closest(el, selector) {
var matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;
while (el) {
if (matchesSelector.call(el, selector)) {
break;
}
el = el.parentElement;
}
return el;
}
window.addEventListener("click", function(event){
var temp = closest(event.target, '[spm]') || closest(event.target, '[data-spm]');
if(!!temp){
var spm = temp.getAttribute("spm") || temp.getAttribute("data-spm");
if(!!spm && /.[m]+\d+/.test(spm)){
dealSpms(spm);
}
}
}, false);
}
(function() {
var WeChatLogin = {
init: function() {
//微信登录
var tempToken = null;
if (!document.cookie == '') {
var arrCookie = document.cookie.split('; ');
//用spilt('; ')切割所有cookie保存在数组arrCookie中
var arrLength = arrCookie.length;
for (var i = 0; i < arrLength; i++) {
var ttk = '_ttk';
if (location.hostname.indexOf('sdpshop') > -1) {
ttk = '19_ttk';
}
if (arrCookie[i].indexOf(ttk) > -1) {
tempToken = true;
}
if(arrCookie[i].indexOf(ttk + "=undefined") > -1 ){
localStorage.setItem("latest_wx_oauth_time", 0);
localStorage.setItem("latest_wx_oauth_time_sdp", 0);
tempToken = false;
}
}
if (!tempToken) {
var lwot = localStorage.getItem("latest_wx_oauth_time");
if (location.hostname.indexOf('sdpshop') > -1) {
lwot = localStorage.getItem("latest_wx_oauth_time_sdp");
}
if (lwot && lwot > 0) {
var delta = Date.now() - lwot;
// 如果三十分钟之内发起过微信三方登录,却没有tempToken,判断是登录过程中有故障,暂时不再进行微信三方登录
if (delta < 30 * 60 * 1000) {
return;
}
}
if (this.WeChat()) {
var code = this.getParams(window.location.search.substr(1), "code");
if (!code) {
this.weChatLogin();
} else {
if(typeof $ != 'undefined' && typeof $.ajax != "undefined"){
this.getTempTokenAjax(code);
}else{
this.getTempToken(code);
}
}
}
}
}
},
WeChat: function() {
var isWeChat = navigator.userAgent.match(/MicroMessenger/i);
return isWeChat
},
//解析url中search的参数
getParams: function(searchValue, param) {
var params = searchValue.split("&");
var temp;
for (var i = 0; i < params.length; i++) {
if(params[i] && params[i].length > 0){
temp = params[i].split("=");
if(temp[0] == param && temp.length > 1){
return params[i];
}
}
}
return null;
},
//微信登录
weChatLogin: function() {
var redirectUrl = window.location.href;
var appid = "wx099e8607f32ec176";
// 分销页面 appid
if (location.hostname.indexOf('sdpshop') > -1) {
appid = "wx978a2948f868f26a";
}
if(/(sdpshop)+(-(s2|stage|i[0-9]+))+.yit.com/.test(window.location.hostname)){
// redirectUrl = window.location.href.replace(window.location.hostname, "wechat-proxy.yit.com/" + window.location.hostname);
appid = "wx371c100fded6c2f1";
}
if(/h5(-(s2|stage|i[0-9]+))+.yit.com/.test(window.location.hostname) || /(sdp)+(-(s2|stage|i[0-9]+))+.yit.com/.test(window.location.hostname)){
redirectUrl = window.location.href.replace(window.location.hostname, "wechat-proxy.yit.com/" + window.location.hostname);
appid = "wxb2d14ce231602a7e";//一试再试
}
if(typeof cmsAppInfo != "undefined"){
appid = cmsAppInfo.appId || appid;
}
var temp = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" +
encodeURIComponent(redirectUrl) + "&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
location.href = temp;
},
post: function (url, data, fn) {
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
// 添加http头,发送信息至服务器时内容编码类型
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
var yitToken = localStorage.getItem("yitiao_userToken");
if (yitToken) {
xhr.setRequestHeader("_tk", yitToken);
} else {
var yitCredential = localStorage.getItem("yit_userToken");
if (yitCredential) {
xhr.setRequestHeader("yitCredential", yitCredential);
}
}
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {
fn.call(this, xhr.responseText);
}
};
xhr.send(data);
},
//获取token
getTempTokenAjax: function(code) {
var requestData = {
'_mt': 'user.partnerOauth',
'_ts': Date.now(),
'_aid': 1,
"partnerId": "wechat_mp_base",
"authResp": code
};
if(window.location.hostname.indexOf("sdpshop") > -1){
requestData._aid = 19;
}
if (location.hostname.indexOf('sdpshop') > -1) {
requestData.partnerId = 'wechat_share_base';
}
var https = window.location.protocol.indexOf("https") > -1;
var urlValue = https ? "https://api.yit.com/apigw/m.api" : "http://m.api.yit.com/apigw/m.api";
if(typeof cmsAppInfo != "undefined"){
urlValue = https ? cmsAppInfo.httpsApi : cmsAppInfo.httpApi;
}
$.ajax({
//url: urlValue,
url: "/apigw/m.api",
type: "post",
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
crossDomain: true,
dataType: "json",
data: requestData,
xhrFields: {
withCredentials: true
},
beforeSend: function(xhr) {
var yitToken = localStorage.getItem("yitiao_userToken");
if (yitToken) {
xhr.setRequestHeader("_tk", yitToken);
} else {
var yitCredential = localStorage.getItem("yit_userToken");
if (yitCredential) {
xhr.setRequestHeader("yitCredential", yitCredential);
}
}
},
success: function(response) {
if (response.stat.code === 0 && response.content[0] && response.stat.stateList[0].code === 0) {
var expireDate = new Date();
expireDate.setDate(expireDate.getDate() + 14);
var ttk = '_ttk';
if (location.hostname.indexOf('sdpshop') > -1) {
ttk = '19_ttk';
}
document.cookie = ttk + '=' + response.content[0].tempToken + ';expires=' + expireDate.toGMTString() +
";path=/;";
}else{
if (location.hostname.indexOf('sdpshop') > -1) {
localStorage.setItem("latest_wx_oauth_time_sdp", Date.now());
} else {
localStorage.setItem("latest_wx_oauth_time", Date.now());
}
}
},
fail: function(error) {
console.log(error);
}
});
},
//获取token
getTempToken: function(code) {
var requestData = {
'_mt': 'user.partnerOauth',
'_ts': Date.now(),
'_aid': 1,
"partnerId": "wechat_mp_base",
"authResp": code
};
if(window.location.hostname.indexOf("sdpshop") > -1){
requestData._aid = 19;
}
if (location.hostname.indexOf('sdpshop') > -1) {
requestData.partnerId = 'wechat_share_base';
}
var convertResult = "" ;
for(var c in requestData){
convertResult+= c + "=" + requestData[c] + "&";
}
convertResult=convertResult.substring(0,convertResult.length-1);
//js原生请求
var xhr = new XMLHttpRequest();
xhr.open("POST", "/apigw/m.api", true);
// 添加http头,发送信息至服务器时内容编码类型
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
var yitToken = localStorage.getItem("yitiao_userToken");
if (yitToken) {
xhr.setRequestHeader("_tk", yitToken);
} else {
var yitCredential = localStorage.getItem("yit_userToken");
if (yitCredential) {
xhr.setRequestHeader("yitCredential", yitCredential);
}
}
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {
if(xhr.responseText && xhr.responseText.length > 0){
var responseObj = JSON.parse(xhr.responseText);
var expireDate = new Date();
expireDate.setDate(expireDate.getDate() + 14);
var ttk = '_ttk';
if (location.hostname.indexOf('sdpshop') > -1) {
ttk = '19_ttk';
}
if(responseObj.content && responseObj.content.length > 0 && !!responseObj.content[0].tempToken){
document.cookie = ttk + '=' + responseObj.content[0].tempToken + ';expires=' + expireDate.toGMTString() +
";path=/;";
}else{
if (location.hostname.indexOf('sdpshop') > -1) {
localStorage.setItem("latest_wx_oauth_time_sdp", Date.now());
} else {
localStorage.setItem("latest_wx_oauth_time", Date.now());
}
}
}
}else if(xhr.readyState == 4){
if (location.hostname.indexOf('sdpshop') > -1) {
localStorage.setItem("latest_wx_oauth_time_sdp", Date.now());
} else {
localStorage.setItem("latest_wx_oauth_time", Date.now());
}
}
};
xhr.send(convertResult);
}
};
// "3570.html" 为分销系统选品中心,不需要默认授权
var paths = ["login.html", "wxbind.html", "3570.html", '/r/login', 'track_detail.html', 'product.html', 'groupon_list.html', 'center.html', '/r/wxbind'];
if(typeof cmsAppInfo != "undefined" && cmsAppInfo && cmsAppInfo.pathArray){
paths = cmsAppInfo.pathArray;
}
var canWXOathFlag = true;
var pathName = window.location.pathname;
for(var i = 0; i < paths.length; i++){
if(pathName.indexOf(paths[i]) > -1){
canWXOathFlag = false;
break;
}
}
// 测试环境
var testEvn = '';
var hostname = window.location.hostname;
if (hostname.indexOf('-') > -1) {
testEvn = hostname.substring(hostname.indexOf('-'), hostname.indexOf('.'));
}
if (hostname === 'sdp' + testEvn + '.yit.com' || hostname.indexOf("sdp2") > -1 || hostname.indexOf('localhost') > -1 || /^[1-9]/.test(hostname)) {
canWXOathFlag = false;
}
if(canWXOathFlag){
WeChatLogin.init();
}
})();