微信公众号平台接口开发 获取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读取中文cookie时的乱码问题的解决方法
Oct 14 Javascript
JavaScript 浏览器验证代码(来自discuz)
Jul 17 Javascript
Position属性之relative用法
Dec 14 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
May 16 Javascript
JS回调函数简单用法示例
Feb 09 Javascript
jquery滚动条插件slimScroll使用方法
Feb 09 Javascript
EasyUI中的dataGrid的行内编辑
Jun 22 Javascript
微信小程序canvas实现刮刮乐效果
Jul 09 Javascript
vue后台管理之动态加载路由的方法
Aug 13 Javascript
JQuery的加载和选择器用法简单示例
May 13 jQuery
JS实现的雪花飘落特效示例
Dec 03 Javascript
JS使用Chrome浏览器实现调试线上代码
Jul 23 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
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
vue中七牛插件使用的实例代码
2017/07/28 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
vue中使用腾讯云Im的示例
2020/10/23 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
Python中文竖排显示的方法
2015/07/28 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
给民警的表扬信
2014/01/08 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
市场营销工作计划书
2014/09/15 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
2015年企业新年寄语
2014/12/08 职场文书
教育实习指导教师评语
2014/12/31 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
React如何创建组件
2021/06/27 Javascript