代码改变世界

H5分享踩过的坑

2020-03-24 18:57  .net小跟班(杜)  阅读(285)  评论(0编辑  收藏  举报

我们在做H5页面的分享功能时,需要通过接口获取

appId: ‘’, // 必填,公众号的唯一标识

timestamp: , // 必填,生成签名的时间戳
nonceStr: ‘’, // 必填,生成签名的随机串
signature: ‘’,// 必填,签名
jsApiList: [] // 必填,需要使用的JS接口列表

获取调用微信JS接口的临时票据    在测试的时候需要在微信平台添加自己的ip白名单

#region 获取调用微信JS接口的临时票据
        /// <summary>
        /// 获取调用微信JS接口的临时票据
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        /// <summary>
        /// 获取JsApiTicket
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public static string GetJsApiTicket(string accessTokens)
        {
            if (string.IsNullOrWhiteSpace(accessTokens))
            {
                return null;
            }
            string url = $"https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token={accessTokens}";
            string getJsApiTicketUrl = HttpGetstr(url);
            var response = Newtonsoft.Json.JsonConvert.DeserializeObject<AccessTicketResponse>(getJsApiTicketUrl);

            return response.ticket;
        }
        #endregion

获取签名

/// <summary>
        /// 获取签名
        /// </summary>
        /// <param name="nonceStr">随机字符串</param>
        /// <param name="jsapi_ticket">jsapi_ticket,可通过GetJsApiTicket()方法获取</param>
        /// <param name="timeStamp">时间戳,当前时间减去1970-1-1,转换为秒</param>
        /// <param name="url">申请验证的地址全称(例如:http://abc.companycn.net/login.aspx</param>
        /// <returns></returns>
        public static string GetSignature(string nonceStr, string jsapi_ticket, string timeStamp, string url)
        {
            string oriString = string.Format("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", jsapi_ticket, nonceStr, timeStamp, url);
            return WeChatSha1(oriString);
        }

在前端方面  自己封装了一个js插件快速实现分享功能

在每次分享的时候  微信会拼接类似于from=XXX的url字符串,但我们在用这个新的url获取签名的时候不会成功,在这儿,需要做一下字符串的过滤

function getQueryString(name) {//根据字段看网址是否拼接&字符串
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        var r = window.location.search.substr(1).match(reg);
        if (r != null)
            return unescape(r[2]);
        return null;
    }
    var from = getQueryString('from');
    var appinstall = getQueryString('appinstall');
    var sec = getQueryString('sec');
    var timekey = getQueryString('timekey');

    if (from || appinstall || sec || timekey) {//假如拼接上了
        window.location.href = "http://dulux.companycn.net/duluxFour/";
    }

如果需要js插件  联系邮箱dujian@inexten.com