JSAPI.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net.Http;
  6. using Codeplex.Data;
  7. using LYFZ.Weixin.SDK.Helpers;
  8. namespace LYFZ.Weixin.SDK.JSSDK
  9. {
  10. /// <summary>
  11. /// http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
  12. /// 微信JS-SDK使用权限签名算法
  13. /// </summary>
  14. public class JSAPI
  15. {
  16. /// <summary>
  17. /// 获取jsapi_ticket
  18. /// jsapi_ticket是公众号用于调用微信JS接口的临时票据。
  19. /// 正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。
  20. /// 由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。
  21. /// </summary>
  22. /// <param name="access_token">BasicAPI获取的access_token,也可以通过TokenHelper获取</param>
  23. /// <returns></returns>
  24. public static dynamic GetTickect(string access_token)
  25. {
  26. var url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", access_token);
  27. var client = new HttpClient();
  28. var result = client.GetAsync(url).Result;
  29. if (!result.IsSuccessStatusCode) return string.Empty;
  30. var jsTicket = DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
  31. return jsTicket;
  32. }
  33. /// <summary>
  34. /// 签名算法
  35. /// </summary>
  36. /// <param name="jsapi_ticket">jsapi_ticket</param>
  37. /// <param name="noncestr">随机字符串(必须与wx.config中的nonceStr相同)</param>
  38. /// <param name="timestamp">时间戳(必须与wx.config中的timestamp相同)</param>
  39. /// <param name="url">当前网页的URL,不包含#及其后面部分(必须是调用JS接口页面的完整URL)</param>
  40. /// <returns></returns>
  41. public static string GetSignature(string jsapi_ticket, string noncestr, long timestamp, string url, out string string1)
  42. {
  43. var string1Builder = new StringBuilder();
  44. string1Builder.Append("jsapi_ticket=").Append(jsapi_ticket).Append("&")
  45. .Append("noncestr=").Append(noncestr).Append("&")
  46. .Append("timestamp=").Append(timestamp).Append("&")
  47. .Append("url=").Append(url.IndexOf("#") >= 0 ? url.Substring(0, url.IndexOf("#")) : url);
  48. string1 = string1Builder.ToString();
  49. return Util.Sha1(string1);
  50. }
  51. }
  52. }