




已阅读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年果味啤酒行业当前竞争格局与未来发展趋势分析报告
- 2024年大数据应用及处理技术能力知识考试题库与答案
- 2025年保育员(初级)操作证考试试题及答案
- 2025年全民病毒感染防治基础知识试题与答案
- 2024年江苏省南京市保安员理论考试题库及答案
- (2025年)黑龙江省鸡西市中级会计职称经济法预测试题含答案
- (2025年)山西省晋城市中级会计职称经济法预测试题含答案
- 摔伤安全知识培训总结
- 陕西省汉中市2024-2025学年七年级下学期期末语文试题(解析版)
- 心复苏技术试题及答案
- 2024新科普版英语七年级上单词默写表
- 金融行业高质量发展专题研究报告
- 2024年首届全国“红旗杯”班组长大赛考试题库(单选、多选、判断题)
- 知识题库-人社练兵比武竞赛测试题及答案(五)
- 多功能报告厅设计
- 五年级上册科学青岛版全册教案
- 出入境证件承诺书
- 合理膳食 均衡营养课件
- 医院科教科主任竞聘演讲稿课件
- 《公路桥涵养护规范》(5120-2021)【可编辑】
- 医院科研诚信管理办法范例
评论
0/150
提交评论