微信公众号平台接口开发 获取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 相关文章推荐
js下弹出窗口的变通
Apr 18 Javascript
IE8 原生JSON支持
Apr 13 Javascript
JavaScript获取/更改文本框的值的实例代码
Aug 02 Javascript
js对象内部访问this修饰的成员函数示例
Apr 27 Javascript
探索angularjs+requirejs全面实现按需加载的套路
Feb 26 Javascript
angularjs实现首页轮播图效果
Apr 14 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
Apr 17 Javascript
React Native 集成jpush-react-native的示例代码
Aug 16 Javascript
Angularjs cookie 操作实例详解
Sep 27 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
Nov 03 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
Nov 30 Javascript
解决vue自定义指令导致的内存泄漏问题
Aug 04 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生成自己的LOG文件
2006/10/09 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
JavaScript Timer实现代码
2010/02/17 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
js动态切换图片的方法
2015/01/20 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
python中执行shell命令的几个方法小结
2014/09/18 Python
python的类方法和静态方法
2014/12/13 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
Python基础之文件读取的讲解
2019/02/16 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
2013年保送生自荐信格式
2013/11/20 职场文书
办公室前台岗位职责
2014/01/04 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书