千家信息网

ASP.NET MVC中如何实现微信JS-SDK认证

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要为大家展示了"ASP.NET MVC中如何实现微信JS-SDK认证",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"ASP.NET MVC中如何实
千家信息网最后更新 2025年11月07日ASP.NET MVC中如何实现微信JS-SDK认证

这篇文章主要为大家展示了"ASP.NET MVC中如何实现微信JS-SDK认证",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"ASP.NET MVC中如何实现微信JS-SDK认证"这篇文章吧。

ASP.NET MVC微信JS-SDK认证,具体内容:

写在前面

前阵子因为有个项目需要做微信自定义分享功能,因而去研究了下微信JS-SDK相关知识。

开始
所有的东西都从文档开始:微信JSSDK说明文档

项目需要用到的是分享接口 不过使用微信JS-SDK之前,需要做JS接口认证。

认证如下:

步骤一:绑定域名

步骤二:引入JS文件

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

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

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

具体解释:

步骤一中允许使用域名/子域名,只要xx.com/xxx.txt或者xx.com/mp/xxx.txt能访问就好。域名认证通过之后,此域名下的所有端口的网站都可以使用JS-SDK。

步骤二没什么问题,略过。

步骤三最磨人,下面单独讲解。

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: '',// 必填,签名,见附录1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2});

看到这里肯定懵逼了,这是都什么鬼...怎么玩啊。

提示我们去看附录1...看完之后总结如下:

1.使用config接口注入权限验证配置,重点是生成合法的signatrue
2.生成signature需要通过appid和secret获取token
3.时间戳和调用接口URL必不可少
4.此操作需要服务端完成,不能使用客户端实现

整个过程变成:

1.通过appid和secret获取access_token,接着使用token获取jsapi_ticket;

2.拿到jsapi_ticket之后,把jsapi_ticket、时间戳、随机字符串、接口调用页面URL 拼接成完整字符串,使用sha1算法加密得到signature。

3.最后返回至页面,在wx.config里面填入appid,上一步的时间戳timestamp,上一部的随机字符串、sha1拿到的signature,想要使用的JS接口。

废话少说,直接上代码吧。

