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日

相关文章

  • asp.net core 中的Jwt(Json Web Token)的使用详解

    ASP.NET Core 中的 JWT (Json Web Token) 的使用详解 什么是 JWT? JWT 是一种轻量级的身份验证和授权解决方案,它是为 Web 应用程序设计的,基于 JSON 形式的轻量级开放标准(RFC 7519)。 其特点在于: 可以使用一个 token 进行身份验证和授权,避免了复杂的 Sessions 或者 Cookies 的管…

    C# 2023年6月3日
    00
  • .Net整合Json实现REST服务客户端的方法详解

    .Net整合Json实现REST服务客户端 什么是REST服务? REST(Representational State Transfer)是目前最流行的一种网络应用程序的设计风格和开发方式,是一种轻量级的Web服务解决方案。它采用REST架构,通过HTTP协议实现,既可以返回XML或JSON格式的数据。 相较于SOAP,REST服务具有轻量级、易于缓存、可…

    C# 2023年5月31日
    00
  • 深入理解MVC中的时间js格式化

    关于“深入理解MVC中的时间js格式化”的完整攻略,我将以下面的方式进行详细说明: 1. 什么是MVC 首先,我们需要了解MVC模式的基本概念。MVC代表Model-View-Controller(模型-视图-控制器),是一种设计模式,一种将应用程序的逻辑分离成三个主要部分的方式。这三个部分之间的交互是根据一组规则进行的。 Model:代表应用程序的数据和业…

    C# 2023年5月31日
    00
  • 基于C# 网站地图制作

    针对“基于C# 网站地图制作”的完整攻略,以下是详细的步骤: 第一步:确定需求 首先确定你需要制作的网站地图是什么样子的,包括要展示的页面和页面的分类,以及是否需要添加一些交互功能,这些都是需要提前确认的。 第二步:编写 C# 代码 在 Visual Studio 等开发工具中创建一个 Web 应用程序项目,然后编写 C# 代码。你可以使用 MVC 框架进行…

    C# 2023年6月1日
    00
  • 基于c#用Socket做一个局域网聊天工具

    下面是如何基于C#使用Socket编写一个局域网聊天工具的完整攻略。 1. 确定聊天工具功能 在开发之前,我们需要明确自己需要实现哪些功能。一个基本的局域网聊天工具需要完成的功能有:连接、发送、接收、断开、修改昵称等操作。 2. 基本架构 想要实现局域网聊天工具,需要先了解Socket编程的基本原理。需要使用TcpListener和TcpClient来建立连…

    C# 2023年6月7日
    00
  • asp.net 序列化and反序列化演示

    下面我来为你详细讲解一下 “ASP.NET 序列化和反序列化演示” 的攻略。 简介 在 ASP.NET 开发中,序列化和反序列化是一个非常重要的操作。序列化可以将对象转化为字节流或者xml格式,并存储在内存或者文件中。反序列化则是将字节流或者xml格式的数据重新转化为对象。序列化和反序列化通常用于跨应用程序或网络传输对象时使用,例如:通过web服务发送和接收…

    C# 2023年6月3日
    00
  • C# log4net 日志输出的实现示例

    下面我将详细讲解C#log4net日志输出的实现示例,包含如何配置log4net和示例的代码实现。 配置log4net 首先,我们需要在项目中添加log4net的nuget包,并在项目的AssemblyInfo.cs文件中添加以下代码: [assembly: log4net.Config.XmlConfigurator(ConfigFile = "…

    C# 2023年5月15日
    00
  • Entity Framework使用LINQ操作实体

    下面我将为你详细讲解如何使用Entity Framework使用LINQ操作实体。 什么是Entity Framework Entity Framework(EF)是一个面向对象的ORM(Object/Relational Mapping,对象关系映射)框架。通过EF,我们可以将数据库中的数据转换为对象,在程序中使用对象的方式操作数据库。它使得我们可以使用像…

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