每次在于微信交互时,都要用到access_token,但是这个值限制的是有时间的,但是access_token,在以后的高级功能里面会经常用到,所以这里不得不这里对前面所讲解的access_token改造一下。 另外需要说明的是access_token是变化的,有自己的周期,官方解释为:"
每次在于微信交互时,都要用到access_token,但是这个值限制的是有时间的,但是access_token,在以后的高级功能里面会经常用到,所以这里不得不这里对前面所讲解的access_token改造一下。
另外需要说明的是access_token是变化的,有自己的周期,官方解释为:"有效期为7200秒",这就要求我们把获得的access_token存入一个物理文件或者Application中,请求到过期后修改这些内容,需要用的时候读出来.或者是存入数据库,到期时修改改access_token的值。
有些人可能想到了,如果过期我就在获得一个就好了,不用物理文件和Application也可以达到同样的效果,但是需要注意了微信平台对每天获得,access_token的次数也作了限制,一个用户出发多次,如果用户多,那肯定就超出了。所以我们还是按照以上的思路实现这些功能:
在此之前我们已经了解了获得access_token的方法(连接)http://www.cnblogs.com/QLJ1314/p/3838058.html,现在只需要保证它的随时更新就好了.
首先建立一个Access_token类
<span> 1</span> <span>///</span> <span><summary></summary></span> <span> 2</span> <span>///</span><span>Access_token 的摘要说明 </span><span> 3</span> <span>///</span> <span></span> <span> 4</span> <span>public</span> <span>class</span><span> Access_token </span><span> 5</span> <span> { </span><span> 6</span> <span>public</span><span> Access_token() </span><span> 7</span> <span> { </span><span> 8</span> <span>//</span> <span> 9</span> <span>//</span><span>TODO: 在此处添加构造函数逻辑 </span><span>10</span> <span>//</span> <span>11</span> <span> } </span><span>12</span> <span>string</span><span> _access_token; </span><span>13</span> <span>string</span><span> _expires_in; </span><span>14</span> <span>15</span> <span>///</span> <span><summary></summary></span> <span>16</span> <span>///</span><span> 获取到的凭证 </span><span>17</span> <span>///</span> <span></span> <span>18</span> <span>public</span> <span>string</span><span> access_token </span><span>19</span> <span> { </span><span>20</span> <span>get</span> { <span>return</span><span> _access_token; } </span><span>21</span> <span>set</span> { _access_token =<span> value; } </span><span>22</span> <span> } </span><span>23</span> <span>24</span> <span>///</span> <span><summary></summary></span> <span>25</span> <span>///</span><span> 凭证有效时间,单位:秒 </span><span>26</span> <span>///</span> <span></span> <span>27</span> <span>public</span> <span>string</span><span> expires_in </span><span>28</span> <span> { </span><span>29</span> <span>get</span> { <span>return</span><span> _expires_in; } </span><span>30</span> <span>set</span> { _expires_in =<span> value; } </span><span>31</span> <span> } </span><span>32</span> }View Code
<span>1</span> <?xml version=<span>"<span>1.0</span><span>"</span> encoding=<span>"</span><span>utf-8</span><span>"</span>?> <span>2</span> <xml> <span>3</span> <access_token>初始值可以随便写</access_token> <span>4</span> <access_youxrq><span>1990</span>/<span>12</span>/<span>12</span> <span>16</span>:<span>06</span>:<span>38</span></access_youxrq> <span>5</span> </xml>View Code
之前获得Access_token的方法改造一下,让他给Access_token实例赋值
<span> 1</span> <span>public</span> <span>static</span><span> Access_token GetAccess_token() </span><span> 2</span> <span> { </span><span> 3</span> <span>string</span> appid =<span> 你的appid ; </span><span> 4</span> <span>string</span> secret =<span> 你的secret; </span><span> 5</span> <span>string</span> strUrl = <span>"</span><span>https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=</span><span>"</span> + appid + <span>"</span><span>&secret=</span><span>"</span> +<span> secret; </span><span> 6</span> Access_token mode = <span>new</span><span> Access_token(); </span><span> 7</span> <span> 8</span> HttpWebRequest req =<span> (HttpWebRequest)HttpWebRequest.Create(strUrl); </span><span> 9</span> <span>10</span> req.Method = <span>"</span><span>GET</span><span>"</span><span>; </span><span>11</span> <span>using</span> (WebResponse wr =<span> req.GetResponse()) </span><span>12</span> <span> { </span><span>13</span> HttpWebResponse myResponse =<span> (HttpWebResponse)req.GetResponse(); </span><span>14</span> <span>15</span> StreamReader reader = <span>new</span><span> StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); </span><span>16</span> <span>17</span> <span>string</span> content =<span> reader.ReadToEnd(); </span><span>18</span> <span>//</span><span>Response.Write(content); </span><span>19</span> <span>//</span><span>在这里对Access_token 赋值 </span> <span>20</span> Access_token token = <span>new</span><span> Access_token(); </span><span>21</span> token = JsonHelper.ParseFromJson<access_token><span>(content); </span><span>22</span> mode.access_token =<span> token.access_token; </span><span>23</span> mode.expires_in =<span> token.expires_in; </span><span>24</span> <span> } </span><span>25</span> <span>return</span><span> mode; </span><span>26</span> } </access_token>View Code
以上的方法用到了Json对象的处理,所以我把JsonHelper的代码一贴出来供大家参考,一下就是JsonHelper.cs的代码:
<span> 1</span> <span>using</span><span> System; </span><span> 2</span> <span>using</span><span> System.IO; </span><span> 3</span> <span>using</span><span> System.Text; </span><span> 4</span> <span>using</span><span> System.Runtime.Serialization.Json; </span><span> 5</span> <span> 6</span> <span> 7</span> <span> 8</span> <span>public</span> <span>class</span><span> JsonHelper </span><span> 9</span> <span> { </span><span>10</span> <span>///</span> <span><summary></summary></span> <span>11</span> <span>///</span><span> 生成Json格式 </span><span>12</span> <span>///</span> <span></span> <span>13</span> <span>///</span> <span><typeparam name="T"></typeparam></span> <span>14</span> <span>///</span> <span><param name="obj"></span> <span>15</span> <span>///</span> <span><returns></returns></span> <span>16</span> <span>public</span> <span>static</span> <span>string</span> GetJson<t><span>(T obj) </span><span>17</span> <span> { </span><span>18</span> DataContractJsonSerializer json = <span>new</span><span> DataContractJsonSerializer(obj.GetType()); </span><span>19</span> <span>using</span> (MemoryStream stream = <span>new</span><span> MemoryStream()) </span><span>20</span> <span> { </span><span>21</span> <span> json.WriteObject(stream, obj); </span><span>22</span> <span>string</span> szJson = Encoding.UTF8.GetString(stream.ToArray()); <span>return</span><span> szJson; </span><span>23</span> <span> } </span><span>24</span> <span> } </span><span>25</span> <span>///</span> <span><summary></summary></span> <span>26</span> <span>///</span><span> 获取Json的Model </span><span>27</span> <span>///</span> <span></span> <span>28</span> <span>///</span> <span><typeparam name="T"></typeparam></span> <span>29</span> <span>///</span> <span><param name="szJson"></span> <span>30</span> <span>///</span> <span><returns></returns></span> <span>31</span> <span>public</span> <span>static</span> T ParseFromJson<t>(<span>string</span><span> szJson) </span><span>32</span> <span> { </span><span>33</span> T obj = Activator.CreateInstance<t><span>(); </span><span>34</span> <span>using</span> (MemoryStream ms = <span>new</span><span> MemoryStream(Encoding.UTF8.GetBytes(szJson))) </span><span>35</span> <span> { </span><span>36</span> DataContractJsonSerializer serializer = <span>new</span><span> DataContractJsonSerializer(obj.GetType()); </span><span>37</span> <span>return</span><span> (T)serializer.ReadObject(ms); </span><span>38</span> <span> } </span><span>39</span> <span> } </span><span>40</span> } </t></t></t>View Code
其实还可以直接饮用Newtonsoft.Json.dll 可以直接操作json,这样更方便一些。
我们还需要写一个判断access_token是否过期如果过期更新XML文件的方法。
<span> 1</span> <span>///</span> <span><summary></summary></span> <span> 2</span> <span>///</span><span> 根据当前日期 判断Access_Token 是否超期 如果超期返回新的Access_Token 否则返回之前的Access_Token </span><span> 3</span> <span>///</span> <span></span> <span> 4</span> <span>///</span> <span><param name="datetime"></span> <span> 5</span> <span>///</span> <span><returns></returns></span> <span> 6</span> <span>public</span> <span>static</span> <span>string</span><span> IsExistAccess_Token() </span><span> 7</span> <span> { </span><span> 8</span> <span> 9</span> <span>string</span> Token = <span>string</span><span>.Empty; </span><span>10</span> <span> DateTime YouXRQ; </span><span>11</span> <span>//</span><span> 读取XML文件中的数据,并显示出来 ,注意文件路径 </span> <span>12</span> <span>string</span> filepath = Server.MapPath(<span>"</span><span>XMLFile.xml</span><span>"</span><span>); </span><span>13</span> <span>14</span> StreamReader str = <span>new</span><span> StreamReader(filepath, System.Text.Encoding.UTF8); </span><span>15</span> XmlDocument xml = <span>new</span><span> XmlDocument(); </span><span>16</span> <span> xml.Load(str); </span><span>17</span> <span> str.Close(); </span><span>18</span> <span> str.Dispose(); </span><span>19</span> Token = xml.SelectSingleNode(<span>"</span><span>xml</span><span>"</span>).SelectSingleNode(<span>"</span><span>Access_Token</span><span>"</span><span>).InnerText; </span><span>20</span> YouXRQ = Convert.ToDateTime(xml.SelectSingleNode(<span>"</span><span>xml</span><span>"</span>).SelectSingleNode(<span>"</span><span>Access_YouXRQ</span><span>"</span><span>).InnerText); </span><span>21</span> <span>22</span> <span>if</span> (DateTime.Now ><span> YouXRQ) </span><span>23</span> <span> { </span><span>24</span> DateTime _youxrq =<span> DateTime.Now; </span><span>25</span> Access_token mode =<span> GetAccess_token(); </span><span>26</span> xml.SelectSingleNode(<span>"</span><span>xml</span><span>"</span>).SelectSingleNode(<span>"</span><span>Access_Token</span><span>"</span>).InnerText =<span> mode.access_token; </span><span>27</span> _youxrq = _youxrq.AddSeconds(<span>int</span><span>.Parse(mode.expires_in)); </span><span>28</span> xml.SelectSingleNode(<span>"</span><span>xml</span><span>"</span>).SelectSingleNode(<span>"</span><span>Access_YouXRQ</span><span>"</span>).InnerText =<span> _youxrq.ToString(); </span><span>29</span> <span> xml.Save(filepath); </span><span>30</span> Token =<span> mode.access_token; </span><span>31</span> <span> } </span><span>32</span> <span>return</span><span> Token; </span><span>33</span> }View Code
好了,完成了上面的工作,我只需要在使用到access_token的时调用如下就OK了,“客户再也不用担心token的过期”
string _access_token = IsExistAccess_Token();

MySQL值得学习,因为它是强大的开源数据库管理系统,适用于数据存储、管理和分析。1)MySQL是关系型数据库,使用SQL操作数据,适合结构化数据管理。2)SQL语言是与MySQL交互的关键,支持CRUD操作。3)MySQL的工作原理包括客户端/服务器架构、存储引擎和查询优化器。4)基本用法包括创建数据库和表,高级用法涉及使用JOIN连接表。5)常见错误包括语法错误和权限问题,调试技巧包括检查语法和使用EXPLAIN命令。6)性能优化涉及使用索引、优化SQL语句和定期维护数据库。

