예제 #1
0
        public AccessTokenModel GetAccessToken(string corpid, string corpsecret)
        {
            var accessToken = _accessTokeStore.GetAccessToken(corpid, corpsecret);

            if (accessToken == null || DateTime.Now >= accessToken.ExpiresTime)
            {
                lock (lockObj)
                {
                    try
                    {
                        string url = WechatUrlHelper.GettokenUrl(corpid, corpsecret);
                        var    res = _httpClient.SendGet <AccessTokenMessage>(url);
                        if (res.HttpStatusCode == System.Net.HttpStatusCode.OK)
                        {
                            var accessTokenMsg = res.Result;
                            if (accessTokenMsg.ErrCode == 0)
                            {
                                accessToken = AccessTokenMsgMap(accessTokenMsg);
                                var tmpAccessToken = _accessTokeStore.GetAccessToken(corpid, corpsecret);
                                if (tmpAccessToken == null || DateTime.Now >= tmpAccessToken.ExpiresTime)
                                {
                                    _accessTokeStore.SaveAccessToken(corpid, corpsecret, accessToken);
                                    return(accessToken);
                                }
                                return(tmpAccessToken);
                            }
                            else
                            {
                                _logger.LogError($"获取accessToken失败,错误码:{accessTokenMsg.ErrCode},错误消息:{accessTokenMsg.ErrMsg},corpid:{corpid},corpsecret:{corpsecret}");
                                return(null);
                            }
                        }
                        else
                        {
                            _logger.LogError($"请求accessToken失败,http错误码:{res.HttpStatusCode},Url:{url}");
                            return(null);
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError($"获取accessToken发生异常,{ex.Message}", ex);
                        return(null);
                    }
                }
            }
            else
            {
                return(accessToken);
            }
        }
예제 #2
0
        public OperationResult <WechatUserInfo> GetWechatUserInfo(string access_token, string code)
        {
            string url = WechatUrlHelper.GetuserinfoUrl(access_token, code);
            var    res = _httpClient.SendGet <UserInfoMessage>(url);

            if (res.HttpStatusCode == System.Net.HttpStatusCode.OK && res.Result != null)
            {
                var msg = res.Result;
                if (msg.ErrCode == 0)
                {
                    string openId = string.IsNullOrEmpty(msg.UserId) ? msg.OpenId : msg.UserId;
                    return(OperationResult <WechatUserInfo> .CreateSuccessResult(new WechatUserInfo(openId, msg.DeviceId)));
                }
                else
                {
                    return(OperationResult <WechatUserInfo> .CreateFailedResult($"ErrCode:{msg.ErrCode} ErrMsg:{msg.ErrMsg}"));
                }
            }
            else
            {
                return(OperationResult <WechatUserInfo> .CreateFailedResult($"http error code {res.HttpStatusCode}"));
            }
        }
예제 #3
0
 public string GetOAuthConnect(string corpID, string redirect_uri, string state = null)
 {
     return(WechatUrlHelper.OAuthConnect(corpID, redirect_uri, state));
 }