c#微信分享自定义标题、说明、图标和分享链接

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36535245/article/details/79583205

微信公众号官方文档地址:点击打开链接

微信公众号网页分享到朋友圈带图标需要进行jssdk注册,

在需要调用JS接口的页面引入如下JS文件http://res.wx.qq.com/open/js/jweixin-1.2.0.js

js前台代码,通过code得到AccessToken>AccessToken与页面地址获取jsapi_ticket>jsconfig初始化>调用分享接口

$(function () {
    getloaca();
})
function getloaca() {
    var JSAccessToken = localStorage.getItem("JSAccessToken");
    if (JSAccessToken == null || JSAccessToken == "") {
        $.ajax({
            url: "/Home/getAccessGetJs",
            type: 'post',
            dataType: 'json',
            async: false,
            success: function (data) {
                console.log(data);
                var JsonData = JSON.parse(data);
                getjsApi(JsonData.access_token);
                localStorage.setItem("JSAccessToken", JsonData.access_token);
            },
            error: function (msg) {
                console.log(msg);
            }
        })
    }
    else {
        getjsApi(JSAccessToken);
    }

}

function getjsApi(AccessToken) {

    var jsticket = localStorage.getItem("jsapi_ticket")
    if (jsticket == null || jsticket == "") {
        $.ajax({
            url: "/Home/AccessGetJs",
            type: 'post',
            dataType: 'json',
            data: { access_token: AccessToken, signurl: window.location.href.split('#')[0] },
            async: false,
            success: function (data) {
                if (typeof (data) == "object") {
                    if (data.errcode = 42001) {
                        localStorage.setItem("JSAccessToken", "");
                        localStorage.setItem("jsapi_ticket", "");
                        getloaca();
                    }
                }
                var JsonData = JSON.parse(data);
                if (JsonData.errmsg == "ok") {
                    localStorage.setItem("jsapi_ticket", JsonData.jsapi_ticket);
                    SetUserLoad(JsonData);
                }
                else {
                    getloaca();
                }
            },
            error: function (msg) {
                getloaca();
                console.log(msg);
            }
        })
    }
    else {
        $.ajax({
            url: "/Home/AccessGetJs",
            type: 'post',
            dataType: 'json',
            data: { access_token: AccessToken, signurl: window.location.href.split('#')[0], jsticket: jsticket },
            async: false,
            success: function (data) {
                var JsonData = JSON.parse(data);
                if (JsonData.errmsg == "ok") {
                    SetUserLoad(JsonData);
                }
                else {
                    localStorage.setItem("JSAccessToken", "");
                    localStorage.setItem("jsapi_ticket", "");
                    getloaca();
                }
            },
            error: function (msg) {
                getloaca();
                console.log(msg);
            }
        })
    }

}
function SetUserLoad(JsonData) {
    wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: JsonData.appId, // 必填,公众号的唯一标识
        timestamp: JsonData.timestamp, // 必填,生成签名的时间戳
        nonceStr: JsonData.noncestr, // 必填,生成签名的随机串
        signature: JsonData.signature,// 必填,签名,见附录1
        jsApiList: ['checkJsApi', 'openLocation', 'getLocation', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });
    wx.ready(function () {
        getjsJW();
    });
    wx.error(function (res) {
        console.log(res);
        localStorage.setItem("JSAccessToken", "");
        localStorage.setItem("jsapi_ticket", "");
        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    });

}
function getjsJW() {
    wx.onMenuShareTimeline({
        title: document.title, // 分享标题
        link: window.location.href.split('#')[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: document.images[0].getAttribute("src"), // 分享图标
        success: function () {
            // alert("分享成功")
        },
        cancel: function () {
            // alert("分享取消")
        }
    });
    wx.onMenuShareAppMessage({
        title: document.title, // 分享标题
        desc: 'Hibody  想把你的“运动技能和空闲时间”约出去,让运动不止好玩,还能变现!', // 分享描述
        link: window.location.href.split('#')[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: document.images[0].getAttribute("src"), // 分享图标
        success: function () {
            //alert("分享成功")
        },
        cancel: function () {
            // alert("分享取消")
        }
    });
    //分享qq好友
    wx.onMenuShareQQ({
        title: document.title, // 分享标题
        desc: 'Hibody  想把你的“运动技能和空闲时间”约出去,让运动不止好玩,还能变现!', // 分享描述
        link: window.location.href.split('#')[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: document.images[0].getAttribute("src"), // 分享图标
        success: function () {
            // 用户确认分享后执行的回调函数
        },
        cancel: function () {
            // 用户取消分享后执行的回调函数
        }
    });

    // 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
    wx.onMenuShareWeibo({
        title: document.title, // 分享标题
        desc: 'Hibody  想把你的“运动技能和空闲时间”约出去,让运动不止好玩,还能变现!', // 分享描述
        link: window.location.href.split('#')[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: document.images[0].getAttribute("src"), // 分享图标
        success: function () {
            // 用户确认分享后执行的回调函数
        },
        cancel: function () {
            // 用户取消分享后执行的回调函数
        }
    });

    // 获取“分享到QQ空间”按钮点击状态及自定义分享内容接口
    wx.onMenuShareQZone({
        title: document.title, // 分享标题
        desc: 'Hibody  想把你的“运动技能和空闲时间”约出去,让运动不止好玩,还能变现!', // 分享描述
        link: window.location.href.split('#')[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: document.images[0].getAttribute("src"), // 分享图标
        success: function () {
            // 用户确认分享后执行的回调函数
        },
        cancel: function () {
            // 用户取消分享后执行的回调函数
        }
    });
}

c#  Vs后台代码:

        /// <summary>
        /// 得到初始化参数
        /// </summary>
        /// <param name="access_token"></param>
        /// <returns></returns>
        public ActionResult AccessGetJs(string access_token, string signurl, string jsticket)
        {
            AccessJs data = new AccessJs();
            if (string.IsNullOrWhiteSpace(jsticket))
            {
                string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi";
                string response = HttpService.Get(url);
                 data = JsonHelper.JSONToObject<AccessJs>(response);
            }
            else
            {
                data.errcode = 0; data.errmsg = "ok"; data.ticket = jsticket;
            }
            if (data.errmsg == "ok")
            {
                WxPayData model = new WxPayData();
                //调App接口参数

                string noncestr = WxPayApi.GenerateNonceStr();
                string timestamp = WxPayApi.GenerateTimeStamp();
                model.SetValue("jsapi_ticket", data.ticket);//jsapi 
                model.SetValue("noncestr", noncestr);//随机字符串 	
                model.SetValue("timestamp", timestamp);//时间戳	        
                model.SetValue("url", "http://soidoo.com");//url
                String string1 = "jsapi_ticket=" + data.ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + signurl;
                //6、将字符串进行sha1加密  
                //String signature = SHA1(string1);  
                string signature = Sha1Sign(string1);
                model.SetValue("signature", signature);//签名
                model.SetValue("appId", WxPayConfig.APPID);//appId
                model.SetValue("errmsg", "ok");//返回值
                model.SetValue("errurl", string1);//返回值
                var datamodel = model.ToJson().Replace("\\", "");
                return Json(datamodel);
            }
            return Json(data);
        }

        /// <summary>
        /// 获取access_token
        /// </summary>
        /// <param name="access_token"></param>
        /// <returns></returns>
        public ActionResult getAccessGetJs(string JSAccessToken)
        {
            string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + WxPayConfig.APPID + "&secret=" + WxPayConfig.APPSECRET;
            string response = HttpService.Get(url);
            return Json(response);
        }


        #region SHA1加密
        public string Sha1Sign(string str)
        {


            SHA1 sha1 = new SHA1CryptoServiceProvider();
            byte[] bytes_sha1_in = System.Text.UTF8Encoding.Default.GetBytes(str);
            byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
            string signature = BitConverter.ToString(bytes_sha1_out);
            signature = signature.Replace("-", "").ToLower();
            return signature;
        }
   #endregion    }
public class AccessJs { public int errcode { get; set; } public string errmsg { get; set; } public string ticket { get; set; } public int expires_in { get; set; } }

就是如此简单就成功了,同志们要好好学习呀!

it技术交流群,群文件中分享书籍,群里可讨论it技术,群号681169497




猜你喜欢

转载自blog.csdn.net/qq_36535245/article/details/79583205