MySQL适合初学者学习数据库技能。1.安装MySQL服务器和客户端工具。2.理解基本SQL查询,如SELECT。3.掌握数据操作:创建表、插入、更新、删除数据。4.学习高级技巧:子查询和窗口函数。5.调试和优化:检查语法、使用索引、避免SELECT*,并使用LIMIT。

MySQL通过表结构和SQL查询高效管理结构化数据,并通过外键实现表间关系。1.创建表时定义数据格式和类型。2.使用外键建立表间关系。3.通过索引和查询优化提高性能。4.定期备份和监控数据库确保数据安全和性能优化。

MySQL是一个开源的关系型数据库管理系统,广泛应用于Web开发。它的关键特性包括:1.支持多种存储引擎,如InnoDB和MyISAM,适用于不同场景;2.提供主从复制功能,利于负载均衡和数据备份;3.通过查询优化和索引使用提高查询效率。

SQL用于与MySQL数据库交互,实现数据的增、删、改、查及数据库设计。1)SQL通过SELECT、INSERT、UPDATE、DELETE语句进行数据操作;2)使用CREATE、ALTER、DROP语句进行数据库设计和管理;3)复杂查询和数据分析通过SQL实现,提升业务决策效率。

MySQL的基本操作包括创建数据库、表格,及使用SQL进行数据的CRUD操作。1.创建数据库:CREATEDATABASEmy_first_db;2.创建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入数据:INSERTINTObooks(title,author,published_year)VA

MySQL在Web应用中的主要作用是存储和管理数据。1.MySQL高效处理用户信息、产品目录和交易记录等数据。2.通过SQL查询,开发者能从数据库提取信息生成动态内容。3.MySQL基于客户端-服务器模型工作,确保查询速度可接受。

构建MySQL数据库的步骤包括:1.创建数据库和表,2.插入数据,3.进行查询。首先,使用CREATEDATABASE和CREATETABLE语句创建数据库和表,然后用INSERTINTO语句插入数据,最后用SELECT语句查询数据。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6
视觉化网页开发工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1
功能强大的PHP集成开发环境