C#微信公众平台开发之access_token的获取存储与更新

C#微信公众平台开发之access_token的获取存储与更新

前言

微信公众平台开发中,access_token是关键的全局唯一接口调用凭据,获取access_token是进行后续接口调用的必要步骤。因为获取access_token每日调用次数有限,并且获取access_token的过程中存在一些约束和具体的有效期,所以需要进行存储和更新。

本文将详细介绍如何在C#中获取access_token、存储access_token、更新access_token的全过程。

access_token说明

access_token是微信调用接口的全局唯一凭据,时间上每日仅有2000次获取机会,每个access_token的有效期为两小时,因此access_token需要进行存储和更新。

获取access_token的API接口

获取access_token的API接口为:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
  • grant_type 获取access_token填写client_credential
  • appid 第三方用户唯一凭证,即开发者id
  • secret 第三方用户唯一凭证密钥,即appsecret

请求成功后会返回以下JSON格式数据:

{
    "access_token": "ACCESS_TOKEN",
    "expires_in": 7200
}

其中access_token就是获取到的access_token值,expires_in表示access_token的有效期,单位为秒,7200秒即两小时。

获取access_token的C#代码示例

public static string GetAccessToken(string appid, string secret)
{
    //获取access_token的API接口url
    string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret);

    //发送GET请求到API地址
    WebClient wc = new WebClient();
    string result = wc.DownloadString(url);

    //解析JSON数据
    JObject jo = JObject.Parse(result);
    string access_token = jo["access_token"].ToString();
    int expires_in = int.Parse(jo["expires_in"].ToString());

    return access_token;
}

其中appid和secret分别是开发者的id和密钥,调用此方法即可获取到access_token,返回的是access_token值。

存储access_token

access_token获取成功后,需要进行存储,方便后续使用。

存储access_token的方法有很多,例如数据库、文件、缓存等,这里以文件作为存储的样例。

public static void SaveAccessToken(string fileName, string access_token)
{
    using (FileStream fs = new FileStream(fileName, FileMode.Create))
    {
        using (TextWriter tw = new StreamWriter(fs))
        {
            tw.Write(access_token);
        }
    }
}

其中fileName为文件名,access_token为需要存储的access_token值。此方法会将access_token值存储到指定文件中。

加载access_token

获取到access_token后,需要进行后续接口调用,因此需要对access_token的有效期进行判断,如果access_token已过期,则需要重新获取。

在重新获取前,需要先加载已存储的access_token值。

public static string LoadAccessToken(string fileName)
{
    string access_token = null;
    if (File.Exists(fileName))
    {
        using (FileStream fs = new FileStream(fileName, FileMode.Open))
        {
            using (TextReader tr = new StreamReader(fs))
            {
                access_token = tr.ReadToEnd();
            }
        }
    }
    return access_token;
}

其中fileName为文件名,此方法会从指定文件中加载access_token值并返回。

判断access_token是否过期

获取到access_token后,需要对access_token的有效期进行判断,如果access_token已过期,则需要重新获取。

public static bool IsAccessTokenExpired(string fileName)
{
    bool result = true;
    if (File.Exists(fileName))
    {
        try
        {
            using (FileStream fs = new FileStream(fileName, FileMode.Open))
            {
                using (TextReader tr = new StreamReader(fs))
                {
                    string access_token = tr.ReadToEnd();
                    result = string.IsNullOrWhiteSpace(access_token);
                    if (!result)
                    {
                        string[] parts = access_token.Split('|');
                        result = parts.Length != 2 || long.Parse(parts[1]) < DateTime.Now.Ticks;
                    }
                }
            }
        }
        catch
        {
            result = true;
        }
    }
    return result;
}

其中fileName为文件名,此方法会根据存储的access_token值判断access_token是否过期,如果过期则返回true,否则返回false。

更新access_token

如果access_token已过期,则需要重新获取,重新获取后需要将新的access_token值存储到文件中,覆盖原有的access_token值。

public static void UpdateAccessToken(string fileName, string appid, string secret)
{
    if (IsAccessTokenExpired(fileName))
    {
        string access_token = GetAccessToken(appid, secret);
        if (!string.IsNullOrWhiteSpace(access_token))
        {
            SaveAccessToken(fileName, access_token);
        }
    }
}

其中fileName为文件名,appid和secret分别是开发者的id和密钥,此方法会判断access_token是否过期,如果过期则重新获取并存储到文件中。

示例说明

  1. 获取access_token并存储到文件中
string appid = "your appid";
string secret = "your appsecret";
string fileName = "access_token.txt";
string access_token = GetAccessToken(appid, secret);
if (!string.IsNullOrWhiteSpace(access_token))
{
    SaveAccessToken(fileName, access_token);
    Console.WriteLine("access_token saved: " + access_token);
}
  1. 加载access_token并判断是否过期
string fileName = "access_token.txt";
string access_token = LoadAccessToken(fileName);
if (!string.IsNullOrWhiteSpace(access_token) && !IsAccessTokenExpired(fileName))
{
    Console.WriteLine("access_token loaded: " + access_token);
}
else
{
    Console.WriteLine("access_token expired or not found");
}
  1. 更新access_token
string appid = "your appid";
string secret = "your appsecret";
string fileName = "access_token.txt";
UpdateAccessToken(fileName, appid, secret);
Console.WriteLine("access_token updated");

总结

以上就是C#微信公众平台开发中获取、存储、更新access_token的完整攻略。实际使用时可以根据需要对存储方式进行调整,例如使用缓存等。同时建议使用try-catch对可能出现的异常进行处理,提高程序的稳定性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#微信公众平台开发之access_token的获取存储与更新 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法

    首先,我们需要了解Windows API及C#中如何调用Windows API。Windows API是Windows操作系统提供给开发者的一组函数,通过这些函数我们可以访问Windows系统的各种资源。在C#中,我们可以使用[DllImport]特性来调用Windows API中的函数。 在本篇攻略中,我们将介绍如何使用GetDesktopWindow函数…

    C# 2023年6月7日
    00
  • 关于Python 位运算防坑指南

    下面是关于 “Python 位运算防坑指南” 的完整攻略。 什么是位运算? 通俗来说,位运算是对二进制数的操作,主要包括与(&)、或(|)、异或(^)、左移(<<)和右移(>>)。 Python 中可以用以下语法进行位运算: a & b # 与运算 a | b # 或运算 a ^ b # 异或运算 a <<…

    C# 2023年5月15日
    00
  • 利用TaskManager爬取2万条代理IP实现自动投票功能

    下面是详细讲解“利用TaskManager爬取2万条代理IP实现自动投票功能”的完整攻略。 1. 思路与准备 我们需要以下几个准备工作: 安装Python环境; 安装第三方库requests、bs4、lxml; 找到可供爬取的代理IP网站,并学习其网页结构和请求方式; 编写代码,使用requests发送请求,解析网页,获取代理IP列表; 使用TaskMana…

    C# 2023年6月7日
    00
  • C#实现图形位置组合转换的方法

    C#实现图形位置组合转换的方法 在C#中,通过使用矩阵转换可以实现图形位置组合的转换。该方法包含两个部分:矩阵的生成和矩阵的应用。 矩阵的生成 通过创建Matrix类实例来生成矩阵,可以调用它的一些方法来定义矩阵,如平移、旋转和缩放等。以下是几个常用的矩阵生成方法: 平移矩阵 平移矩阵可以将图形向上或向下、向左或向右移动。可以使用Matrix类的Transl…

    C# 2023年6月8日
    00
  • asp实现读取数据库输出json代码

    下面是ASP实现读取数据库输出JSON格式的完整攻略。 第一步:连接数据库 首先,我们需要连接数据库。在ASP中,我们可以使用ADODB库来连接数据库。以下是连接字符串的示例代码: Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=Mic…

    C# 2023年5月31日
    00
  • C#解析Lrc歌词文件过程详解

    下面是“C#解析Lrc歌词文件过程详解”的完整攻略。 1. 前言 Lrc歌词文件是一种常见的音乐歌词格式,它具有简单易读、易修正等特点。对于一些音乐播放器而言,能够解析Lrc歌词文件,就可以在播放音乐的同时显示相应的歌词,让用户更方便地进行歌曲欣赏。因此,Lrc歌词文件的解析也成为一种常见的编程需求。 本文将详细讲解利用C#编程语言解析Lrc歌词文件的过程,…

    C# 2023年5月15日
    00
  • js 模拟实现类似c#下的hashtable的简单功能代码

    要模拟实现类似C#下的Hashtable的简单功能代码,我们可以使用JavaScript的对象和数组。以下是几个简单的步骤来实现Hashtable的简单功能。 创建Hashtable类 首先,我们需要创建一个Hashtable类,可以使用class语法糖来完成这一步。 class Hashtable { constructor() { this._map =…

    C# 2023年6月6日
    00
  • 基于ABP架构开发的.Net Core项目部署到IIS问题汇总

    基于ABP架构开发的.Net Core项目部署到IIS问题汇总 ABP框架是一个基于DDD的开源Web应用程序框架,它使用最新的ASP.NET Core技术。在本攻略中,我们将讨论如何将基于ABP架构开发的.Net Core项目部署到IIS,并总结一些常见问题及其解决方案。 步骤一:安装.NET Core Runtime和.NET Core Hosting …

    C# 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部