语言吧技术网欢迎您投稿,程序员的世界我懂你!=====>点此登录投搞
当前位置: 首页 >>常用API接入 >>微信公众号 >>c#微信分享自定义标题、说明、图标和分享链接

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

2019/1/14 17:45:06 0人评论 451次 作者:CPU不够了

微信公众号网页分享到朋友圈带图标需要进行jssdk注册,在需要调用JS接口的页面引入如下JS文件http://res.wx.qq.com/open/js/jweixin-1.2.0.js,js前台代码,通过code得到AccessToken>AccessToken与页面地址获取jsapi_ticke…

微信公众号网页分享到朋友圈带图标需要进行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

--------------------- 

作者:CPU不够了 

来源:CSDN 

原文:https://blog.csdn.net/qq_36535245/article/details/79583205 

版权声明:本文为博主原创文章,转载请附上博文链接!


相关文章

CopyRight:2007-2018 语言吧 备案ICP:湘ICP备09009000号-15 http://www.yuyanba.com
欢迎【广东省 广州市】的朋友
内容与素材部分来源于网络,如有侵权请告知删除
分享按钮