commom-function

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值