微信公众号平台接口开发 获取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 相关文章推荐
ASP.NET中AJAX 调用实例代码
May 03 Javascript
json数据的列循环示例
Sep 06 Javascript
jquery实现table鼠标经过变色代码
Sep 25 Javascript
利用js实现禁止复制文本信息
Jun 03 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
Apr 28 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
Nov 09 Javascript
详解用webpack2.0构建vue2.0超详细精简版
Apr 05 Javascript
JS获取当前地理位置的方法
Oct 25 Javascript
vscode中eslint插件的配置(prettier配置无效)
Sep 10 Javascript
vue 需求 data中的数据之间的调用操作
Aug 05 Javascript
在Vue中使用Echarts实例图的方法实例
Oct 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
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
Python 定义只读属性的实现方式
2020/03/05 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
国贸专业个人求职信分享
2013/12/04 职场文书
如何写好升职自荐信
2014/01/06 职场文书
分公司经理任命书
2014/06/05 职场文书
小学综合实践活动总结
2014/07/07 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
抢劫罪辩护词
2015/05/21 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
python实现Nao机器人的单目测距
2021/09/04 Python