微信公众号平台接口开发 获取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 相关文章推荐
Javascript学习笔记-详解in运算符
Sep 13 Javascript
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
May 27 Javascript
JavaScript中Function()函数的使用教程
Jun 04 Javascript
AngularJS基础 ng-options 指令详解
Aug 02 Javascript
D3.js实现文本的换行详解
Oct 14 Javascript
基于Vue的移动端图片裁剪组件功能
Nov 28 Javascript
深入理解 webpack 文件打包机制(小结)
Jan 08 Javascript
微信小程序实现全局搜索代码高亮的示例
Mar 30 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
May 28 jQuery
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
Sep 14 Javascript
解决antd的Form组件setFieldsValue的警告问题
Oct 29 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和XSS跨站攻击的防范
2007/04/17 PHP
php curl模拟post请求小实例
2013/11/13 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
2011/10/21 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python实现新浪博客备份的方法
2016/04/27 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
python适合人工智能的理由和优势
2019/06/28 Python
python实现大文件分割与合并
2019/07/22 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
业务员岗位职责范本
2013/12/15 职场文书
经典大学生求职信范文
2014/01/06 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL