微信公众号平台接口开发 获取access_token过程解析


Posted in Javascript onAugust 14, 2019

新建Asp.net MVC 4.0项目

微信公众号平台接口开发 获取access_token过程解析

WeChatSubscript是项目UI层

WeChatTools是封装操作访问公众号接口的一些方法类库

获取AccssToken

我们要的得到AccessToken,这是所有接口访问的基础,我们看看官方给出的接口调用文档

微信公众号平台接口开发 获取access_token过程解析

很简单明了,grant_type=client_credential,这是固定的不会变

appid与secret就是前面一章我叫大家记起来的那个认证口令数据。

下边我们来实现这个功能,新建WeCharBase.cs

public class WeCharBase
  {
    private static readonly string appId;
    private static readonly string appSecret;

    static WeCharBase()
    {
      appId = "**********";
      appSecret = "832090bfddabbac19cc8da5053aea47b";
    }

    public static string AccessToken
    {
      get { return GetAccessToken(); }
    }

    /// <summary>获取access_token</summary>
    /// <param name="appId"></param>
    /// <param name="appSecret"></param>
    /// <returns></returns>
    private static string GetAccessToken()
    {
      if (HttpContext.Current == null)
      {
        return GetToken();
      }

      var accessTokenCache = HttpContext.Current.Cache["access_token"];
      if (accessTokenCache != null)
      {
        return accessTokenCache.ToString();
      }
      else
      {
        return GetToken();
      }
    }

    /// <summary>获取ccess_token</summary>
    /// <returns></returns>
    private static string GetToken()
    {
      try
      {
        var client = new WebClient();
        client.Encoding = Encoding.UTF8;
        var responseData = client.DownloadString(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appSecret));

        var javaScriptSerializer = new JavaScriptSerializer();
        var accessDictionary = javaScriptSerializer.Deserialize<Dictionary<string, object>>(responseData);
        var accessToken = accessDictionary["access_token"];
        if (accessToken == null)
        {
          return string.Empty;
        }

        HttpContext.Current.Cache.Insert("access_token", accessToken, null, DateTime.Now.AddSeconds(7100), TimeSpan.Zero, CacheItemPriority.Normal, null);
        HttpContext.Current.Cache.Remove("ticket");
        GetTicket();

        return accessToken.ToString();
      }
      catch (Exception ex)
      {
        return ex.Message;
      }
    }
  }

细心的童鞋功能注意到这里用了HttpContext.Current.Cache,为什么呢?

因为access_token在官方服务器会缓存2个小时,请求一次,这个access_token在2个小时内都有效

所以请求一次得到access_token后,在以后的2个小时内都可以用这个access_token去访问其他接口

所以没有必要每次请求不同的接口都请求access_token一次

UI层实现

我们新建控制器SubscriptController.cs

新增2个Action,ViewAccessToken

/// <summary>获取AccessToken</summary>
    /// <returns></returns>
    public ActionResult ViewAccessToken()
    {
      return View();
    }
    /// <summary>获取AccessToken</summary>
    /// <returns></returns>
    public ActionResult GetAccessToken()
    {
      return Content(WeCharBase.AccessToken);
    }

新增视图

<script type="text/javascript" language="javascript">
  $(document).ready(function () {
    $("#btnGetAccessToken").click(function () {
      $.ajax({
        type: "Get",
        url: "/Subscript/GetAccessToken",
        success: function (responseTest) {
          $("#txtAccessToken").text(responseTest);
        }
      });
    });
  });
</script>

<table>
  <tr>
    <td>
      <div class="title">获取access token</div>
      <textarea id="txtAccessToken" name="txtAccessToken" rows="4" style="width:500px"></textarea>
    </td>
    <td><input class="btncss" id="btnGetAccessToken" type="button" value=" 获取 " /></td>
  </tr>
</table>

运行项目,看看效果

微信公众号平台接口开发 获取access_token过程解析

成功了,是不是很简单呀

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
定义select的边框颜色
Apr 28 Javascript
jQuery 名称冲突的解决方法
Apr 08 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
Jan 16 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Sep 26 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
Mar 26 Javascript
JS控件bootstrap suggest plugin使用方法详解
Mar 25 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
Oct 04 Javascript
vue一个页面实现音乐播放器的示例
Feb 06 Javascript
vue使用iframe嵌入网页的示例代码
Jun 09 Javascript
JS基于对象的链表实现与使用方法示例
Jan 31 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
Sep 14 Javascript
vue使用echarts实现水平柱形图实例
Sep 09 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
Aug 14 #Javascript
websocket4.0+typescript 实现热更新的方法
Aug 14 #Javascript
利用JavaScript的Map提升性能的方法详解
Aug 14 #Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 #Javascript
vue源码nextTick使用及原理解析
Aug 13 #Javascript
封装微信小程序http拦截器过程解析
Aug 13 #Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 #Javascript
You might like
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
Javascript引用指针使用介绍
2012/11/07 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
js实现全选和全不选
2020/07/28 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
[01:37]TI4西雅图DOTA2前线报道 VG拿下首胜教练357给出获胜秘诀
2014/07/10 DOTA
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
Python单链表原理与实现方法详解
2020/02/22 Python
python如何控制进程或者线程的个数
2020/10/16 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
中软国际Java程序员机试题
2012/08/19 面试题
介绍一下Java中标识符的命名规则
2014/02/03 面试题
应届毕业生求职信范例分享
2013/12/17 职场文书
上学迟到的检讨书
2014/01/11 职场文书
违反学校规定检讨书
2014/01/18 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
销售职业生涯规划范文
2014/03/14 职场文书
原告代理词范文
2015/05/25 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书