/// <summary> /// 获取微信用户 Access Token /// </summary> /// <param name="code"></param> /// <returns></returns> public static UserAccessTokenResponseMessage GetUserAccessToken(string code) { string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", ConfigurationManager.AppSettings["AppId"], ConfigurationManager.AppSettings["AppSecret"], code); UserAccessTokenResponseMessage response = WechatApi.GetWechatApi <UserAccessTokenResponseMessage>(url); if (response.ErrorCode.HasValue && response.ErrorCode.Value != 0) { throw new WechatApiInvokeException(response.ErrorCode.Value, response.ErrorMessage, url); } return(response); }
/// <summary> /// 从微信服务器获取票据凭证 /// </summary> /// <returns></returns> public static AccessTokenResponseMessage GetAccessTokenFromWechat() { string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", ConfigurationManager.AppSettings["AppId"], ConfigurationManager.AppSettings["AppSecret"]); LogHelper.Info("正在调用接口获取票据凭证..."); AccessTokenResponseMessage response = WechatApi.GetWechatApi <AccessTokenResponseMessage>(url); LogHelper.Info("已获取票据凭证。"); if (response.ErrorCode.HasValue && response.ErrorCode.Value != 0) { throw new WechatApiInvokeException(response.ErrorCode.Value, response.ErrorMessage, url); } return(response); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="url"></param> /// <returns></returns> private static T GetWechatApiWithToken <T>(string rawUrl) where T : WechatApiResponseMessage { string accessToken = WechatApi.GetAccessToken(); string url = rawUrl + "access_token=" + accessToken; T response = WechatApi.GetWechatApi <T>(url); if (response.ErrorCode.HasValue) { switch (response.ErrorCode.Value) { case 0: break; // 如果是票据过期问题,则重新获取票据 case 40001: case 40014: case 42001: LogHelper.Info(string.Format("调用微信接口时票据凭证无效或过期, errcode : {0}, errmsg : {1}, interface : {2}", response.ErrorCode, response.ErrorMessage, url)); // 重新获取票据凭证 accessToken = WechatApi.RefreshAccessToken(accessToken); url = rawUrl + "access_token=" + accessToken; response = WechatApi.GetWechatApi <T>(url); if (response.ErrorCode.HasValue && response.ErrorCode.Value != 0) { throw new WechatApiInvokeException(response.ErrorCode.Value, response.ErrorMessage, url); } break; default: throw new WechatApiInvokeException(response.ErrorCode.Value, response.ErrorMessage, url); } } return(response); }