微信公众号平台接口开发 获取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 相关文章推荐
url 特殊字符 传递参数解决方法
Jan 01 Javascript
裁剪字符串trim()自定义改进版
Apr 10 Javascript
多引号嵌套的变量命名的问题
May 09 Javascript
js实现鼠标触发图片抖动效果的方法
Feb 27 Javascript
js实现人才网站职位选择功能的方法
Aug 14 Javascript
jQuery Validate表单验证深入学习
Dec 18 Javascript
jQuery版AJAX简易封装代码
Sep 14 Javascript
快速处理vue渲染前的显示问题
Mar 05 Javascript
node打造微信个人号机器人的方法示例
Apr 26 Javascript
vue2使用keep-alive缓存多层列表页的方法
Sep 21 Javascript
JS事件循环机制event loop宏任务微任务原理解析
Aug 04 Javascript
js canvas实现五子棋小游戏
Jan 22 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
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
php格式化金额函数分享
2015/02/02 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
php输出图像的方法实例分析
2017/02/16 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
群众路线自我剖析材料
2014/10/08 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
2015暑假假期总结
2015/07/13 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
解析MySQL binlog
2021/06/11 MySQL