关闭

微信通过JSSDK分享朋友圈

标签: 微信
613人阅读 评论(0) 收藏 举报
分类:

先在微信公众号里面配置js接口安全域名






HTML代码部分

 <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    <script type="text/javascript">
        //if(!(/MicroMessenger/i.test(navigator.userAgent)))
        //{
        //    document.body.innerHTML="请在微信打开此链接";
        //}
        // 注意:所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
        // 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
        // 完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
        wx.config({
            debug: false,
            appId: 'xxxxx',
          timestamp: '<%=wx.timestamp%>',
            nonceStr: '<%=wx.noncestr%>',
            signature: '<%=wx.signature%>',
            jsApiList: [
                'checkJsApi',
                'onMenuShareTimeline',
                'onMenuShareAppMessage'
            ]
        });
        wx.ready(function () {  
            // 2.2 监听“分享到朋友圈”按钮点击、自定义分享内容及分享结果接口
            wx.onMenuShareTimeline({
                title: '好帮人平台-',
               link: 'xxxxxx',  
                desc: "分享给您的好友吧",
                imgUrl: 'xxxx',
                trigger: function (res) {
                   // alert("分享到朋友圈按钮点击");        
                },
                success: function (res) {
                    alert("分享成功");
                },
                cancel: function (res) {
                  // alert('已取消');
                },
                fail: function (res) {
                    alert(JSON.stringify(res));
                }
            });
            wx.error(function (res) {
                // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
                alert("errorMSG:" + res);
            });
        });
    </script>
<script type="text/javascript"> 


   #endregion
        /// <summary>
        /// 微信的js_api票
        /// </summary>
        public WeiXinJsapi_ticketJs wx { get; set; }
        protected void Page_Load(object sender, EventArgs e)
        {
            WeiXinOAuth au = new WeiXinOAuth();
            //  WeiXinAccessTokenResult result = null;
            string AppID = "xxxx";
            string AppSecret = "xxxx";
            if (HttpContext.Current.Session["jsapi"] == null)
            {


                string actoken = "";
                if (HttpContext.Current.Session["token"] != null)
                {
                    actoken = HttpContext.Current.Session["token"] as string;
            }
                else
                {
                    Access_token ac = au.GetAcess_token(AppID, AppSecret);
                    if (ac != null)
                    {
                        HttpContext.Current.Session["token"] = ac.access_token;
                        actoken = ac.access_token;
                        //  HttpContext.Current.Session.Timeout = 72000;
                    }
                }
            
                WeiXinJsapi_ticket jsapi = au.GetTickect(actoken);
                string ms = JsonSerializeUtils.JsSerializer(jsapi);
            
                WeiXinJsapi_ticketJs jsapis = new WeiXinJsapi_ticketJs();
                jsapis.errcode = jsapi.errcode;
                jsapis.errmsg = jsapi.errmsg;
                jsapis.expires_in = jsapi.expires_in;
                jsapis.ticket = jsapi.ticket;
                long time = au.GetTimeStamp();
                string noncestr = au.GetNoncestr();
                jsapis.noncestr = noncestr;
                string signature = au.GetSignature(jsapis.ticket, noncestr, time, HttpContext.Current.Request.Url.ToString(), "");//必须动态获取


              
                jsapis.timestamp = time.ToString();
                jsapis.signature = signature;
                HttpContext.Current.Session["jsapi"] = jsapis;
                HttpContext.Current.Session.Timeout = 72000;
                string mss = JsonSerializeUtils.JsSerializer(jsapis);
                wx = jsapis;
             
            }
            else
            {              
                wx = HttpContext.Current.Session["jsapi"] as WeiXinJsapi_ticketJs;
                string mss = JsonSerializeUtils.JsSerializer(wx);
                long time = au.GetTimeStamp();
                string noncestr = au.GetNoncestr();
                wx.noncestr = noncestr;
                string signature = au.GetSignature(wx.ticket, noncestr, time, HttpContext.Current.Request.Url.ToString(), "");//必须动态获取
                wx.timestamp = time.ToString();
                wx.signature = signature;               
            }
        }
    }
}

注:获取的Access_Token必须是全局Access_Token不是网页的Access—_Token,全局Access_token缓存72000秒,也就是两个小时,微信端不宜频繁访问。 
   signature 签名每次访问都要更新,切勿保存到session里面


MOdel实体类



    /// <summary>
    /// 这是获取基础的access_token  每天最多获取2000次
    /// </summary>
    public class Access_token
    {
        public string access_token { get; set; }


        public string expires_in { get; set; }
    }

/// <summary>
    /// 微信Js-jdk的票据信息
    /// </summary>
   public class WeiXinJsapi_ticket
    {
       
        public string errcode { get; set; }


        public string errmsg { get; set; }


        public string ticket { get; set; }


        public string expires_in { get; set; }


      
    }


    public class WeiXinJsapi_ticketJs : WeiXinJsapi_ticket
    {
        /// <summary>
        /// 随机数
        /// 
        /// </summary>
        public string noncestr { get; set; }
        /// <summary>
        /// 时间戳
        /// </summary>
        public string timestamp { get; set; }
        /// <summary>
        /// 签名
        /// </summary>
        public string signature { get; set; }
    }


访问微信端类在上一篇文章。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:33109次
    • 积分:744
    • 等级:
    • 排名:千里之外
    • 原创:39篇
    • 转载:1篇
    • 译文:3篇
    • 评论:2条