Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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);
        }