Asp.Net页面自定义微信分享
2015-06-29 14:36
701 查看
参考微信JS-SDK说明文档,
1、先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
2、在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js
要分享的页面代码:
1、先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
2、在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js
要分享的页面代码:
using System.Runtime.Serialization.Json;//需添加System.Runtime.Serialization引用 public partial class WeiXinShareScript : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { RegisterWeiXinShareScript(); } } private void RegisterWeiXinShareScript() { //公众号的应用ID string appid = ""; //公众号的应用密钥 string secret = ""; //生成签名的时间戳 TimeSpan ts = DateTime.Now - DateTime.Parse("1970-01-01 00:00:00"); string timestamp = ts.TotalSeconds.ToString().Split('.')[0]; //生成签名的随机串 string nonceStr = "test"; //微信access_token,用于获取微信jsapi_ticket string token = GetAccess_token(appid, secret); //微信jsapi_ticket string ticket = GetTicket(token); //当前网页的URL string pageurl = Request.Url.AbsoluteUri; //对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串 string str = "jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + pageurl; //签名,使用SHA1生成 string signature = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "SHA1").ToLower(); //要注册到页面的JS脚本 StringBuilder sbjsApi = new StringBuilder(); sbjsApi.Append("<script>"); //通过config接口注入权限验证配置 sbjsApi.Append("wx.config({debug:false,"); sbjsApi.Append("appId: '" + appid + "',"); sbjsApi.Append("timestamp: " + timestamp + ","); sbjsApi.Append("nonceStr: '" + nonceStr + "',"); sbjsApi.Append("signature: '" + signature + "',"); sbjsApi.Append("jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'chooseImage', 'uploadImage', 'getNetworkType']});"); //通过ready接口处理成功验证 sbjsApi.Append("wx.ready(on_weixin_ready);"); sbjsApi.Append("function on_weixin_ready() {weixin_share();}"); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 sbjsApi.Append("function weixin_share(){"); sbjsApi.Append("wx.onMenuShareAppMessage({"); sbjsApi.Append("title:'分享出去的标题',"); sbjsApi.Append("desc:'分享出去的内容',"); sbjsApi.Append("link:'分享出去的链接地址',"); sbjsApi.Append("imgUrl:'分享出去的图标地址',"); sbjsApi.Append("type:'link',"); sbjsApi.Append("dataUrl:'',"); sbjsApi.Append("success: function () { alert('分享成功');},"); sbjsApi.Append("cancel:function () {}"); sbjsApi.Append("});"); //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 sbjsApi.Append("wx.onMenuShareTimeline({"); sbjsApi.Append("title:'分享出去的标题',"); sbjsApi.Append("link:'分享出去的链接地址',"); sbjsApi.Append("imgUrl:'分享出去的图标地址',"); sbjsApi.Append("success: function () { alert('分享成功');},"); sbjsApi.Append("cancel:function () {}"); sbjsApi.Append("});}"); sbjsApi.Append("</script>"); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "weixin", sbjsApi.ToString().Trim()); } /// <summary> /// 获取微信jsapi_ticket /// </summary> /// <param name="token">access_token</param> /// <returns>jsapi_ticket</returns> public string GetTicket(string token) { string ticketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + token + "&type=jsapi"; string jsonresult = HttpGet(ticketUrl, "UTF-8"); WX_Ticket wxTicket = JsonDeserialize<WX_Ticket>(jsonresult); return wxTicket.ticket; } /// <summary> /// 获取微信access_token /// </summary> /// <param name="appid">公众号的应用ID</param> /// <param name="secret">公众号的应用密钥</param> /// <returns>access_token</returns> private string GetAccess_token(string appid, string secret) { string tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret; string jsonresult = HttpGet(tokenUrl, "UTF-8"); WX_Token wx = JsonDeserialize<WX_Token>(jsonresult); return wx.access_token; } /// <summary> /// JSON反序列化 /// </summary> /// <typeparam name="T">实体类</typeparam> /// <param name="jsonString">JSON</param> /// <returns>实体类</returns> private T JsonDeserialize<T>(string jsonString) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); T obj = (T)ser.ReadObject(ms); return obj; } /// <summary> /// HttpGET请求 /// </summary> /// <param name="url">请求地址</param> /// <param name="encode">编码方式:GB2312/UTF-8</param> /// <returns>字符串</returns> private string HttpGet(string url, string encode) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.ContentType = "text/html;charset=" + encode; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding(encode)); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; } } /// <summary> /// 通过微信API获取access_token得到的JSON反序列化后的实体 /// </summary> public class WX_Token { public string access_token { get; set; } public string expires_in { get; set; } } /// <summary> /// 通过微信API获取jsapi_ticket得到的JSON反序列化后的实体 /// </summary> public class WX_Ticket { public string errcode { get; set; } public string errmsg { get; set; } public string ticket { get; set; } public string expires_in { get; set; } }
相关文章推荐
- ASP.NET 设置网站在浏览器的选项页中的图标
- ASP.NET导入Excel到数据库(SQL)
- Casperjs/PhantomJs 中文网站截图乱码
- asp.net生成word文档服务器配置
- ASP.NET MVC处理JsonResult返回时间DateTime问题
- DevExpress2011控件教程)编辑控件(comboBox,AspxCheckBox) 范例1
- DevExpress.Web.ASPxGridView
- Asp.Net MVC大型项目实践整合 NHibernate与Json序列化
- asp.net单文件带进度条上传
- ASP.NET WEB API 调试
- jasper server定制数据源
- ASP.NET MVC 技术债务
- C#、WinForm、ASP.NET - Md5散列加密
- asp.net web API 的调用返回Json值 POST方式请求
- 理解SVG的viewport,viewBox,preserveAspectRatio
- ASP.NET MVC Routing Debugger路由调试工具
- ASP.NET 5中的静态文件处理
- ssh+lcx实现Metasploit测试机没有公网IP时候的公网端口映射
- 在ASP.NET 5中显示错误信息
- ASP.NET MVC显示HTML字符串