ABP 使用cache缓存
阅读原文时间:2023年07月09日阅读:2

using Abp.Application.Services.Dto;
using Abp.Runtime.Caching;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Schema;
using Senparc.CO2NET.HttpUtility;
using Senparc.Weixin.CommonAPIs.ApiHandlerWapper;
using Senparc.Weixin.MP.Containers;
using Senparc.Weixin.MP.Entities;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace AbpProject.WeiXinMPCache
{
public class MPCacheAppService : AbpProjectAppServiceBase, IMPCacheAppService
{
///

/// appid ///
private readonly string AppIdSAddress = "WeiXinMP:AppID";
/// /// appsecret ///
private readonly string AppSecretAddress = "WeiXinMP:AppSecret";
/// /// 获取token的路径 ///
private readonly string AccTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";

    private readonly ICacheManager \_cacheManager;  
    private readonly IConfiguration \_appConfiguration;

    public MPCacheAppService(IConfiguration appConfiguration, ICacheManager cacheManager)  
    {  
        \_appConfiguration = appConfiguration;  
        \_cacheManager = cacheManager;  
    }

    /// <summary>  
    /// 获取公众微信号的token  
    /// </summary>  
    /// <returns></returns>  
    public async Task<string> GetAccessToken()  
    {  
        var acctoken = await \_cacheManager.GetCache("WeiXinMP").GetOrDefaultAsync("AccessToken");  
        if (acctoken == null || string.IsNullOrEmpty(acctoken.ToString()))  
        {  
            var appId = \_appConfiguration\[AppIdSAddress\];  
            var appSecret = \_appConfiguration\[AppSecretAddress\];  
            var url = string.Format(AccTokenUrl, appId, appSecret);  
            var result = HttpClientHelper<AccessTokenResult>.Get(url,new AccessTokenResult());  
            if (result != null)  
            {  
                await \_cacheManager.GetCache("WeiXinMP").SetAsync("AccessToken", result.access\_token, TimeSpan.FromHours());  
                return result.access\_token;  
            }  
        }  
        return acctoken.ToString();  
    }

}  

}