每次在于微信交互时,都要用到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はオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLは、データストレージ、管理、クエリ、セキュリティに適したオープンソースのリレーショナルデータベース管理システムです。 1.さまざまなオペレーティングシステムをサポートし、Webアプリケーションやその他のフィールドで広く使用されています。 2。クライアントサーバーアーキテクチャとさまざまなストレージエンジンを通じて、MySQLはデータを効率的に処理します。 3.基本的な使用には、データベースとテーブルの作成、挿入、クエリ、データの更新が含まれます。 4.高度な使用には、複雑なクエリとストアドプロシージャが含まれます。 5.一般的なエラーは、説明ステートメントを介してデバッグできます。 6.パフォーマンスの最適化には、インデックスの合理的な使用と最適化されたクエリステートメントが含まれます。

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

INNODBのロックメカニズムには、共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロックが含まれます。 1.共有ロックにより、トランザクションは他のトランザクションが読み取らないようにデータを読み取ることができます。 2.排他的ロックは、他のトランザクションがデータの読み取りと変更を防ぎます。 3.意図ロックは、ロック効率を最適化します。 4。ロックロックインデックスのレコードを記録します。 5。ギャップロックロックインデックス記録ギャップ。 6.次のキーロックは、データの一貫性を確保するためのレコードロックとギャップロックの組み合わせです。

MySQLクエリのパフォーマンスが低いことの主な理由には、インデックスの使用、クエリオプティマイザーによる誤った実行計画の選択、不合理なテーブルデザイン、過剰なデータボリューム、ロック競争などがあります。 1.インデックスがゆっくりとクエリを引き起こし、インデックスを追加するとパフォーマンスが大幅に向上する可能性があります。 2。説明コマンドを使用してクエリ計画を分析し、オプティマイザーエラーを見つけます。 3.テーブル構造の再構築と結合条件を最適化すると、テーブルの設計上の問題が改善されます。 4.データボリュームが大きい場合、パーティション化とテーブル分割戦略が採用されます。 5.高い並行性環境では、トランザクションの最適化とロック戦略は、ロック競争を減らすことができます。

データベースの最適化では、クエリ要件に従ってインデックス作成戦略を選択する必要があります。1。クエリに複数の列が含まれ、条件の順序が固定されている場合、複合インデックスを使用します。 2。クエリに複数の列が含まれているが、条件の順序が修正されていない場合、複数の単一列インデックスを使用します。複合インデックスは、マルチコラムクエリの最適化に適していますが、単一列インデックスは単一列クエリに適しています。

MySQLスロークエリを最適化するには、slowquerylogとperformance_schemaを使用する必要があります。1。LowerQueryLogを有効にし、しきい値を設定して、スロークエリを記録します。 2。performance_schemaを使用してクエリの実行の詳細を分析し、パフォーマンスのボトルネックを見つけて最適化します。

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
