• 微信公众号分享


    简单的写个微信分享的功能

    aspx页面

    引用

    <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    <a href="javascript:wx_share()">分享</a>

    js部分

    $(function () {
        $.ajax({
            type: "get",
            url: "后台路径",
            data: { url: location.href },
            dataType: "json",
            success: function (data) {
                wx.config({
                    debug: false,
                    appId: data.appId,
                    timestamp: data.timestamp,
                    nonceStr: data.nonceStr,
                    signature: data.signature,
                    jsApiList: [
                           "onMenuShareTimeline", //分享到朋友圈
                           "onMenuShareAppMessage", //分享给好友
                           "onMenuShareQQ",  //分享到QQ
                    ]
                });
            },
            error: function (data) {
                //alert("连接失败!");
            }
        });
    });
    
    function wx_share() {
            var sharehtml = "";//给予一个蒙城使用户只能点击微信右上角按钮
            $("body").append(sharehtml);
        
    }
    
    var title, desc, img;
    
    title = "";
    desc = "";
    img = "";
    
    var shareData = {
        title: title,//分享内容的标题
        desc: desc,//这里请特别注意是要去除html
        link: window.location.href, //分享页的地址
        imgUrl: img //分享中带有的图片
    };
    
    wx.ready(function () {
        wx.onMenuShareAppMessage(shareData);//分享给好友
        wx.onMenuShareTimeline(shareData);//分享到朋友圈
        wx.onMenuShareQQ(shareData);//分享到QQ
    });
    

    C#后台接受部分

    string url = Request.QueryString["url"];
                var sign = GetSignPackage(url);//获取发送微信服务端的json数组字符串
                var json =   Common.NewJsonHelper.ObjectToJson<System.Collections.Hashtable>(sign);//就是将json字符串序列化一个json数组,每个公司用的不同,这个自己修改
                Response.write(json);
    

    获取json数组字符串

     //得到数据包,返回使用页面  
        public static System.Collections.Hashtable GetSignPackage(string url)
        {
            string jsapiTicket = getJsApiTicket();
            string timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now));
            string nonceStr = createNonceStr();
    
    
            // 这里参数的顺序要按照 key 值 ASCII 码升序排序  
            string rawstring = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url + "";
    
            //得到签名
            string signature = SHA1_Hash(rawstring);
    
    
            System.Collections.Hashtable signPackage = new System.Collections.Hashtable();
            signPackage.Add("appId", "公众号appID");
            signPackage.Add("nonceStr", nonceStr);
            signPackage.Add("timestamp", timestamp);
            signPackage.Add("url", url);
            signPackage.Add("signature", signature);
            signPackage.Add("rawString", rawstring);
    
    
            return signPackage;
        }
    
    
        //创建随机字符串  
        private static string createNonceStr()
        {
            int length = 16;
            string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            string str = "";
            Random rad = new Random();
            for (int i = 0; i < length; i++)
            {
                str += chars.Substring(rad.Next(0, chars.Length - 1), 1);
            }
            return str;
        }
    
    
        //得到ticket 如果文件里时间 超时则重新获取  
        static string getJsApiTicket()
        {
            //这里我从数据库读取
            
            string jticket = "";
            string accessToken = getAccessToken();//获取系统的全局token 
            
    
            string path = HttpContext.Current.Server.MapPath(@"/weixin/jsapi_ticket.json");//网上的都是写缓存,这个地方我是写一个全局json文件,最后会有说的
            string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" + accessToken;
           
    
            StreamReader sr = new StreamReader(path);
            string content = sr.ReadToEnd();
            sr.Close();
    
            JSTicket api = new JSTicket();
            //未获取jsapi_ticket的情况
            if (content.Length == 0)
            {
                Jsapi iden = JsonHelper.Deserialize<Jsapi>(RequestUrl(url, "get"));
    
                jticket = iden.ticket;
                if (jticket != "")
                {
                    api.expire_time = ConvertDateTimeInt(DateTime.Now) + 7000;
                    api.jsapi_ticket = jticket;
    
                    string json = JsonHelper.GetJson<JSTicket>(api);
                    StreamWriterMetod(json, path);
                }
            }
            else
            {
                var serializer = new DataContractJsonSerializer(typeof(JSTicket));
                api = JsonHelper.Deserialize<JSTicket>(content);
                //时间过期重新获取
                if (api.expire_time < ConvertDateTimeInt(DateTime.Now))
                {
                    Jsapi iden = JsonHelper.Deserialize<Jsapi>(RequestUrl(url, "get"));
    
                    jticket = iden.ticket;
                    if (jticket != "")
                    {
                        api.expire_time = ConvertDateTimeInt(DateTime.Now) + 7000;
                        api.jsapi_ticket = jticket;
    
                        string json = JsonHelper.GetJson<JSTicket>(api);
                        StreamWriterMetod(json, path);
                    }
                }
                else
                {
                    jticket = api.jsapi_ticket;
                }
            }
            return jticket;
        }
    
    
    
        ////得到accesstoken 如果文件里时间 超时则重新获取  
        public static string getAccessToken()
        {
            // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
            string access_token = "";
            string path = HttpContext.Current.Server.MapPath(@"/weixin/access_token.json");//我写的文件里面的,也可以自己写缓存
            string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=123&secret=23";//appID自己修改,secret自己修改
            
            StreamReader sr = new StreamReader(path);
            string content = sr.ReadToEnd();
            sr.Close();
    
            AccToken readJSTicket = new AccToken();
            if (content.Length == 0)
            {
                AccToken iden = JsonHelper.Deserialize<AccToken>(RequestUrl(url, "get"));
    
                access_token = iden.access_token;
                if (access_token != "")
                {
                    iden.expires_in = ConvertDateTimeInt(DateTime.Now) + 7000;
                    iden.access_token = access_token;
    
                    string json = JsonHelper.GetJson<AccToken>(iden);
                    StreamWriterMetod(json, path);
                }
            }
            else
            {
                var serializer = new DataContractJsonSerializer(typeof(AccToken));
                readJSTicket = JsonHelper.Deserialize<AccToken>(content);
                if (readJSTicket.expires_in < ConvertDateTimeInt(DateTime.Now))
                {
                    AccToken iden = JsonHelper.Deserialize<AccToken>(RequestUrl(url,"get"));
    
                    access_token = iden.access_token;
                    if (access_token != "")
                    {
                        iden.expires_in = ConvertDateTimeInt(DateTime.Now) + 7000;
                        iden.access_token = access_token;
    
                        string json = JsonHelper.GetJson<AccToken>(iden);
                        StreamWriterMetod(json, path);
                    }
                }
                else
                {
                    access_token = readJSTicket.access_token;
                }
            }
            
            return access_token;
        }
    
    
        //发起一个http请球,返回值  
        private static string httpGet(string url)
        {
            try
            {
                WebClient MyWebClient = new WebClient();
                MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据  
                Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据  
                string pageHtml = System.Text.Encoding.Default.GetString(pageData);  //如果获取网站页面采用的是GB2312,则使用这句              
    
                return pageHtml;
            }
    
    
            catch (WebException webEx)
            {
                Console.WriteLine(webEx.Message.ToString());
                return null;
            }
        }
    
    
        public static string RequestUrl(string url, string method)
        {
            // 设置参数
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            request.Method = method;
            request.ContentType = "text/html";
            request.Headers.Add("charset", "utf-8");
    
            //发送请求并获取相应回应数据
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            //直到request.GetResponse()程序才开始向目标网页发送Post请求
            Stream responseStream = response.GetResponseStream();
            StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
            //返回结果网页(html)代码
            string content = sr.ReadToEnd();
            return content;
        }
    
    
        //SHA1哈希加密算法  
        public static string SHA1_Hash(string str_sha1_in)
        {
           
            //建立SHA1对象
            SHA1 sha = new SHA1CryptoServiceProvider();
            //将mystr转换成byte[] 
            ASCIIEncoding enc = new ASCIIEncoding();
            byte[] dataToHash = enc.GetBytes(str_sha1_in);
            //Hash运算
            byte[] dataHashed = sha.ComputeHash(dataToHash);
            //将运算结果转换成string
            string hash = BitConverter.ToString(dataHashed).Replace("-", "").ToLower();
            return hash;
    
        }
    
    
        /// <summary>  
        /// StreamWriter写入文件方法  
        /// </summary>  
        private static void StreamWriterMetod(string str, string patch)
        {
            try
            {
                StreamWriter swWriter = new StreamWriter(patch, false);
                swWriter.WriteLine(str);
                swWriter.Close();
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    
        /// <summary>  
        /// 将c# DateTime时间格式转换为Unix时间戳格式  
        /// </summary>  
        /// <param name="time">时间</param>  
        /// <returns>double</returns>  
        public static int ConvertDateTimeInt(System.DateTime time)
        {
            int intResult = 0;
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
            intResult = Convert.ToInt32((time - startTime).TotalSeconds);
            return intResult;
        }
    

      

    json类

    //创建Json序列化 及反序列化类目  
    #region
    //创建JSon类 保存文件 jsapi_ticket.json  
    public class JSTicket
    {
    
        public string jsapi_ticket { get; set; }
    
        public double expire_time { get; set; }
    }
    //创建 JSon类 保存文件 access_token.json  
    
    public class AccToken
    {
    
        public string access_token { get; set; }
    
        public double expires_in { get; set; }
    }
    
    
    //创建从微信返回结果的一个类 用于获取ticket  
    
    public class Jsapi
    {
    
        public int errcode { get; set; }
    
        public string errmsg { get; set; }
    
        public string ticket { get; set; }
    
        public string expires_in { get; set; }
    }
    #endregion  
    

      

    前面会有说我定义的全局access_token和Ticket,网上大多写缓存,我这里写的全局文件

    access_token.json

    {"access_token":"","expires_in":0}
    

     jsapi_ticket.json

    {"expire_time":0,"jsapi_ticket":""}
    

     

    差不多就这些了,记得点赞。

  • 相关阅读:
    POJ 2342 树形DP入门题
    《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova
    GDI+ 填充背景时,非常多时候不起作用,GDI、GDI+配合运用
    Jave中System.getProperty()获取的值
    NYOJ128 前缀式计算(栈的运用)
    Web安全測试二步走
    一个SQL update语句
    C#时间格式之GMT时间的格式
    粘包的处理
    socket对于大数据的发送和接收
  • 原文地址:https://www.cnblogs.com/lovehersister/p/5741209.html
Copyright © 2020-2023  润新知