Asp.Net页面自定义微信分享

参考微信JS-SDK说明文档,

1、先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

2、在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js

要分享的页面代码:

[csharp]  view plain  copy
 print ?
  1. using System.Runtime.Serialization.Json;//需添加System.Runtime.Serialization引用  
  2. public partial class WeiXinShareScript : System.Web.UI.Page  
  3. {  
  4.     protected void Page_Load(object sender, EventArgs e)  
  5.     {  
  6.         if (!Page.IsPostBack)  
  7.         {  
  8.             RegisterWeiXinShareScript();  
  9.         }  
  10.     }  
  11.   
  12.     private void RegisterWeiXinShareScript()  
  13.     {  
  14.         //公众号的应用ID  
  15.         string appid = "";  
  16.         //公众号的应用密钥  
  17.         string secret = "";  
  18.   
  19.         //生成签名的时间戳  
  20.         TimeSpan ts = DateTime.Now - DateTime.Parse("1970-01-01 00:00:00");  
  21.         string timestamp = ts.TotalSeconds.ToString().Split('.')[0];  
  22.         //生成签名的随机串  
  23.         string nonceStr = "test";  
  24.   
  25.         //微信access_token,用于获取微信jsapi_ticket  
  26.         string token = GetAccess_token(appid, secret);  
  27.         //微信jsapi_ticket  
  28.         string ticket = GetTicket(token);  
  29.   
  30.         //当前网页的URL  
  31.         string pageurl = Request.Url.AbsoluteUri;  
  32.   
  33.         //对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串  
  34.         string str = "jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + pageurl;  
  35.         //签名,使用SHA1生成  
  36.         string signature = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "SHA1").ToLower();  
  37.   
  38.         //要注册到页面的JS脚本  
  39.         StringBuilder sbjsApi = new StringBuilder();  
  40.         sbjsApi.Append("<script>");  
  41.   
  42.         //通过config接口注入权限验证配置  
  43.         sbjsApi.Append("wx.config({debug:false,");  
  44.         sbjsApi.Append("appId: '" + appid + "',");  
  45.         sbjsApi.Append("timestamp: " + timestamp + ",");  
  46.         sbjsApi.Append("nonceStr: '" + nonceStr + "',");  
  47.         sbjsApi.Append("signature: '" + signature + "',");  
  48.         sbjsApi.Append("jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'chooseImage', 'uploadImage', 'getNetworkType']});");  
  49.   
  50.         //通过ready接口处理成功验证  
  51.         sbjsApi.Append("wx.ready(on_weixin_ready);");  
  52.         sbjsApi.Append("function on_weixin_ready() {weixin_share();}");  
  53.   
  54.         //获取“分享给朋友”按钮点击状态及自定义分享内容接口  
  55.         sbjsApi.Append("function weixin_share(){");  
  56.         sbjsApi.Append("wx.onMenuShareAppMessage({");  
  57.         sbjsApi.Append("title:'分享出去的标题',");  
  58.         sbjsApi.Append("desc:'分享出去的内容',");  
  59.         sbjsApi.Append("link:'分享出去的链接地址',");  
  60.         sbjsApi.Append("imgUrl:'分享出去的图标地址',");  
  61.         sbjsApi.Append("type:'link',");  
  62.         sbjsApi.Append("dataUrl:'',");  
  63.         sbjsApi.Append("success: function () { alert('分享成功');},");  
  64.         sbjsApi.Append("cancel:function () {}");  
  65.         sbjsApi.Append("});");  
  66.   
  67.         //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口  
  68.         sbjsApi.Append("wx.onMenuShareTimeline({");  
  69.         sbjsApi.Append("title:'分享出去的标题',");  
  70.         sbjsApi.Append("link:'分享出去的链接地址',");  
  71.         sbjsApi.Append("imgUrl:'分享出去的图标地址',");  
  72.         sbjsApi.Append("success: function () { alert('分享成功');},");  
  73.         sbjsApi.Append("cancel:function () {}");  
  74.         sbjsApi.Append("});}");  
  75.   
  76.         sbjsApi.Append("</script>");  
  77.   
  78.         Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "weixin", sbjsApi.ToString().Trim());  
  79.     }  
  80.   
  81.     /// <summary>  
  82.     /// 获取微信jsapi_ticket  
  83.     /// </summary>  
  84.     /// <param name="token">access_token</param>  
  85.     /// <returns>jsapi_ticket</returns>  
  86.     public string GetTicket(string token)  
  87.     {  
  88.         string ticketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + token + "&type=jsapi";  
  89.         string jsonresult = HttpGet(ticketUrl, "UTF-8");  
  90.         WX_Ticket wxTicket = JsonDeserialize<WX_Ticket>(jsonresult);  
  91.         return wxTicket.ticket;  
  92.     }  
  93.   
  94.     /// <summary>  
  95.     /// 获取微信access_token  
  96.     /// </summary>  
  97.     /// <param name="appid">公众号的应用ID</param>  
  98.     /// <param name="secret">公众号的应用密钥</param>  
  99.     /// <returns>access_token</returns>  
  100.     private string GetAccess_token(string appid, string secret)  
  101.     {  
  102.         string tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;  
  103.         string jsonresult = HttpGet(tokenUrl, "UTF-8");  
  104.         WX_Token wx = JsonDeserialize<WX_Token>(jsonresult);  
  105.         return wx.access_token;  
  106.     }  
  107.   
  108.     /// <summary>  
  109.     /// JSON反序列化  
  110.     /// </summary>  
  111.     /// <typeparam name="T">实体类</typeparam>  
  112.     /// <param name="jsonString">JSON</param>  
  113.     /// <returns>实体类</returns>  
  114.     private T JsonDeserialize<T>(string jsonString)  
  115.     {  
  116.         DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
  117.         MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));  
  118.         T obj = (T)ser.ReadObject(ms);  
  119.         return obj;  
  120.     }  
  121.   
  122.     /// <summary>  
  123.     /// HttpGET请求  
  124.     /// </summary>  
  125.     /// <param name="url">请求地址</param>  
  126.     /// <param name="encode">编码方式:GB2312/UTF-8</param>  
  127.     /// <returns>字符串</returns>  
  128.     private string HttpGet(string url, string encode)  
  129.     {  
  130.         HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);  
  131.         request.Method = "GET";  
  132.         request.ContentType = "text/html;charset=" + encode;  
  133.         HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
  134.         Stream myResponseStream = response.GetResponseStream();  
  135.         StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding(encode));  
  136.         string retString = myStreamReader.ReadToEnd();  
  137.         myStreamReader.Close();  
  138.         myResponseStream.Close();  
  139.   
  140.         return retString;  
  141.     }  
  142. }  
  143.   
  144. /// <summary>  
  145. /// 通过微信API获取access_token得到的JSON反序列化后的实体  
  146. /// </summary>  
  147. public class WX_Token  
  148. {  
  149.     public string access_token { getset; }  
  150.     public string expires_in { getset; }  
  151. }  
  152.   
  153. /// <summary>  
  154. /// 通过微信API获取jsapi_ticket得到的JSON反序列化后的实体  
  155. /// </summary>  
  156. public class WX_Ticket  
  157. {  
  158.     public string errcode { getset; }  
  159.     public string errmsg { getset; }  
  160.     public string ticket { getset; }  
  161.     public string expires_in { getset; }  
  162. }  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值