代码时间

 public class WeiXinController : Controller { public static readonly string appid = System.Web.Configuration.WebConfigurationManager.AppSettings["wxappid"]; public static readonly string secret = System.Web.Configuration.WebConfigurationManager.AppSettings["wxsecret"]; public static readonly bool isDedug = System.Web.Configuration.WebConfigurationManager.AppSettings["IsDebug"] =="true"; public static string _ticket = ""; public static DateTime _lastTimestamp; public ActionResult Info(string url,string noncestr) {  if (string.IsNullOrEmpty(_ticket) ||   _lastTimestamp == null || (_lastTimestamp - DateTime.Now).Milliseconds > 7200)  {  var resultString = HTTPHelper.GetHTMLByURL("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="   + appid + "&secret=" + secret);  dynamic resultValue = JsonConvert.DeserializeObject(resultString);  if (resultValue == null || resultValue.access_token == null   || resultValue.access_token.Value == null)  {   return Json(new { issuccess = false,    error = "获取token失败" });  }  var token = resultValue.access_token.Value;  resultString = HTTPHelper.GetHTMLByURL  ("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" +   token + "&type=jsapi");  dynamic ticketValue = JsonConvert.DeserializeObject(resultString);  if (ticketValue == null || ticketValue.errcode == null  || ticketValue.errcode.Value != 0 || ticketValue.ticket == null)   return Json(new { issuccess = false,   error = "获取ticketValue失败" });  _ticket = ticketValue.ticket.Value;  _lastTimestamp = DateTime.Now;  var timestamp = GetTimeStamp();  var hexString = string.Format("jsapi_ticket={0}&noncestr={3}×tamp={1}&url={2}",  _ticket, timestamp, url,noncestr);  return Json(new {   issuccess = true,    sha1value = GetSHA1Value(hexString),    timestamp = timestamp,    url = url,    appid = appid,    debug=isDedug,   tiket=_ticket  });    }  else  {  var timestamp = GetTimeStamp();  var hexString = string.Format("jsapi_ticket={0}&noncestr=1234567890123456×tamp={1}&url={2}",   _ticket, timestamp, url);  return Json(new {    issuccess = true, sha1value = GetSHA1Value(hexString),   timestamp = timestamp, url = url,   appid = appid, debug = isDedug,tiket = _ticket  });  } } private string GetSHA1Value(string sourceString) {  var hash = SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(sourceString));  return string.Join("",   hash.Select(b => b.ToString("x2")).ToArray()); } private static string GetTimeStamp() {  TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);  return Convert.ToInt64(ts.TotalSeconds).ToString(); } }  public class HTTPHelper { public static string GetHTMLByURL(string url) {  string htmlCode = string.Empty;  try  {  HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);  webRequest.Timeout = 30000;  webRequest.Method = "GET";  webRequest.UserAgent = "Mozilla/4.0";  webRequest.Headers.Add("Accept-Encoding", "gzip, deflate");  HttpWebResponse webResponse = (System.Net.HttpWebResponse)webRequest.GetResponse();  //获取目标网站的编码格式  string contentype = webResponse.Headers["Content-Type"];  Regex regex = new Regex("charset\\s*=\\s*[\\W]?\\s*([\\w-]+)", RegexOptions.IgnoreCase);  if (webResponse.ContentEncoding.ToLower() == "gzip")//如果使用了GZip则先解压  {   using (System.IO.Stream streamReceive = webResponse.GetResponseStream())   {   using (var zipStream = new System.IO.Compression.GZipStream(streamReceive, System.IO.Compression.CompressionMode.Decompress))   {    //匹配编码格式    if (regex.IsMatch(contentype))    {    Encoding ending = Encoding.GetEncoding    (regex.Match(contentype).Groups[1].Value.Trim());    using (StreamReader sr = new System.IO.StreamReader(zipStream, ending))    {     htmlCode = sr.ReadToEnd();    }    }    else    {    using (StreamReader sr = new System.IO.StreamReader(zipStream, Encoding.UTF8))    {     htmlCode = sr.ReadToEnd();    }    }   }   }  }  else  {   using (System.IO.Stream streamReceive = webResponse.GetResponseStream())   {   var encoding = Encoding.Default;   if (contentype.Contains("utf"))    encoding = Encoding.UTF8;   using (System.IO.StreamReader sr = new System.IO.StreamReader(streamReceive, encoding))   {    htmlCode = sr.ReadToEnd();   }   }  }  return htmlCode;  }  catch (Exception ex)  {  return "";  } } }

以上是"ASP.NET MVC中如何实现微信JS-SDK认证"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

接口 步骤 认证 时间 验证 内容 域名 页面 生成 配置 字符 字符串 客户 客户端 权限 篇文章 附录 代码 信息 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发如何制作旋钮开关 涉县软件开发者在线咨询 成人本科软件开发能进华为吗 手机如何 ftp服务器 上饶服务器要多少费用 网络安全法的立法意义及立法过程 教育软件开发包括哪些 oracle数据库 锁表 讨论网络安全的重要性英语 干部网络安全培训 软件开发瀑布模型存在的问题是 服务器管理面板使用 广州力挚网络技术有限公司 网站及服务器安全问题 青海同方服务器供应公司 鄢陵游戏软件开发在线咨询 服务器管理器未分配 数据库如何解除报表设计联系 数字化技术与数据库的区别 新生日记软件开发 北京为村互联网科技研究中心 中国最大的网络安全事件2010 为什么服务器一直连接不上网络 ssh清空表数据库 学校网络安全目标责任书 商业科技互联网 网络安全有关 中国哪个大学网络安全专业好 教育系统网络安全检查自查 中央棋牌服务器
0