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

编程之家收集整理的这篇文章主要介绍了.NET微信网页开发之JS-SDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

 前言:

  因为接下来会有几篇关于微信JS-SDK功能使用的文章,主要会对微信分享获取设备信息,获取地理位置,微信扫一扫这几个功能进行讲解。而这几个功能都是围绕着微信JS-SDK实现的,首先使用微信JS-SDK时我们需要生成对应的配置信息,才能够成功的调用微信JS-SDK。看了下微信官方文档对于accessToken和jsapi_ticket的生成示例代码并没有看到咱们大.Net的,所以为了帮助那些刚接触微信开发的同学,在这里我会把自己在使用微信JS-SDK的一些步骤和配置信息生成方法展示出来,希望能够和大家相互学习共同进步。

微信JS-SDK详情说明请移步微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

JSSDK使用步骤:

步骤一、绑定安全域名:

登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

步骤二、引入JS文件

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js

项目中: 

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

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

注意:所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。

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

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

注意:假如需要在页面加载时就调用的话,需要把对应的执行函数放到wx.ready(function(){});方法里面加载执行,之前我调用加载就获取地理位置的接口就是因为没有放到这里面所以一直没有获取用户当前经纬度坐标

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

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

wx.error(function(res){
    // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});

接口调用说明请查看微信开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 

获取access_token(公众号的全局唯一接口调用凭据):

详细概述:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

*注意,关于请求返回值说明:

正常情况下(即请求成功时),微信只会返回下述JSON数据包给公众号:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):

{"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接口的临时票据(前提是:获取到了公众号全局唯一接口调用凭据):

         获取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;
            }
        }

生成签名的随机串(nonceStr):

        ///  随机字符串数组集合
        </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();
        }

生成签名时间戳(timestamp):

         获取当前时间戳
        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:

注意:一定要是在安全域名内,否则生成的是无效的签名。

        //获取当前网页URL
        string currentWebUrl = Request.Url.ToString();

生成签名(signature):

微信JS-SDK使用权限签名算法详细概述:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

         获取签名
        <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);
            }
        }

总结:

  最后要总结一下关于对接第三方的一些心得,有的时候我们在实际项目开发中也许会对接一些我们之前从来都没有对接过的第三方软件公司的一些功能比如最为常见的是微信,支付宝,QQ等,在对接之前我们第一步要做的是明确自己的需求,有目的性的去阅读第三方对接开发文档,因为一般对接文档都是有对应的功能详细说明,你不可能把所有的文档都看完了再去对接,这样的话你的项目开发进度肯定是会延期的。学会使用第三方提供的demo示例,因为这将会在很大的程度上帮助你了解功能的实现原理。

总结

以上是编程之家为你收集整理的.NET微信网页开发之JS-SDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解全部内容,希望文章能够帮你解决.NET微信网页开发之JS-SDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478

猜你在找的微信公众号相关文章

前言: 之前有个项目需要调用微信扫描二维码的功能,通过调用微信扫码二维码功能,然后去获取到系统中生成的二维码信息。正好微信JS-SDK提供了调用微信扫一扫的功能接口,下面让我们来看看是如何实现的吧。
前言: 因为接下来会有几篇关于微信JS-SDK功能使用的文章,主要会对微信分享,获取设备信息,获取地理位置,微信扫一扫这几个功能进行讲解。而这几个功能都是围绕着微信JS-SDK实现的,首先使用微信JS
前言: 最近在项目中使用到了微信消息模板推送的功能,也就是将对应的消息推送到对应的用户微信上去,前提是你必须要有一个微信公众号并且是付费了的才会有这个功能,还有就是要推送的用户必须是的关注了你的微信公
背景: 使用.NET对接微信公众号支付功能。 问题: 今天在做网站微信支付的时候,一直提示“微信公众号支付提示mch_id参数格式错误” ! 解决方法: 其实这个问题一般并不是说你配置有错,首先它提示
前言: 前段时间有一个关于通过获取用户当前经纬度坐标,计算出该用户距离某指定地点之间的距离。因为做这个项目需要能够获取到比较精确的经纬度坐标,刚开始使用的是百度地图结果发现百度地图地位不太准确(有时候
前言: 最近做了一个通过调用微信企业付款到用户零钱的功能,真的挺奇怪的,在我本地调试的时候都没有问题,但是当我发布到服务上的时候却一直无法读取到我的证书信息。读取的代码如下,使用的是微信官方文档提供的
获取你的Access Token a)可以采用网址的形式: 用appid和appsecert获得access token,接口为https://api.weixin.qq.com/cgi-bin/to
每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id),分别介绍临时二维码和永久二维码的创建二维码ticket过程。 临时二维码请求说明 http请求URL https://a
创建菜单的方法 首先确定你的菜单的JSON结构,比如 a)将以下代码保存为menu.php,并且在浏览器中运行该文件(比如 http://1.applinzi.com/menu.php),将直接向微信
一、获取用户基本信息接口 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。公
解决方案: 之前用的是1.6.0版本,改成jweixin-1.2.0.js,wx.onMenuShareTimeline,wx.onMenuShareAppMessage就成功了。 不知道是不是微信的
前言: 本文是以微信公众号中的订阅号(个人)来进行简单介绍,本人也是刚刚开始学习,有不足之处,欢迎批评指正。&#xD;&#xA;&#xD;&#xA;先粘贴2个帮助链接:&#xD;&#xA;&#xD;&#xA;入门指引:http://mp.weixin.qq.co