微信公众号平台接口开发 获取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的倒计时插件代码
May 07 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
Nov 16 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
Jan 12 Javascript
从零学习node.js之mysql数据库的操作(五)
Feb 24 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
Mar 21 Javascript
React/Redux应用使用Async/Await的方法
Nov 16 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
Jan 12 Javascript
深入理解Vue router的部分高级用法
Aug 15 Javascript
vue  自定义组件实现通讯录功能
Sep 30 Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 Javascript
原生Js 实现的简单无缝滚动轮播图的示例代码
May 10 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
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
JS实现php的伪分页
2008/05/25 PHP
完美解决PHP中文乱码
2009/11/26 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
php实现每日签到功能
2018/11/29 PHP
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
微信小程序自定义弹窗wcPop插件
2018/11/19 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
python中lambda与def用法对比实例分析
2015/04/30 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
Pycharm学习教程(2) 代码风格
2017/05/02 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
python实现神经网络感知器算法
2017/12/20 Python
python中requests和https使用简单示例
2018/01/18 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
怎样填写就业意向
2014/04/02 职场文书
企业文化标语口号
2014/06/09 职场文书
文明城市标语
2014/06/16 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers