




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年浙江宁波市卫生健康委部分直属事业单位公开招聘高层次人才69人(第二批)模拟试卷附答案详解(典型题)
- 2025江苏盐城市妇幼保健院招聘编外专业技术人员16人考前自测高频考点模拟试题(含答案详解)
- 2025湖南娄底冷水江市城发实业有限公司公开招聘实验室试验员的考前自测高频考点模拟试题及答案详解(必刷)
- 2025黑龙江双鸭山市宝清县招聘就业见习人员917人模拟试卷及1套参考答案详解
- 2025湖北恩施州巴东县信陵镇人民政府公益性岗位人员招聘8人考前自测高频考点模拟试题及答案详解(易错题)
- 2025年中国安能集团置业有限公司招聘12人笔试题库历年考点版附带答案详解
- 2025江西吉水县某行政单位招聘4人模拟试卷有完整答案详解
- 2025年蚌埠市第二人民医院招聘5人模拟试卷及1套完整答案详解
- 2025年“才聚齐鲁成就未来”山东高速集团有限公司社会招聘224人笔试题库历年考点版附带答案详解
- 2025贵州织金翔盛工业发展有限公司招聘考前自测高频考点模拟试题及答案详解(夺冠)
- 新媒体渠道管理办法
- 2025年浙江省人事考试工作(4月26日事业单位笔试)笔试历年典型考题及考点剖析附带答案详解
- (医疗质量及标准)JCI医院评审标准(第四版)版
- 机械加工工艺与工具知识测试试卷
- 沈阳停车收费管理办法
- 2025版小学语文新课程标准
- 2025年 无锡市工会社会工作者招聘考试笔试试题附答案
- 3D打印车间粉尘防爆管理体系
- JG/T 441-2014额定电压450/750 V及以下双层共挤绝缘辐照交联无卤低烟阻燃电线
- 铁路旅客运输服务普速列车设备设施规范课件
- 外聘电工安全协议书范本
评论
0/150
提交评论