zoukankan      html  css  js  c++  java
  • 关于微信分享的一些心得之recommend.js(直接复制就行)

    // import $ from 'jquery'
    import Vue from 'vue'
    export default function (type,title,con,img,url,) {
      //  这里面的参数,你想怎么改就怎么改(你自己也可以添加),类型,标题,内容,图片,地址

      var timestamp = '';
      var nonceStr = '';
      var signature = '';
      var jsapi_ticket = '';
      var string_1 = '';
      var loc =window.location.href;
      var bossloc=window.location.href
    //因为要绑定推荐人的id也会一起传递过去,所以要帮推荐人的id给赋值为空,后台的接口里面在传推荐人的id用于记录,下面这一步就是赋值为空的操作
    /*第一种情况当oldUserId为第一个参数的时候就是  ?oldUserId*/
    if (bossloc.indexOf('?oldUserId')==-1){
        console.log(bossloc.split('&oldUserId=')[0])
        console.log( bossloc.split('&oldUserId=')[1])
        var num=bossloc.split('&oldUserId=')[1]

        console.log(bossloc.split('&oldUserId=')[0]+'&oldUserId='+num.slice(num.indexOf('&')))

        var bb=bossloc.split('&oldUserId=')[0]+'&oldUserId='+num.slice(num.indexOf('&'))
    }else {
        console.log(bossloc.split('?oldUserId=')[0])
        console.log( bossloc.split('?oldUserId=')[1])
        var number=bossloc.split('?oldUserId=')[1]

        console.log(number.slice(number.indexOf('&')))


        console.log(bossloc.split('?oldUserId=')[0]+'?oldUserId='+number.slice(number.indexOf('&')))
        var bb=bossloc.split('?oldUserId=')[0]+'?oldUserId='+number.slice(number.indexOf('&'))

    }

      //  其实这个不用slice也可以,这个将用于生成签名的参数

        /*这里有个坑就是就算你知道域名是多少,也不能将它写死,一定要动态获取,切记*/
      var location =loc.slice(0,loc.indexOf('#'))

      timestamp = getTimeStamp();
      nonceStr = getNonceStr();
      jsapi_ticket = getJsApi();
      //注意这个url
      string_1 = "jsapi_ticket="+jsapi_ticket+"&noncestr="+nonceStr+"&timestamp="+timestamp+"&url="+location;
      //生成签名
      signature = hex_sha1(string_1);

      //debug为true时,开启调试模式,这个用于检验签名等之类是否正确
      wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: urlWay.appId, // 必填,公众号的唯一标识
        timestamp: timestamp, // 必填,生成签名的时间戳
        nonceStr: nonceStr, // 必填,生成签名的随机串
        signature: signature,// 必填,签名,见附录1
        jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
      });

      wx.ready(function(){
        wx.checkJsApi({
          jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareQZone'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
          success: function(res) {
            // 以键值对的形式返回,可用的api值true,不可用为false
            // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
          }
        });
        var share_title = title;
        // var targetUrl = encodeURIComponent(url)


        //获取id,其实也可以通过参数传递过来
        let myid=sessionStorage.getItem('websocketUserId')
          //这个是base64位的加密,因为你重微信发送朋友圈或者发送朋友,他会在后面自己家参数,你分享出去后它还是有,就在哪个空的html中个干掉那个参数
          var Base64=function() {

              // private property
              let _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
              // public method for encoding
              return {
                  encode:function (input) {
                      var output = "";
                      var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
                      var i = 0;
                      input = this._utf8_encode(input);
                      while (i < input.length) {
                          chr1 = input.charCodeAt(i++);
                          chr2 = input.charCodeAt(i++);
                          chr3 = input.charCodeAt(i++);
                          enc1 = chr1 >> 2;
                          enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                          enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                          enc4 = chr3 & 63;
                          if (isNaN(chr2)) {
                              enc3 = enc4 = 64;
                          } else if (isNaN(chr3)) {
                              enc4 = 64;
                          }
                          output = output +
                              _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
                              _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
                      }
                      return output;
                  },
                  decode:function (input) {
                      var output = "";
                      var chr1, chr2, chr3;
                      var enc1, enc2, enc3, enc4;
                      var i = 0;
                      input = input.replace(/[^A-Za-z0-9+/=]/g, "");
                      while (i < input.length) {
                          enc1 = _keyStr.indexOf(input.charAt(i++));
                          enc2 = _keyStr.indexOf(input.charAt(i++));
                          enc3 = _keyStr.indexOf(input.charAt(i++));
                          enc4 = _keyStr.indexOf(input.charAt(i++));
                          chr1 = (enc1 << 2) | (enc2 >> 4);
                          chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                          chr3 = ((enc3 & 3) << 6) | enc4;
                          output = output + String.fromCharCode(chr1);
                          if (enc3 != 64) {
                              output = output + String.fromCharCode(chr2);
                          }
                          if (enc4 != 64) {
                              output = output + String.fromCharCode(chr3);
                          }
                      }
                      output = this._utf8_decode(output);
                      return output;
                  },
                  _utf8_encode:function (string) {
                      string = string.replace(/ /g," ");
                      var utftext = "";
                      for (var n = 0; n < string.length; n++) {
                          var c = string.charCodeAt(n);
                          if (c < 128) {
                              utftext += String.fromCharCode(c);
                          } else if((c > 127) && (c < 2048)) {
                              utftext += String.fromCharCode((c >> 6) | 192);
                              utftext += String.fromCharCode((c & 63) | 128);
                          } else {
                              utftext += String.fromCharCode((c >> 12) | 224);
                              utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                              utftext += String.fromCharCode((c & 63) | 128);
                          }

                      }
                      return utftext;
                  },
                  _utf8_decode:function (utftext) {
                      var string = "";
                      var i = 0;
                      var c2 = 0;
                      var c1 = c2 ;
                      var c = c1 ;
                      while ( i < utftext.length ) {
                          c = utftext.charCodeAt(i);
                          if (c < 128) {
                              string += String.fromCharCode(c);
                              i++;
                          } else if((c > 191) && (c < 224)) {
                              c2 = utftext.charCodeAt(i+1);
                              string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                              i += 2;
                          } else {
                              c2 = utftext.charCodeAt(i+1);
                              var c3 = utftext.charCodeAt(i+2);
                              string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                              i += 3;
                          }
                      }
                      return string;
                  }
              }
          }
          var b =  Base64();
          if (!myid){
              //这个是调龙龙的接口,绑定推荐人id和类型
              var linkto= b.encode(bb+'&oldId=&oldType=');
          }else {
              var linkto= b.encode(bb+'&oldId='+myid+'&oldType=2');
          }
           //这个就是最终分享出去的地址(应该是空html的地址加上它后台要取jumpUrl后面的真实跳转地址)
           var share_url=url+'?jumpUrl='+linkto;



          //这里没图片就用默认图片
          if (img){
              var share_img = img;
          }else {
              var share_img = 'http://morentupaian.png';
          }

          // switch (type){
          //   case '在线咨询':{
          //     share_img = urlWay.host+"images/zxzxmrtx.jpg";
          //     break;
        //   }
        //   case '医生主页':{
        //     share_img = urlWay.host+"images/zxzxmrtx.jpg";
        //     break;
        //   }
        //   case '在线咨询':{
        //     share_img = urlWay.host+"images/zxzxmrtx.jpg";
        //     break;
        //   }
        //   case '在线咨询':{
        //     share_img = urlWay.host+"images/zxzxmrtx.jpg";
        //     break;
        //   }
        //   case '在线咨询':{
        //     share_img = urlWay.host+"images/zxzxmrtx.jpg";
        //     break;
        //   }
        // }
          var desc = con;
    /*******************************************
     * 后面的所有都可以不动了
     * **************************************************************/
          //下面几个不用动
          wx.onMenuShareTimeline({
          title: share_title, // 分享标题
          link: share_url, // 分享链接
          imgUrl: share_img,// 分享图标
          success: function () {
            Vue.Toast('分享成功!!');
          },
          cancel: function () {
          }
        });
        wx.onMenuShareAppMessage({
          title: share_title, // 分享标题
          desc: desc, // 分享描述
          link: share_url, // 分享链接
          imgUrl: share_img, // 分享图标
          type: '', // 分享类型,music、video或link,不填默认为link
          dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
          success: function () {
            Vue.Toast('分享成功!!');
          },
          cancel: function () {
          }
        });
        wx.onMenuShareQQ({
          title: share_title, // 分享标题
          desc: desc, // 分享描述
          link: share_url, // 分享链接
          imgUrl: share_img, // 分享图标
          success: function () {
            Vue.Toast('分享成功!!');
          },
          cancel: function () {
          }
        });
        wx.onMenuShareQZone({
          title: share_title, // 分享标题
          desc: desc, // 分享描述
          link: share_url, // 分享链接
          imgUrl: share_img, // 分享图标
          success: function () {
            Vue.Toast('分享成功!!');
          },
          cancel: function () {
          }
        });
      });





    }
    function getTimeStamp(){
         var timestamp=new Date().getTime();
      var timestampstring = timestamp.toString();//一定要转换字符串
      return timestampstring;
    }
    function getNonceStr(){
      var $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
      var maxPos = $chars.length;
      var noceStr = "";
      for (var i = 0; i < 32; i++) {
          noceStr += $chars.charAt(Math.floor(Math.random() * maxPos));
      }
      return noceStr;
    }
    function getJsApi(){
        var jsApiTicket='';
        $.ajax({
            type : 'post',
            cache:false,
            async:false,
            url : urlWay.host+'wx/getJsApi.action',
            data : {
                action : "getJsApiTicket"
            },
            success : function(result) {

              // alert('getJsApi成功')
                jsApiTicket=result.jsApiTicket;
          //alert(jsApiTicket);
        },
        error :function (x) {
              //$('#pediatric_doctor_list').append(JSON.stringify(x));
        }
        });
        return jsApiTicket;
    }
    /*
     * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
     * in FIPS PUB 180-1
     * Version 2.1a Copyright Paul Johnston 2000 - 2002.
     * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
     * Distributed under the BSD License
     * See http://pajhome.org.uk/crypt/md5 for details.
     */

    /*
     * Configurable variables. You may need to tweak these to be compatible with
     * the server-side, but the defaults work in most cases.
     */
    var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
    var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
    var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

    /*
     * These are the functions you'll usually want to call
     * They take string arguments and return either hex or base-64 encoded strings
     */
    function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
    function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
    function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
    function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
    function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
    function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}

    /*
     * Perform a simple self-test to see if the VM is working
     */
    function sha1_vm_test()
    {
      return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
    }

    /*
     * Calculate the SHA-1 of an array of big-endian words, and a bit length
     */
    function core_sha1(x, len)
    {
      /* append padding */
      x[len >> 5] |= 0x80 << (24 - len % 32);
      x[((len + 64 >> 9) << 4) + 15] = len;

      var w = Array(80);
      var a =  1732584193;
      var b = -271733879;
      var c = -1732584194;
      var d =  271733878;
      var e = -1009589776;

      for(var i = 0; i < x.length; i += 16)
      {
        var olda = a;
        var oldb = b;
        var oldc = c;
        var oldd = d;
        var olde = e;

        for(var j = 0; j < 80; j++)
        {
          if(j < 16) w[j] = x[i + j];
          else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
          var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
            safe_add(safe_add(e, w[j]), sha1_kt(j)));
          e = d;
          d = c;
          c = rol(b, 30);
          b = a;
          a = t;
        }

        a = safe_add(a, olda);
        b = safe_add(b, oldb);
        c = safe_add(c, oldc);
        d = safe_add(d, oldd);
        e = safe_add(e, olde);
      }
      return Array(a, b, c, d, e);

    }

    /*
     * Perform the appropriate triplet combination function for the current
     * iteration
     */
    function sha1_ft(t, b, c, d)
    {
      if(t < 20) return (b & c) | ((~b) & d);
      if(t < 40) return b ^ c ^ d;
      if(t < 60) return (b & c) | (b & d) | (c & d);
      return b ^ c ^ d;
    }

    /*
     * Determine the appropriate additive constant for the current iteration
     */
    function sha1_kt(t)
    {
      return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
          (t < 60) ? -1894007588 : -899497514;
    }

    /*
     * Calculate the HMAC-SHA1 of a key and some data
     */
    function core_hmac_sha1(key, data)
    {
      var bkey = str2binb(key);
      if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);

      var ipad = Array(16), opad = Array(16);
      for(var i = 0; i < 16; i++)
      {
        ipad[i] = bkey[i] ^ 0x36363636;
        opad[i] = bkey[i] ^ 0x5C5C5C5C;
      }

      var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
      return core_sha1(opad.concat(hash), 512 + 160);
    }

    /*
     * Add integers, wrapping at 2^32. This uses 16-bit operations internally
     * to work around bugs in some JS interpreters.
     */
    function safe_add(x, y)
    {
      var lsw = (x & 0xFFFF) + (y & 0xFFFF);
      var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
      return (msw << 16) | (lsw & 0xFFFF);
    }

    /*
     * Bitwise rotate a 32-bit number to the left.
     */
    function rol(num, cnt)
    {
      return (num << cnt) | (num >>> (32 - cnt));
    }

    /*
     * Convert an 8-bit or 16-bit string to an array of big-endian words
     * In 8-bit function, characters >255 have their hi-byte silently ignored.
     */
    function str2binb(str)
    {
      var bin = Array();
      var mask = (1 << chrsz) - 1;
      for(var i = 0; i < str.length * chrsz; i += chrsz)
        bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
      return bin;
    }

    /*
     * Convert an array of big-endian words to a string
     */
    function binb2str(bin)
    {
      var str = "";
      var mask = (1 << chrsz) - 1;
      for(var i = 0; i < bin.length * 32; i += chrsz)
        str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
      return str;
    }

    /*
     * Convert an array of big-endian words to a hex string.
     */
    function binb2hex(binarray)
    {
      var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
      var str = "";
      for(var i = 0; i < binarray.length * 4; i++)
      {
        str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
          hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
      }
      return str;
    }

    /*
     * Convert an array of big-endian words to a base-64 string
     */
    function binb2b64(binarray)
    {
      var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
      var str = "";
      for(var i = 0; i < binarray.length * 4; i += 3)
      {
        var triplet = (((binarray[i   >> 2] >> 8 * (3 -  i   %4)) & 0xFF) << 16)
          | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
          |  ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
        for(var j = 0; j < 4; j++)
        {
          if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
          else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
        }
      }
      return str;
    }

  • 相关阅读:
    Checking Types Against the Real World in TypeScript
    nexus pip proxy config
    go.rice 强大灵活的golang 静态资源嵌入包
    几个golang 静态资源嵌入包
    rpm 子包创建学习
    Rpm Creating Subpackages
    ava 类似jest snapshot 功能试用
    ava js 测试框架基本试用
    The Architectural Principles Behind Vrbo’s GraphQL Implementation
    graphql-compose graphql schema 生成工具集
  • 原文地址:https://www.cnblogs.com/myfirstboke/p/8464082.html
Copyright © 2011-2022 走看看