.NET微信网页开发之JS-SDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解

前端开发 作者: 2024-08-26 08:30:01
前言: 因为接下来会有几篇关于微信JS-SDK功能使用的文章,主要会对微信分享,获取设备信息,获取地理位置,微信扫一扫这几个功能进行讲解。而这几个功能都是围绕着微信JS-SDK实现的,首先使用微信JS

步骤一、绑定安全域名:

步骤二、引入JS文件:

<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>

步骤三、通过config接口注入权限验证配置:  

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

步骤四、通过ready接口处理成功验证:

wx.ready(function(){
    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});  

步骤五、通过error接口处理失败验证:

wx.error(function(res){
    // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
{"access_token":"ACCESS_TOKEN","expires_in":7200}
{"errcode":40013,"errmsg":"invalid appid"}
        /// <summary>
        /// 获取微信公众号全局唯一接口凭证
        </summary>
        <returns></returns>
        public static string RequestAccessToken()
        {   // 设置参数
            string appid=WxAppId;第三方用户唯一凭证
            string appsecret=WxAppSecret;第三方用户唯一凭证密钥,即appsecret
            
            请求接口获取
            string _url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + &secret=" + appsecret;
            string method = GET";
            HttpWebRequest request = WebRequest.Create(_url) as HttpWebRequest;
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            request.Method = method;
            request.ContentType = text/html;
            request.Headers.Add(charset",utf-8);

            发送请求并获取响应数据
            HttpWebResponse response = request.GetResponse()  HttpWebResponse;
            Stream responseStream = response.GetResponseStream();
            StreamReader sr =  StreamReader(responseStream,Encoding.UTF8);
            获取返回过来的结果
            string content = sr.ReadToEnd();

            dynamic resultContent=JsonConvert.DeserializeObject(content,new { access_token="",expires_in="" }.GetType());
            if (resultContent!=null&&!string.IsNullOrWhiteSpace(resultContent.access_token)) 注意:请求成功时是不会有errcode=0返回,判断access_token是否有值即可
            {
                return resultContent.access_token;返回请求唯一凭证
            }
            else
            {
                请求失败,返回为空
                return ;
            }
        }
         获取jsapi_ticket微信公众号调用微信JS接口的临时票据
        <param name="accessToken">微信公众号的全局唯一接口调用凭证</param>
        string RequestJsapi_ticket( accessToken)
        {
            string content = ;
            tryTODO:注意api_ticket 是用于调用微信卡券JS API的临时票据,有效期为7200 秒,通过access_token 来获取。

                string url = https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + &type=jsapi;
                ;
                HttpWebRequest request = WebRequest.Create(url)  HttpWebRequest;
                CookieContainer cookieContainer =  CookieContainer();
                request.CookieContainer = cookieContainer;
                request.AllowAutoRedirect = ;
                request.Method = method;
                request.ContentType = ;
                request.Headers.Add();
                发送请求并获取响应数据
                HttpWebResponse response = request.GetResponse()  HttpWebResponse;
                Stream responseStream = response.GetResponseStream();
                StreamReader sr = 获取返回过来的结果
                content = sr.ReadToEnd();
                dynamic resultStr = JsonConvert.DeserializeObject(content,1)">new { errcode=}.GetType());

                请求成功
                if (resultStr.errcode==0"&&resultStr.errmsg==ok)
                {
                    content=resultStr.ticket;
                }
                
                {
                    content = ;
                }
               
                return content;
            }
            catch (Exception ex)
            {
                content = ex.Message;
                 content;
            }
        }
        ///  随机字符串数组集合
        </summary>
        private readonly string[] NonceStrings = new []
                                    {
                                    abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ
                                    };

         生成签名的随机串
         CreateNonceStr()
        {
            Random random =  Random();
            var sb =  StringBuilder();
            var length = NonceStrings.Length;

            生成15位数的随机字符串,当然也可以通过控制对应字符串大小生成,但是至多不超过32位
            for (int i = 0; i < 15; i++)
            {
                sb.Append(NonceStrings[random.Next(length - 1)]);通过random获得的随机索引到,NonceStrings数组中获取对应数组值
 sb.ToString();
        }
         获取当前时间戳
        long GetCurrentUinxTime()
        {
            DateTime currentDate = DateTime.Now;当前时间
            转化为时间戳
            DateTime localTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970,1)">1,1)">1));
            return long.Parse((currentDate - localTime).TotalSeconds.ToString().Split('.')[0]);
        }
        //获取当前网页URL
        string currentWebUrl = Request.Url.ToString();
         获取签名
        <param name="jsapi_ticket">微信公众号调用微信JS临时票据<param name="nonceStr">随机串<param name="timestamp">时间戳<param name="url">当前网页URLstring GetSignature(string jsapi_ticket,1)">string nonceStr,1)">long timestamp,1)"> url)
        {

            var string1Builder = 注意这里参数名必须全部小写,且必须有序
            string1Builder.Append(jsapi_ticket=").Append(jsapi_ticket).Append(&)
                          .Append(noncestr=").Append(nonceStr).Append(timestamp=").Append(timestamp).Append(url=").Append(url.IndexOf(#") >= 0 ? url.Substring(0,url.IndexOf()) : url);

             Sha1(string1Builder.ToString(),Encoding.UTF8);
        }

         签名加密,使用SHA加密所得
        <param name="content">签名加密参数<param name="encode">编码UTF-8string Sha1( content,Encoding encode)
        {
            
            {
                SHA1 sha1 =  SHA1CryptoServiceProvider();
                byte[] bytesIn = encode.GetBytes(content);
                byte[] bytesOut = sha1.ComputeHash(bytesIn);
                sha1.Dispose();
                string result = BitConverter.ToString(bytesOut);
                result = result.Replace(- result;
            }
             (Exception ex)
            {
                throw new Exception(SHA1加密出错: ex.Message);
            }
        }
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_68874.html