在senparc中实现了AccessToken的全局获取方式,因微信项目涉及跨语言、跨团队,外包方式的合作,需要通过接口方式供合作方调用,现将使用webapi实现的接口分享给大家:
1、自定义一个对外统一的AccessToken
/// <summary>
/// 自定义一个对外统一的AccessToken
/// </summary>
[Serializable]
public class MPAccessTokenInfo
{
/// <summary>
/// 获取到的凭证
/// </summary>
public string AccessToken { get; set; } /// <summary>
/// 凭证到什么时间过期
/// </summary>
public DateTime AccessTokenExpireTime { get; set; }
}
2、接口方法
//-----------------------------------------------------------------------
// <copyright file="WechatOpenController.cs" company="FenSiShengHuo, Ltd.">
// Copyright (c) 2018 , All rights reserved.
// </copyright>
//----------------------------------------------------------------------- using Senparc.Weixin.Open.Containers;
using System;
using System.Web.Http; namespace DotNet.WeChat.API.Controllers
{
using DotNet.Utilities;
using DotNet.WeChat.API.Common;
using Senparc.Weixin.Containers;
using Senparc.Weixin.MP.Containers;
using Senparc.Weixin.Open.ComponentAPIs; /// <summary>
/// WechatOpenController
///
/// 修改纪录
///
/// 2018-07-27 版本:1.0 JiShiYu 创建文件。
///
/// <author>
/// <name>JiShiYu</name>
/// <date>2018-07-27</date>
/// </author>
/// </summary> public class WechatController : ApiController
{
/// <summary>
/// 获取微信调用的Token 公众号的方式
/// </summary>
/// <returns></returns>
public JsonResult<MPAccessTokenInfo> GetMPAccessToken()
{
JsonResult<MPAccessTokenInfo> result = new JsonResult<MPAccessTokenInfo>();
result.Status = false;
result.StatusMessage = "没有获取到";
try
{
var accessTokenResult = AccessTokenContainer.GetAccessTokenResult(GlobalSetting.WeixinAppId);
var accessTokenBag = BaseContainer<AccessTokenBag>.TryGetItem(GlobalSetting.WeixinAppId);
MPAccessTokenInfo info = new MPAccessTokenInfo();
info.AccessToken = accessTokenResult.access_token;
info.AccessTokenExpireTime = accessTokenBag.AccessTokenExpireTime;
result.Status = true;
result.Data = info;
result.StatusMessage = "成功获取";
}
catch (Exception ex)
{
NLogHelper.Warn(ex, "WechatOpenController : ApiController GetAccessToken");
result.Status = false;
result.StatusMessage = "异常:" + ex.Message;
} return result;
} }
}
3、接口返回值
{
"Status": true,
"ResultValue": "",
"StatusCode": "OK",
"StatusMessage": "成功获取",
"RecordCount": 0,
"Data": {
"AccessToken": "12_wGwcOStoi9XzRjjCzcwMgubNythtfRGqAn1ntj19I4rR_Rze5vvk5FQyd2ELUmDkFYR47lzkKdnzYzQV1Iqdj0D7tGTguqesXBTHOlLeiUmjMrbGRN_vAG26QFEilArzXBcRMCCcob2_FNr1EEZaAHARRM",
"AccessTokenExpireTime": "2018-07-29 21:21:05"
}
}
返回值中AccessTokenExpireTime表示当前的AccessToken在什么时候过期,第三方调用时可以据此设置缓存,避免每次都调用接口获取,减少接口交互次数。