.Net 微信内分享自定义封面的页面链接
作者:朱尚 / 日期:2021-12-06 / 分类:Asp.Net / 浏览:1200

准备条件:认证的服务号

JavaScript:

<script>
            wx.config({
                debug: false,
                appId: "123",
                timestamp: "<%=strTimeA %>",
           nonceStr: "<%=nonceStr %>",
           signature: "<%=strSha1 %>",
           jsApiList: [
               // 所有要调用的 API 都要加到这个列表中
               'onMenuShareAppMessage'
           ]
       });
            wx.ready(function () {
                wx.onMenuShareAppMessage({
                    title: '标题', // 分享标题
                    desc: '描述', // 分享描述
                    link: '<%=Request.Url.ToString() %>', // 分享链接,该链接域名必须与当前企业的可信域名一致
               imgUrl: 'http://<%=HttpContext.Current.Request.Url.Host%>/images/fenxiang.jpg', // 分享图标
               type: '', // 分享类型,music、video或link,不填默认为link
               dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
               success: function () {
                   // 用户确认分享后执行的回调函数
                   alert('suc');
               },
               cancel: function () {
                   // 用户取消分享后执行的回调函数
                   alert('cancel');
               }
           });

       });
        </script>

.Net:

    public string nonceStr = "";
    public string strSha1 = "";
    public string strTimeA = "";
        nonceStr = DateTime.Now.ToString("yyyyMMddHHmmss");

        string strAccess = Basic.Engine.CookieDo.GetCookie("token", "str_key");

        // Response.Write("strAccess:" + strAccess);

        if (string.IsNullOrEmpty(strAccess))
        {
            strAccess = GetWeb("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=123&secret=321").Split('"')[3];
            Basic.Engine.CookieDo.WriteCookie("token", "str_key", strAccess, 120);
            // Response.Write("<script>alert('access_token');</script>");
        }

        strAccess = GetWeb("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + strAccess + "&type=jsapi");

        // Response.Write("<script>alert('" + strAccess.Split('"').Length + "');</script>");
        if (!(strAccess.Split('"').Length > 9))
        {
            strAccess = GetWeb("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=123&secret=321").Split('"')[3];
            Basic.Engine.CookieDo.WriteCookie("token", "str_key", strAccess, 120);
            strAccess = GetWeb("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + strAccess + "&type=jsapi");
            //Response.Write("<script>alert('access_token__"+strAccess+"');</script>");
        }
        strTi = strAccess.Split('"')[9];

        TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);

        strTimeA = Convert.ToInt64(ts.TotalSeconds).ToString();
        string jj = Request.RawUrl;
        if (jj == "/")
        {
            jj = Request.Url.ToString().Replace("default.aspx", "");
        }
        else
        {
            jj = Request.Url.ToString();
        }
        strSha1 = "jsapi_ticket=" + strTi + "&noncestr=" + nonceStr + "&timestamp=" + strTimeA + "&url=" + jj;

        strSha1 = Sha1Signature(strSha1);
    public string strTi = "";
    private string GetWeb(string url)
    {
        //string postString = "";//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进来  
        //byte[] postData = Encoding.UTF8.GetBytes(postString);//编码,尤其是汉字,事先要看下抓取网页的编码方式  
        //WebClient webClient = new WebClient();
        //webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可  
        //byte[] responseData = webClient.UploadData(url, "POST", postData);//得到返回字符流  
        //string srcString = Encoding.UTF8.GetString(responseData);
        //return srcString;




        WebRequest request = WebRequest.Create(url);
        WebResponse response = request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
        string srcString = reader.ReadToEnd();

        return srcString;
    }
    /// <summary>
    /// 基于Sha1的自定义加密字符串方法:输入一个字符串,返回一个由40个字符组成的十六进制的哈希散列(字符串)。
    /// </summary>
    /// <param name="str">要加密的字符串</param>
    /// <returns>加密后的十六进制的哈希散列(字符串)</returns>
    public static string Sha1Signature(string str)
    {
        var buffer = Encoding.UTF8.GetBytes(str);
        var data = SHA1.Create().ComputeHash(buffer);

        StringBuilder sub = new StringBuilder();
        foreach (var t in data)
        {
            sub.Append(t.ToString("X2"));
        }

        return sub.ToString();
    }


上一篇:.Net 好用的开源项目集合
下一篇:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
本文标签: .NET JavaScript
本文链接:http://www.banzhuan.net/detail/370