参考微信JS-SDK说明文档,
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; }
- }