zoukankan      html  css  js  c++  java
  • 纯前端实现微信自定义分享

    一、引入sha1.js、jwexin1.6.0.js文件

    二、wx.config()配置

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

    三、拿到timestamp、nonceStr、signature、access_token、jsapi_ticket。

    完整代码:

    var AppId = "";
    var Appsecret = "";
    
    ////转发去代码
    function getToken2(){
        if(window.localStorage.getItem('token2_time')){
            var token2_time = window.localStorage.getItem('token2_time');
            var currentTime = (new Date()).getTime();
            if(currentTime - token2_time>120000){
    //            alert("时间过期重新获取token")
                getNewToken2();
            }else{
                // alert("使用缓存中的数据")
                var jsapi_ticket = window.localStorage.getItem('jsapi_ticket');
                var nonce_str = createNonceStr().toString();
                var timestamp = createTimeStamp().toString();
                var url = location.href.split('#')[0];
                var string1 = getString1(nonce_str,timestamp,jsapi_ticket,url);
                var signature = sha1(string1);
                // alert("signature:"+signature)
                wx.config({
                    debug: false,
                    appId: AppId,
                    timestamp: timestamp,
                    nonceStr: nonce_str,
                    signature: signature,
                    jsApiList: [
                        'checkJsApi',
                        'updateAppMessageShareData',
                        'updateTimelineShareData',
                    'onMenuShareAppMessage']
                });
            }
        }else{
            // alert("第一次进入,保存数据")
            getNewToken2();
        }
    
    }
    
    function getNewToken2(){
        $.ajax({
            type: "get",
            url: "/proxy_all/api.weixin.qq.com/cgi-bin/token",
            async: true,
            dataType:"json",
            data: {
                "grant_type":"client_credential",
                "appid": AppId,
                "secret":Appsecret
            },
            success: function(data) {
                var token = data.access_token;
                // alert("token",token)
                console.log("转发的token:"+data.access_token)
                getTicket(token);
            }
        });
    }
    function getTicket(token){
        $.ajax({
            type:'get',
            url:"/proxy_all/api.weixin.qq.com/cgi-bin/ticket/getticket",
            async: true,
            dataType:'json',
            data:{
                "access_token":token,
                "type":"jsapi"
            },
            success:function(response){
            if(response.errcode=="0"){
                    produceSign(response.ticket);
                }
            }
        })
    }
    
    
    
    function produceSign(ticket) {
        var nonce_str = createNonceStr().toString();
        var timestamp = createTimeStamp().toString();
        var jsapi_ticket = ticket;
        var url = location.href.split('#')[0];
        var string1 = getString1(nonce_str, timestamp, jsapi_ticket, url);
        var signature = sha1(string1);
        console.log("signature:" + signature);
    
        // alert(""+ticket);
        window.localStorage.setItem("jsapi_ticket", jsapi_ticket);
        var currentTime = (new Date()).getTime();
        window.localStorage.setItem('token2_time', currentTime);
        wx.config({
            debug:false,
            appId: AppId,
            timestamp: timestamp,
            nonceStr: nonce_str,
            signature: signature,
            jsApiList: [
                'checkJsApi',
                'updateAppMessageShareData',
                'updateTimelineShareData',
                'onMenuShareAppMessage'
              ]
        });
        //"main.html?main_params="+Authorization_Str;
        wx.ready(function () {
            // 在这里调用 API
            //发送朋友
            wx.updateAppMessageShareData({
                title: "迎新春,阖家欢",    //分享标题
                desc: "2021牛年大吉,感恩有你。", // 分享描述
                link: "", // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                imgUrl: "", // 分享图标
                success: function (res) {
    
                },
                cancel: function () {
                }
    
            });
    
    //朋友圈
            wx.updateTimelineShareData({
                title: "迎新春,阖家欢",    //分享标题
                desc: "2021牛年大吉,感恩有你。", // 分享描述
                link: "", // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                imgUrl: "", // 分享图标
                success: function (res) {
    
                },
                cancel: function () {
                }
    
            });
    
    
            wx.error(function (res) {
                // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
                console.log(res);
            });
    
        });
    }
    
    wx.ready(function(){
        // alert("微信验证OK");
    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    
        wx.updateAppMessageShareData({
            title: "迎新春,阖家欢",    //分享标题
            desc: "2021牛年大吉,感恩有你。", // 分享描述
            link: "", // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
            imgUrl: "", // 分享图标
            success: function (res) {
    
                // 设置成功
                // alert("分享成功")
    
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
            }
    
        });
    
        wx.updateTimelineShareData({
            title: "迎新春,阖家欢",    //分享标题
            desc: "2021牛年大吉,感恩有你。", // 分享描述
            link: "", // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
            imgUrl: "", // 分享图标
            success: function (res) {
    
            },
            cancel: function () {
            }
    
        });
    
    });
    wx.error(function(res){
    
    // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
        alert("微信验证失败");
    });
    /**
         * 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式 (即 key1=value1&key2=value2…)拼接成字符串string1
         * @param nonce_str
         * @param timestamp
         * @param jsapi_ticket
         * @param url
         * @return
         */
    function getString1(nonce_str,timestamp,jsapi_ticket,url){
        var arr = ["noncestr="+nonce_str,"timestamp="+timestamp,"jsapi_ticket="+jsapi_ticket,"url="+url];
        arr.sort();
        var sb = arr.join("&");
        return sb;
    }
    
    function getSha1(str){
        return hex_sha1(str);
    }
    
    function createNonceStr(){
        return (new Date()).getTime();
    }
    
    function createTimeStamp(){
        var time = (new Date()).getTime().toString();
        return time.substr(0,9);
    }
  • 相关阅读:
    ReactJS入门学习一
    js控制html5 【video】标签中视频的播放和停止
    CentOS中vsftp安装与配置
    linux 添加多个网段
    js图片预加载后触发操作
    nodejs在后台运行
    asp.net环境搭建
    aspx aspx.cs
    linux 添加静态ip dns
    kali ssh服务开启登录
  • 原文地址:https://www.cnblogs.com/yangqing22/p/14377620.html
Copyright © 2011-2022 走看看