RsCode.WeChat内封装多个常用的获取accesstoken的方法,自动处理accesstoken的有效期。
它定义于接口IWechatTokenManager
中
//获取指定AppId的accessToken
Task<string> GetAccessTokenAsync(string appId);
//微信用户授权后获取到的token
Task<string> GetAccessTokenAsync( string appId,string code);
//第三方平台的componentAccessToken
Task<string> GetComponentTokenAsync(string componentAppId);
//第三方平台获取预授权码
Task<string> GetPreAuthCodeAsync(string componentAppId, string componentAccessToken);
注入IWeChatClient ,调用UseAppId("your appid")
public class Demo
{
WeChatOptions WeChatOptions;
IWeChatClient wechat;
public Demo(IWeChatClient _wechat)
{
wechat=_wechat;
WeChatOptions=wechat.UseAppId("your appid");
}
public async Task<object> GetAccessTokenAsync()
{
// cgi-bin/token
await wechat.SendAsync<AppAccessTokenResponse>(new AppAccessTokenRequest(WeChatOptions.AppId,WeChatOptions.AppSecret));
// sns/oauth2
string code="";//用户授权的code
await wechat.SendAsync<OAuthTokenResponse>(new OAuthTokenRequest(WeChatOptions.AppId,WeChatOptions.AppSecret,code));
}
}
注意:该方法要缓存保存token
推荐:使用IWechatTokenManager ,它会将token自动缓存至内存中
public test(IWechatTokenManager _wechatTokenManager)
{
wechatTokenManager = _wechatTokenManager;
}
public void GetToken()
{
string appid="";
//获取apptoken
var token = await wechatTokenManager.GetAccessTokenAsync(appid);
//获取用户token
var token = await wechatTokenManager.GetAccessTokenAsync(appid,code);
}
定义类StoreHelper.cs,重新定义存储token的方法,例如
public class StoreHelper : IStoreHelper
{
ICacheProvider cache;
public StoreHelper(IEnumerable<ICacheProvider>caches)
{
cache = caches.FirstOrDefault(c => c.CacheName == "redis");
}
public T Get<T>(string key)
{
return cache.Get<T>(key);
}
public void Set(string key, object obj, int seconds = 7000)
{
cache.Set(key, obj, seconds);
}
}
添加IStoreHelper到容器中
services.AddScoped<IStoreHelper,StoreHelper>();
© 2022 rscode.cn MIT license