ASP NET MVC 微信JS-SDK认证.doc_第1页
ASP NET MVC 微信JS-SDK认证.doc_第2页
ASP NET MVC 微信JS-SDK认证.doc_第3页
ASP NET MVC 微信JS-SDK认证.doc_第4页
ASP NET MVC 微信JS-SDK认证.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ASP.NET MVC 微信JS-SDK认证layout: posttitle: ASP.NET MVC 微信JS-SDK认证category: .netdate: 2016-11-01 00:00:00tags:.netjavascript写在前面前阵子因为有个项目需要做微信自定义分享功能,因而去研究了下微信JS-SDK相关知识。此文做个简单的记(tu)录(cao).开始所有的东西都从文档开始:微信JSSDK说明文档项目需要用到的是分享接口 不过使用微信JS-SDK之前,需要做JS接口认证。认证如下:步骤一:绑定域名步骤二:引入JS文件步骤三:通过config接口注入权限验证配置步骤四:通过ready接口处理成功验证步骤五:通过error接口处理失败验证步骤一中允许使用域名/子域名,只要/xxx.txt或者/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.看完之后总结如下:使用config接口注入权限验证配置,重点是生成合法的signatrue生成signature需要通过appid和secret获取token时间戳和调用接口URL必不可少此操作需要服务端完成,不能使用客户端实现整个过程变成:通过appid和secret获取access_token,接着使用token获取jsapi_ticket;拿到jsapi_ticket之后,把jsapi_ticket、时间戳、随机字符串、接口调用页面URL 拼接成完整字符串,使用sha1算法加密得到signature。最后返回至页面,在wx.config里面填入appid,上一步的时间戳timestamp,上一部的随机字符串、sha1拿到的signature,想要使用的JS接口。废话少说,直接上代码吧。代码时间 public class WeiXinController : Controller public static readonly string appid = System.Web.Configuration.WebConfigurationManager.AppSettingswxappid; public static readonly string secret = System.Web.Configuration.WebConfigurationManager.AppSettingswxsecret; public static readonly bool isDedug = System.Web.Configuration.WebConfigurationManager.AppSettingsIsDebug =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(/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 (/cgi-bin/ticket/getticket?access_token= + token + &type=jsapi); dynamic ticketValue = JsonConvert.DeserializeObject(resultString); if (ticketValue = null | Value.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; webR.UserAgent = Mozilla/4.0; webRequest.Headers.Add(Accept-Encoding, gzip, deflate); HttpWebResponse webResponse = (System.Net.HttpWebResponse)webRequest.GetResponse(); /获取目标网站的编码格式 string contentype = webResponse.HeadersContent-Type; Regex regex = new Regex(charsets*=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).Groups1.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 ; PS:这里要注意缓存一下_ticket(即access_token),照微信文档说的,access_token两个小时内有效,不需要频繁调用。而且获取access_token的接口有调用次数的限制,如果超过了次数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论