zoukankan      html  css  js  c++  java
  • 微信网页授权 、获取用户昵称 头像等信息

    一、重定向

    function getCode () {  
      var param = {
        app: app,
        origin_url: window.location.href
      }
      var queryString = getSignature(param) + '&' + getQueryString(param)  // 未授权,跳转到授权页面
      if (!localStorage.getItem('wxcode')) {
        window.location.href = 'http://wx.linktodeal.com/sns/authorization?'+ queryString
      }
    }

    二、获取用户信息

    function getUserInfo () {
      $.ajax({
        type: "GET",
        url: "http://wx.linktodeal.com/sns/info?app=PDCUGQUBOOUOP5XTP&code="+ localStorage.getItem('wxcode'),
        dataType: "json",
        success: function(data){
          if (data.code == 0) {
            var saveData = JSON.stringify(data.data)
            getDomById('name').innerHTML = data.data.nickname
            localStorage.setItem('userinfo', saveData)
            if (localStorage.getItem('source')) {
              getCreateId()
            } else {
              if (!localStorage.getItem('hasRefresh')) {
                checkCreate()
              }
            }
          } else {
            alert('服务器开了个小差,请刷新重试')
          }
        }
      });
    }

    三、引入必要的js

    <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    <script src="//unpkg.com/crypto-js/crypto-js.js"></script>
    <script src="js/signature.js"></script>

    分装的签名获取(signature.js)

    'use strict';
    
    var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
    
    var appid = 'PDCUGQUBOOUOP5XTP';
    var secret = 'ox2RVFBD8jNY79pUmG7gwrN2pCD4p10P';
    function getSignature(data, token) {
      var query = {
        timestamp: Math.ceil(new Date().getTime() / 1000),
        noncestr: randomChar(16),
        appid: appid,
        access_token: token || ''
      };
    
      var _data = deepCopy(data);
      _data.timestamp = query.timestamp;
      _data.noncestr = query.noncestr;
      _data.appid = query.appid;
      _data.access_token = query.access_token;
      forEachValue(_data, function (item, key) {
        var type = typeof item === 'undefined' ? 'undefined' : _typeof(item);
        if (type === 'object') {
          _data[key] = encodeStr(JSON.stringify(item));
        } else if (type === 'function') {} else if (type === 'string') {
          _data[key] = encodeStr(item);
        }
      });
      var str = getQueryString(_data).toUpperCase();
      var strMd5 = CryptoJS.MD5(str).toString() + secret;
      query.signature = CryptoJS.SHA256(strMd5).toString();
      return getQueryString(query);
    }
    function randomChar(l) {
      var x = '0123456789qwertyuioplkjhgfdsazxcvbnmABCDEFGHIJKLMNOPQRSTUVWXYZ';
      var tmp = '';
      for (var i = 0; i < l; i++) {
        tmp += x.charAt(Math.ceil(Math.random() * 100000000) % x.length);
      }
      return tmp;
    }
    function encodeStr(str) {
      return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/(/g, '%28').replace(/)/g, '%29').replace(/*/g, '%2A');
    }
    function getQueryString(obj) {
      var arr = [];
      var _tmpArray = [];
      for (var index in obj) {
        _tmpArray.push(index);
      }
      _tmpArray.sort();
    
      _tmpArray.forEach(function (key) {
        if (_typeof(obj[key]) === 'object') {
          obj[key].forEach(function (item) {
            arr.push(key + '[]' + '=' + item);
          });
        } else {
          arr.push(key + '=' + obj[key]);
        }
      });
      return arr.join('&');
    }
    function forEachValue(obj, fn) {
      Object.keys(obj).forEach(function (key) {
        return fn(obj[key], key);
      });
    }
    function deepCopy(obj) {
      var cache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
      if (obj === null || (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object') {
        return obj;
      }
      var hit = find(cache, function (c) {
        return c.original === obj;
      });
      if (hit) {
        return hit.copy;
      }
    
      var copy = Array.isArray(obj) ? [] : {};
      cache.push({
        original: obj,
        copy: copy
      });
    
      Object.keys(obj).forEach(function (key) {
        copy[key] = deepCopy(obj[key], cache);
      });
    
      return copy;
    }
    function GetQueryString(name) {
      var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
      var r = window.location.search.substr(1).match(reg);
      if (r != null) {
        return unescape(r[2]);
      }
      return null;
    }
  • 相关阅读:
    【拓扑排序】【堆】CH Round #57
    【数论】【筛法求素数】【欧拉函数】bzoj2818 Gcd
    【数论】【枚举约数】【欧拉函数】bzoj2705 [SDOI2012]Longge的问题
    【暴力】vijos P1897 学姐吃牛排
    【kruscal】【最小生成树】【并查集扩展】bzoj3714 [PA2014]Kuglarz
    【set】bzoj2761 [JLOI2011]不重复数字
    【尺取法】【Multiset】bzoj1342 [Baltic2007]Sound静音问题
    【神奇の做法】bzoj2456 mode
    【博弈论】bzoj2463 [中山市选2009]谁能赢呢?
    【set】bzoj3715 [PA2014]Lustra
  • 原文地址:https://www.cnblogs.com/candy-Yao/p/9263133.html
Copyright © 2011-2022 走看看