c# 文章分享微信朋友圈自定义标题、摘要、缩略图

微信升级后需要通过接入微信公众号才行,记录下。

一、登录微信公众号设置-功能设置-JS接口安全域名,设置网站的域名,可以多个

二、前端配置:测试阶段将wx.config中的debug设置为true,页面会弹出提示,

 var url = window.location.href;//取当前路径
    var title = $(".newsTitle").val();//分享标题
    var desc = $(".newsKeyword").val();//分享摘要
    var imgUrl = $(".newsImgUrl ").val();//缩略图地址,最好300x300以上;

    $.ajax({
        type: 'post',
        data: { 'url': url },
        url: '/ajax/WeChatShare.ashx',
        success: function (data) {
            var obj = JSON.parse(data);
            wx.config({
                debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来。
                appId: obj.appId, // 必填,公众号的唯一标识
                timestamp: obj.timestamp, // 必填,生成签名的时间戳
                nonceStr: obj.nonceStr, // 必填,生成签名的随机串
                signature: obj.signature,// 必填,签名
                jsApiList: [
                    "checkJsApi",
                    "onMenuShareTimeline", //分享给好友  
                    "onMenuShareAppMessage", //分享到朋友圈  
                    "onMenuShareQQ",  //分享到QQ  
                    "onMenuShareWeibo" //分享到微博 
                ] // 必填,需要使用的JS接口列表
            });
        }
    })

    wx.ready(function () {
        var shareData = {
            title: title,
            desc: desc,
            link: url,
            imgUrl: imgUrl
        }; 
        wx.onMenuShareAppMessage(shareData);
        wx.onMenuShareTimeline(shareData);
        wx.onMenuShareQQ(shareData);
        wx.onMenuShareWeibo(shareData);
    });

三、后端配置:1.获取tichet。2.生成随机数。3.获取时间戳。4.sha1加密,可以参考,未做token过期处理和请求失败处理

        /// <summary>
        /// 签名
        /// </summary>
        /// <returns></returns>
        private string GetSign( )
        {
            string tichet = GetJsApiTicket();
            string nonceStr = GetRandomString(20);
            string timestamp = GetTimeStamp();
            string str= "jsapi_ticket="+ tichet + "&noncestr="+ nonceStr + "&timestamp="+ timestamp + "&url="+url;
            WxShare model = new WxShare();
            model.appId = IDCCIPKeys.Hyw_AppId;
            model.nonceStr = nonceStr;
            model.timestamp = timestamp;
            model.signature = Sha1(str);
            return model.ToJson(); 
        }

        /// <summary>
        /// 获取tichet,注意这种
        /// </summary>
        /// <param name="access_token"></param>
        /// <returns></returns>
        private string GetJsApiTicket()
        {
            string ticket = Utils.GetCookie("ticketShare");
            if (Utils.StrIsNullOrEmpty(ticket))
            {
                string access_token = GetAccessToken();
                string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi";
                string result = Utils.HttpGet(url);
                var jo = (JObject)JsonConvert.DeserializeObject(result);
                ticket = Utils.ObjectToStr(jo["ticket"]);
                Utils.WriteCookie("ticketShare", ticket, 7200);
            }
            return ticket;
        }

        /// <summary>
        /// 生成len位随机数
        /// </summary>
        /// <param name="length"></param>
        /// <returns></returns>
        static public string GetRandomString(int len)
        {
            string s = "0123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
            string reValue = string.Empty;
            Random rnd = new Random(getNewSeed());
            while (reValue.Length < len)
            {
                string s1 = s[rnd.Next(0, s.Length)].ToString();
                if (reValue.IndexOf(s1) == -1) reValue += s1;
            }
            return reValue;
        }

        /// <summary>
        /// 生成随机数的种子
        /// </summary>
        /// <returns></returns>
        private static int getNewSeed()
        {
            byte[] rndBytes = new byte[4];
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
            rng.GetBytes(rndBytes);
            return BitConverter.ToInt32(rndBytes, 0);
        }

        /// <summary> 
        /// 获取时间戳 
        /// </summary> 
        /// <returns></returns> 
        public static string GetTimeStamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }

        /// <summary>
        /// 基于Sha1的自定义加密字符串,注意是小写。
        /// </summary>
        /// <param name="str">要加密的字符串</param>
        /// <returns>加密后的十六进制的哈希散列(字符串)</returns>
        public static string Sha1(string str)
        {
            var buffer = Encoding.UTF8.GetBytes(str);
            var data = SHA1.Create().ComputeHash(buffer);
            var sb = new StringBuilder();
            foreach (var t in data)
            {
                sb.Append(t.ToString("x2"));
            }

            return sb.ToString();
        }

自己调试可以在:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign上测试签名,注意签名是小写。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值