微信公众号平台接口开发 获取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 子窗体父窗体相互传值方法
May 31 Javascript
javascript中定义类的方法汇总
Dec 28 Javascript
JavaScript中的数组操作介绍
Dec 30 Javascript
jQuery简单几行代码实现tab切换
Mar 10 Javascript
JavaScript中数据结构与算法(二):队列
Jun 19 Javascript
Easyui form combobox省市区三级联动
Jan 13 Javascript
JavaScript中 this 指向问题深度解析
Feb 21 Javascript
详解Angular 开发环境搭建
Jun 22 Javascript
使用Vue写一个datepicker的示例
Jan 27 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
彻底弄懂 JavaScript 执行机制
Oct 23 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
Mar 16 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
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
用实例解释Python中的继承和多态的概念
2015/04/27 Python
浅析python递归函数和河内塔问题
2017/04/18 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
美国旅游网站:Tours4Fun
2017/02/17 全球购物
奥地利网上书店:Weltbild
2017/07/14 全球购物
经济管理专业求职信
2014/06/09 职场文书
平安家庭事迹材料
2014/12/20 职场文书
领导欢送会主持词
2015/07/06 职场文书
Python基础之数据结构详解
2021/04/28 Python
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python