/************************************************* * GetAccessToken(后端API) * 获取后台接口调用凭证。AccessToken 是小程序全局唯一后台接口调用凭据,调用绝大多数后台接口时都需使用 * 参考 * 小程序获取Token文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/auth.getAccessToken.html * 公众号获取Token文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183 * 访问方法一致,公众号要求配置IP白名单,小程序无需配置。 * 返回值: * access_token string 获取到的凭证 * expires_in number 凭证有效时间,单位:秒。目前是7200秒之内的值。 * errcode number 错误码 * errmsg string 错误信息 * access_token 的存储与更新 * access_token 的存储至少要保留 512 个字符空间; * access_token 的有效期目前为 2 个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效; * access_token 的有效期通过返回的 expire_in 来传达,目前是7200秒之内的值,需要根据这个有效时间提前去刷新。 * 建议开发者使用中控服务器统一获取和刷新 access_token * 其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致 access_token 覆盖而影响业务; * 在刷新过程中,中控服务器可对外继续输出的老 access_token,此时公众平台后台会保证在5分钟内,新老 access_token 都可用,这保证了第三方业务的平滑过渡; * access_token 的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新 * 还需要提供被动刷新 access_token 的接口,这样便于业务服务器在API调用获知 access_token 已超时的情况下,可以触发 access_token 的刷新流程。 *************************************************/ /// <summary>获取访问Token(带缓存机制)</summary> /// <param name="refresh">是否强制刷新,从微信官方服务器重新生成Token</param> public static string GetAccessToken(WechatAppType type, bool refresh = false) { GetAccessTokenReply data; var key = "WechatAccessToken" + type.ToString(); var cache = HttpContext.Current.Cache; if (refresh || cache[key] == null) { var appId = WechatConfig.GetAppId(type); var appSecret = WechatConfig.GetAppSecret(type); data = GetAccessTokenInternal(appId, appSecret); cache.Insert(key, data, null, data.ExpireDt, Cache.NoSlidingExpiration); } data = cache[key] as GetAccessTokenReply; return(data.access_token); }
public static string GetAppSecret(WechatAppType type) { return((type == WechatAppType.Open) ? WechatConfig.OpenAppSecret : WechatConfig.MPAppSecret); }
public static string GetPayUrl(WechatAppType type) { return((type == WechatAppType.Open) ? WechatConfig.OpenPayUrl : WechatConfig.MPPayUrl); }
public static string MchKey = ConfigurationManager.AppSettings["WechatMchKey"]; // 商户平台设置的密钥key //--------------------------------------------- // 辅助方法 //--------------------------------------------- public static string GetAppId(WechatAppType type) { return((type == WechatAppType.Open) ? WechatConfig.OpenAppId : WechatConfig.MPAppId); }