知识点
相关文章
更多最近更新
更多微信公众账户的开发者模式(一) 部分细节access_token的获取等
2019-03-02 00:47|来源: 网路
十四老久没有写博客了,中间经历了,事业,感情的几分波折。现在终于稍微缓过来一点。又是一次从头开始,走在匆忙的路上。
好了煽情完了,直接上代码了。
基础就不说了我用的是vs2005开发的,部署在iis6.0上,微信号为:ruyishh。目前只是简单的功能。
/// <summary> /// 获取access_token /// </summary> /// <returns></returns> public static string GetAccessToken() { WebClient webClient = new WebClient(); Byte[] bytes = webClient.DownloadData(string.Format("{0}&appid={1}&secret={2}", m_AcessTokenUrl, m_appid, m_secret)); string result = Encoding.GetEncoding("utf-8").GetString(bytes); //JObject jObj = JObject.Parse(result); //JToken token = jObj["access_token"]; //return token.ToString().Substring(1, token.ToString().Length - 2); string []temp = result.Split(','); string[] tp = temp[0].Split(':'); return tp[1].ToString().Replace('"',' ').Trim().ToString(); }
关于access_token呢 我理解就相当于一个全局session吧,每次获取一个,上一个就会过期失效,开发文档上说的有效期为30天吧。至于access_token的作用呢,可以用来创建自定义菜单。
#region //创建自定义菜单 注意Json格式问题 private void CreateWxMenu() { string weixin1 = ""; weixin1 += "{\n"; weixin1 += "\"button\":[\n"; weixin1 += "{\n"; // weixin1 += "\"type\":\"click\",\n"; //第一个菜单 weixin1 += "\"name\":\"故障维修\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"宽带故障\",\n"; weixin1 += "\"key\":\"V1001_REPAIRBAND\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"固话故障\",\n"; weixin1 += "\"key\":\"V1001_REPAIRPHONE\"\n"; weixin1 += "}]\n"; weixin1 += "},\n"; //第二个菜单 weixin1 += "{\n"; //weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"查询服务\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"话费余额\",\n"; weixin1 += "\"key\":\"V1002_TELQUERY\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"流量查询\",\n"; weixin1 += "\"key\":\"V1002_FLOWQUERY\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"积分查询\",\n"; weixin1 += "\"key\":\"V1002_TOTALQUERY\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"账单查询\",\n"; weixin1 += "\"key\":\"V1002_LISTQUERY\"\n"; weixin1 += "}]\n"; weixin1 += "},\n"; //第三个菜单 weixin1 += "{\n"; weixin1 += "\"name\":\"套餐服务\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"最新业务\",\n"; weixin1 += "\"key\":\"V1003_NEWS\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"流量套餐\",\n"; weixin1 += "\"key\":\"V1003_SETMEAL\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"短信套餐\",\n"; weixin1 += "\"key\":\"V1003_MESSAGE\"\n"; weixin1 += "}]\n"; weixin1 += "}\n"; weixin1 += "}]\n"; weixin1 += "}\n"; PostMenuData( postUrl+GetAccessToken(),weixin1 ); } private void PostMenuData(string url, string postData) { Stream outstream = null; Stream instream = null; StreamReader sr = null; HttpWebResponse response = null; HttpWebRequest request = null; Encoding encoding = Encoding.UTF8; byte[] data = encoding.GetBytes(postData); // 准备请求... try { // 设置参数 request = WebRequest.Create(url) as HttpWebRequest; CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; request.AllowAutoRedirect = true; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; outstream = request.GetRequestStream(); outstream.Write(data, 0, data.Length); outstream.Close(); //发送请求并获取相应回应数据 response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序才开始向目标网页发送Post请求 instream = response.GetResponseStream(); sr = new StreamReader(instream, encoding); //返回结果网页(html)代码 string content = sr.ReadToEnd(); string err = string.Empty; // return content; } catch (Exception ex) { string err = ex.Message; //return string.Empty; } }
关系图我就不画了,运行逻辑呢就是这样: 微信用户 <> 腾讯微信服务器 <> 我的程序
对于处理程序代码如下:
protected void Page_Load(object sender, EventArgs e) { if (Request.HttpMethod.ToLower() == "post") { Stream s = System.Web.HttpContext.Current.Request.InputStream; byte[] b = new byte[s.Length]; s.Read(b, 0, (int)s.Length); postStr = Encoding.UTF8.GetString(b); if (!string.IsNullOrEmpty(postStr)) { ResponseMsg(); //对微信服务器psot形式发来的消息进行处理 } } else { string echoStr = System.Web.HttpContext.Current.Request.QueryString["echoStr"]; if (CheckSignature()) { if( !string.IsNullOrEmpty( echoStr ) ) System.Web.HttpContext.Current.Response.Write(echoStr); //返回原值表示校验成功 System.Web.HttpContext.Current.Response.End(); } } } //返回微信信息 private void ResponseMsg() { 在此写你的处理代码 }
转自:http://www.cnblogs.com/yanghucheng/p/3382513
相关问答
更多-
PHP定时任务获取微信access_token的方法[2022-10-20]
本文实例讲述了PHP定时任务获取微信access_token的方法。分享给大家供大家参考,具体如下: 微信access_token在开发时会变的好像是几分种不一样了,这里我们来介绍关于PHP定时任务获取微信access_token的方法。 最近开发微信公众平台,公众号调用各接口时都需使用access_token,access_token是公众号的全局唯一接口调用凭据,开发时需要进行妥善保存。 access_token有效期为7200秒 ,重复获取将导致上次获取的access_token失效。 由于微信对获取 ... -
微信订阅号 如何开通开发者中心[2023-04-26]
需要绑定第三方开发平台,一般第三方开发平台都会有介绍怎么配置。 -
微信公众平台开发模式怎么用?[2022-12-13]
一、开发模式可以实现的功能 1、可以接收用户发送过来的消息,通过你自己开发的系统把对应内容反馈回去。 2、可以接收用户发送过来的地理位置,通过地理位置你可以反馈附近餐厅信息或交通信息(例如高德地图) 3、通过事件推送,可以识别用户对公众帐号订阅和取消订阅操作的情况。 4、开发模式的接口除了可以反馈图文消息,也可以反馈音频内容给用户。 5、可以通过通用接口上传图片、语音、视频等内容到公众平台上,并且可以调用这些素材。 6、可以管理自定义菜单功能。(该功能还在内测中) 二、开发模式不能实现的功能 1、不能识别用 ... -
微信公众订阅号怎么开通开发者模式?[2023-04-14]
登录公众号,点击左侧导航中的开发者中心,在右边点击开启即可,如果你是使用接口程序的话,将获得的url和token输入到里面即可使用 -
微信公众平台的开发者模式有哪些功能?[2022-12-21]
太多太多了,这么说吧,微信公众平台只有最简单的图片文字和视频,而且大小都是有限制的,如果你想更多的功能必须用开发模式。看这个视频,绑定第三方平台,就能开发了。 -
目前微信公众平台的开发者模式能实现那些功能?[2022-04-30]
新版微信公众平台去除了编辑模式和开发模式,让普通用户更方便地使用公众号,开发者也可以在开发者中心中,统一管理开发资源、权限和配置。微信公众平台开发者中心功能的使用方便了更多的微信用户,也方便了我们的生活。 -
微信公众平台开发者中心[2022-09-08]
登录微信公众平台,点击左下角的 开发者工具,即可看到相关文档。 -
微信公众号模板消息开发[2023-04-08]
你这个问题太深奥了,去微信开发平台问吧. 网址是微信的全拼.com -
你必须重定向到你的本地主机 。 You must be just redirect to your localhost.
-
为沙盒环境运行获取格式的access_token(Getting access_token for plaid for sandbox environment running)[2022-08-22]
通过检查演示应用程序页面获得的public_token是针对该演示应用程序的client_id和secret。 它不会与您的client_id和秘密一起使用。 您需要使用client_id和secret在本地运行演示应用程序。 看看这个 - https://github.com/plaid/quickstart/tree/master/node 按照自述文件在本地运行演示,但使用client_id和secret,然后像上面那样检查页面。 你这次得到的public_token将与你的client_id和秘密: ...