当前位置:首页 » 《随便一记》 » 正文

C# 实现微信自定义分享

16 人参与  2024年02月11日 13:26  分类 : 《随便一记》  评论

点击全文阅读


目录

需求与调整

代码实现

获取令牌

生成合法票据

获取有效签名

客户端准备 

客户端实现

小结


需求与调整

在微信中打开网页应用后,可以选择将地址发送给朋友进行分享,如下图:

00e06d4028864c45b1c654a0ac2157c6.png

92c55e7e8c2941cbbc927f46ed6a7228.png

在实际的应用中,我们可能不是简单的将该网页的链接直接分享出去,而是生成符合实际需要的URL,微信称其为自定义分享。意思即,在用户点击“转发给朋友”按钮之前,进行URL等内容的更新 ,经过调整后,再把链接发送给要分享的朋友。微信给出的关键方法是:updateAppMessageShareData。

需要注意的是:

最好不要再使用 wx.onMenuShareTimeline、wx.onMenuShareAppMessage、wx.onMenuShareQQ、wx.onMenuShareQZone 接口,请尽快迁移使用客户端6.7.2及JSSDK 1.4.0以上版本而支持 wx.updateAppMessageShareData、wx.updateTimelineShareData接口。

代码实现

获取令牌

获取令牌是调用API的基础,请提供合法的APPID和APPSECRET,示例代码如下:

        public string GetAccessToken()        {            string accessToken = "";            //获取配置信息Datatable            string respText = "";            //获取appid和appsercret            string wechat_appid = "";            string wechat_appsecret = "";            //获取josn数据            string getAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";            string url = string.Format(getAccessTokenUrl, wechat_appid, wechat_appsecret);            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);            HttpWebResponse response = (HttpWebResponse)request.GetResponse();            using (Stream resStream = response.GetResponseStream())            {                StreamReader reader = new StreamReader(resStream, Encoding.Default);                respText = reader.ReadToEnd();                resStream.Close();            }            JavaScriptSerializer Jss = new JavaScriptSerializer();            Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(respText);            //通过键access_token获取值            try            {                accessToken = respDic["access_token"].ToString();            }            catch (Exception e)            {                accessToken =e.Message;            }            return accessToken;        }

生成合法票据

正式调用前需要生成合法的票据,C#示例代码如下:

        public string getJsapi_ticket(string accessToken)        {            string content = "";            try            {                string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi";                string method = "GET";                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;                Stream responseStream = response.GetResponseStream();                StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);                //获取返回过来的结果                content = sr.ReadToEnd();                dynamic resultStr = JsonConvert.DeserializeObject(content, new { errcode = "", errmsg = "", ticket = "", expires_in = "" }.GetType());                //请求成功                if (resultStr.errcode == "0" && resultStr.errmsg == "ok")                {                    content = resultStr.ticket;                }                else                {                    content = "";                }                return content;            }            catch (Exception ex)            {                content = ex.Message;                return content;            }        }

获取有效签名

通过获取成功的票据信息,生成有效签名后,就可以在客户端进行调用及分享了,示例代码如下:

            public static string GetMD5(string encypStr, string charset)            {                string retStr;                MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();                //创建md5对象                byte[] inputBye;                byte[] outputBye;                //使用GB2312编码方式把字符串转化为字节数组.                try                {                    inputBye = Encoding.GetEncoding(charset).GetBytes(encypStr);                }                catch (Exception ex)                {                    inputBye = Encoding.GetEncoding("GB2312").GetBytes(encypStr);                }                outputBye = m5.ComputeHash(inputBye);                retStr = System.BitConverter.ToString(outputBye);                retStr = retStr.Replace("-", "").ToUpper();                return retStr;            }                /// <summary>                /// 随机串                /// </summary>                public string getNoncestr()                {                    Random random = new Random();                    return GetMD5(random.Next(1000).ToString(), "GBK").ToLower().Replace("s", "S");                }                /// <summary>                /// 时间截,自1970年以来的秒数                /// </summary>                public  string getTimestamp()                {                    TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);                    return Convert.ToInt64(ts.TotalSeconds).ToString();                }        /// <summary>        /// 签名加密,使用SHA加密所得        /// </summary>        /// <param name="content">签名加密参数</param>        /// <param name="encode">编码UTF-8</param>        /// <returns></returns>        public string Sha1(string content, Encoding encode)        {            try            {                SHA1 sha1 = new SHA1CryptoServiceProvider();                byte[] bytesIn = encode.GetBytes(content);                byte[] bytesOut = sha1.ComputeHash(bytesIn);                sha1.Dispose();                string result = BitConverter.ToString(bytesOut);                result = result.Replace("-", "");                return result;            }            catch (Exception ex)            {                throw new Exception("SHA1加密出错:" + ex.Message);            }        }        /// <summary>        /// 获取签名        /// </summary>        /// <param name="jsapi_ticket">

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/68143.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 新章速递养大的反派疯魔了是什么小说(江曜姬时语)完本阅读无广告(江曜姬时语)
  • 爱,一触就破无广告_妹妹夏夏孟夏人气小说_小说后续在线阅读_无删减免费完结_
  • 他死后前妻疯魔了彩蛋(顾煜迟林筱棠)全书在线下载阅读完美终章小说大结局
  • 此后锦书休寄周窈音全文最新章节(周窈音)全文免费阅读无弹窗大结局_周窈音免费阅读
  • 弹幕说我是捞女?反手收购男主公司养鸡(林朝曦沈墨川)_弹幕说我是捞女?反手收购男主公司养鸡
  • 没给寡嫂抢到La******,老公把我和儿子做成蜡像(顾云州沈云烟)_没给寡嫂抢到La******,老公把我和儿子做成蜡像顾云州沈云烟
  • 出狱后,假千金靠玄术杀疯了(顾九音霍霆修)_出狱后,假千金靠玄术杀疯了
  • 养妹偷我认亲玉佩当上千金,男友当场分手超长版_玉佩陈雨柔养父母一口气看完_小说后续在线阅读_无删减免费完结_
  • 抽卡后,气运之子怎么都缠上来了小说(夏挽棠)(抽卡后,气运之子怎么都缠上来了)全书+后续+结局在线阅读
  • 前传爱意随风消逝续集:全文+番外乔清浅宋轻舟:结局+番外新上热文
  • 宋昭黎陆铭绪(假如从没拥抱你)前文+全本完整阅读预售作品抢先看
  • 终章小说搬空海港!我携军舰嫁军官躺赢了完结篇(温婉历战)已更新+延伸(搬空海港!我携军舰嫁军官躺赢了)清爽版

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1