微信公众号平台接口开发 获取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 相关文章推荐
跟着Jquery API学Jquery之一 选择器
Apr 07 Javascript
为原生js Array增加each方法
Apr 07 Javascript
jquery实现树形二级菜单实例代码
Nov 20 Javascript
多个jQuery版本共存的处理方案
Mar 17 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
Mar 11 Javascript
js中判断变量类型函数typeof的用法总结
Aug 09 Javascript
jQuery层次选择器用法示例
Sep 09 Javascript
NODE.JS跨域问题的完美解决方案
Oct 20 Javascript
jQuery实现模拟flash头像裁切上传功能示例
Dec 11 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 Javascript
JavaScript如何操作css
Oct 24 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
zend api扩展的php对象的autoload工具
2011/04/18 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
初识PHP
2014/09/28 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
5 cool javascript apps
2007/03/24 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
Vue运用transition实现过渡动画
2019/05/06 Javascript
Python3 replace()函数使用方法
2018/03/19 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
python实现复制大量文件功能
2019/08/31 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
中国宠物用品商城:E宠商城
2016/08/27 全球购物
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
UDP协议功能
2013/01/06 面试题
如何写好升职自荐信
2014/01/06 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
Python pandas求方差和标准差的方法实例
2021/08/04 Python
Python循环之while无限迭代
2022/04/30 Python