public static RequestApiResult <WeixinAddMaterialResult> AddNormalMaterial(DomainContext domainContext, string file, MaterialType type)
        {
            string accessToken = domainContext.AccessToken;
            RequestApiResult <WeixinAddMaterialResult> result = MaterialApi.AddNormalMaterial(accessToken, file, type);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = MaterialApi.AddNormalMaterial(accessToken, file, type);
                    if (result.Success == false)
                    {
                        _log.Write("MaterialApi.AddNormalMaterial 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("MaterialApi.AddNormalMaterial 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
        public static RequestApiResult <WeixinArticleMaterialListItemContent> GetArticleMaterial(DomainContext domainContext, string mediaId)
        {
            string accessToken = domainContext.AccessToken;
            RequestApiResult <WeixinArticleMaterialListItemContent> result = MaterialApi.GetArticleMaterial(accessToken, mediaId);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = MaterialApi.GetArticleMaterial(accessToken, mediaId);
                    if (result.Success == false)
                    {
                        _log.Write("MaterialApi.GetArticleMaterial 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("MaterialApi.GetArticleMaterial 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
예제 #3
0
        public static RequestApiResult Send(DomainContext domainContext, KFMessageBase message)
        {
            string           accessToken = domainContext.AccessToken;
            RequestApiResult result      = KFApi.Send(accessToken, message);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = KFApi.Send(accessToken, message);
                    if (result.Success == false)
                    {
                        _log.Write("KFApi.Send 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("KFApi.Send 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
        public static RequestApiResult <WeixinCreateShortUrlResult> GetShortUrl(DomainContext domainContext, string longUrl)
        {
            string accessToken = domainContext.AccessToken;
            RequestApiResult <WeixinCreateShortUrlResult> result = ShortUrlApi.GetShortUrl(accessToken, longUrl);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = ShortUrlApi.GetShortUrl(accessToken, longUrl);
                    if (result.Success == false)
                    {
                        _log.Write("ShortUrlApi.GetShortUrl 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("ShortUrlApi.GetShortUrl 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
        /// <summary>
        /// 刷新指定域下面分组信息,将调用微信API获取最新分组信息
        /// </summary>
        /// <param name="domainContext"></param>
        public void SyncGroupList(DomainContext domainContext)
        {
            RequestApiResult <WeixinGetGroupListResult> result = GroupApiWrapper.GetGroupList(domainContext);

            if (result.Success)
            {
                List <CommandParameter> parameterList = new List <CommandParameter>();
                parameterList.Add(new CommandParameter("@domain", domainContext.Domain.Id));
                parameterList.Add(new CommandParameter("@appId", domainContext.AppId));

                _dataBase.ExecuteNonQuery("DELETE FROM [MemberGroup] WHERE [Domain] = @domain AND [AppId] = @appId",
                                          parameterList);

                foreach (WeixinGetGroupListResult_Group item in result.ApiResult.GroupList)
                {
                    MemberGroupEntity group = new MemberGroupEntity();
                    group.GroupId = item.Id;
                    group.Name    = item.Name;
                    group.Domain  = domainContext.Domain.Id;
                    group.AppId   = domainContext.AppId;
                    _dataBase.Insert(group);
                }

                //过滤用户,将已不存在的分组置为0
            }
            else
            {
                _log.Write("RefreshGroupList 失败", result.Message, TraceEventType.Warning);
            }
        }
예제 #6
0
        /// <summary>
        /// 获取授权方的账户信息
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public static RequestApiResult <WeixinThirdPartyGetAuthorizerAccountInfoResult> GetAuthorizerAccountInfo(
            string accessToken, WeixinThirdPartyGetAuthorizerAccountInfoArgs args)
        {
            /*
             * 注意,这个接口官方页面给出的返回JSON有错误
             * qrcode_url 是 authorizer_info 的属性,而不是根级别的属性
             */

            RequestApiResult <WeixinThirdPartyGetAuthorizerAccountInfoResult> result =
                new RequestApiResult <WeixinThirdPartyGetAuthorizerAccountInfoResult>();

            HttpRequestArgs requestArgs = new HttpRequestArgs();

            requestArgs.Method = "POST";
            requestArgs.Url    = String.Format(
                "https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token={0}",
                accessToken);
            requestArgs.Content = JsonConvert.SerializeObject(args);

            result.HttpRequestArgs   = requestArgs;
            result.HttpRequestResult = _httpService.Request(requestArgs);

            if (result.HttpRequestResult.Success)
            {
                result.ApiResult = WeixinApiHelper.Parse <WeixinThirdPartyGetAuthorizerAccountInfoResult>(
                    result.HttpRequestResult.Content, ref result.ApiError);
            }

            return(result);
        }
        public string MoveMemberListToGroup(DomainContext domainContext, MoveMemberListToGroupArgs args)
        {
            WeixinSetUserListGroupArgs weixinArgs = new WeixinSetUserListGroupArgs();

            weixinArgs.OpenIdList = args.OpenIdList;
            weixinArgs.GroupId    = args.GroupId;

            //先往微信后台更新,成功后写数据库
            RequestApiResult removeResult = GroupApiWrapper.SetUserListGroup(domainContext, weixinArgs);

            if (removeResult.Success == false)
            {
                return(removeResult.Message);
            }

            List <SqlExpression> _sqlList = new List <SqlExpression>();

            //将此分组下的用户分到默认分组下面
            foreach (var openId in args.OpenIdList)
            {
                SqlStructureBuild sqlBuild = new SqlStructureBuild();
                sqlBuild.Type  = SqlExpressionType.Update;
                sqlBuild.Table = "Member";
                sqlBuild.AddParameter("Domain", domainContext.Domain.Id, true);
                sqlBuild.AddParameter("AppId", domainContext.AppId, true);
                sqlBuild.AddParameter("OpenId", openId, true);
                sqlBuild.AddParameter("GroupId", args.GroupId);
                _sqlList.Add(sqlBuild.GetSqlExpression());
            }

            _dataBase.ExcuteSqlExpression(_sqlList);

            return(null);
        }
        public static RequestApiResult <WeixinGetNormalMaterialListResult> GetNormalMaterialList(DomainContext domainContext, WeixinGetMaterialListArgs args)
        {
            string accessToken = domainContext.AccessToken;
            RequestApiResult <WeixinGetNormalMaterialListResult> result = MaterialApi.GetNormalMaterialList(accessToken, args);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = MaterialApi.GetNormalMaterialList(accessToken, args);
                    if (result.Success == false)
                    {
                        _log.Write("MaterialApi.GetNormalMaterialList 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("MaterialApi.GetNormalMaterialList 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
        public NormalResult UpdateMemberTag(DomainContext domainContext, MemberTagEntity tag)
        {
            NormalResult result = new NormalResult(false);

            if (tag == null)
            {
                result.Message = "参数错误。";
                return(result);
            }

            //先往微信后台更新,成功后写数据库
            WeixinTag apiArgs = new WeixinTag();

            apiArgs.Tag.Id   = tag.TagId;
            apiArgs.Tag.Name = tag.Name;
            RequestApiResult updateResult = TagsApiWrapper.Update(domainContext, apiArgs);

            if (updateResult.Success == false)
            {
                result.Message = updateResult.Message;
                return(result);
            }

            _dataBase.Update(tag);

            result.Success = true;
            return(result);
        }
        private AuthorizerAccessTokenWrapper CreateWrapper(string appId)
        {
            string refreshToken = _thirdPartyManager.GetAuthorizerRefreshToken(appId);

            if (String.IsNullOrEmpty(refreshToken))
            {
                _log.Write(appId + " 的 RefreshToken 不存在", TraceEventType.Warning);
                return(null);
            }

            RequestApiResult <WeixinThirdPartyGetAuthorizerAccessTokenResult> result =
                ThirdPartyApiWrapper.GetAuthorizerAccessToken(appId, refreshToken);

            if (result.Success)
            {
                AuthorizerAccessTokenWrapper wrapper = new AuthorizerAccessTokenWrapper();
                wrapper.AppId                 = appId;
                wrapper.RefreshToken          = result.ApiResult.RefreshToken;
                wrapper.AccessToken           = result.ApiResult.AccessToken;
                wrapper.AccessTokenExpiryTime = DateTime.Now.AddSeconds(result.ApiResult.ExpiresIn);
                return(wrapper);
            }

            return(null);
        }
        /// <summary>
        /// 刷新指定域下面分组信息,将调用微信API获取最新分组信息
        /// </summary>
        /// <param name="domainContext"></param>
        public void SyncTagList(DomainContext domainContext)
        {
            RequestApiResult <WeixinGetTagListResult> result = TagsApiWrapper.GetTagList(domainContext);

            if (result.Success)
            {
                List <CommandParameter> parameterList = new List <CommandParameter>();
                parameterList.Add(new CommandParameter("@domain", domainContext.Domain.Id));
                parameterList.Add(new CommandParameter("@appId", domainContext.AppId));

                _dataBase.ExecuteNonQuery("DELETE FROM [MemberTag] WHERE [Domain] = @domain AND [AppId] = @appId",
                                          parameterList);

                foreach (WeixinGetTagListResult_Tag item in result.ApiResult.TagList)
                {
                    MemberTagEntity tag = new MemberTagEntity();
                    tag.TagId  = item.Id;
                    tag.Name   = item.Name;
                    tag.Domain = domainContext.Domain.Id;
                    tag.AppId  = domainContext.AppId;
                    _dataBase.Insert(tag);
                }

                //过滤用户,将已不存在的分组置为0
            }
            else
            {
                _log.Write("RefreshTagList 失败", result.Message, TraceEventType.Warning);
            }
        }
예제 #12
0
        public static RequestApiResult Remove(DomainContext domainContext, int groupId)
        {
            string           accessToken = domainContext.AccessToken;
            RequestApiResult result      = GroupApi.Remove(accessToken, groupId);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = GroupApi.Remove(accessToken, groupId);
                    if (result.Success == false)
                    {
                        _log.Write("GroupApi.Remove 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("GroupApi.Remove 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
예제 #13
0
        public static RequestApiResult <WeixinGroupMessagePreviewResult> Preview(DomainContext domainContext, WeixinGroupMessagePreviewArgs args)
        {
            string accessToken = domainContext.AccessToken;
            RequestApiResult <WeixinGroupMessagePreviewResult> result = GroupMessageApi.Preview(accessToken, args);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = GroupMessageApi.Preview(accessToken, args);
                    if (result.Success == false)
                    {
                        _log.Write("GroupMessageApi.Preview 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("GroupMessageApi.Preview 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
        public static RequestApiResult <WeixinGetUserTagListResult> GetUserTagList(DomainContext domainContext, string openId)
        {
            string accessToken = domainContext.AccessToken;
            RequestApiResult <WeixinGetUserTagListResult> result = TagsApi.GetUserTagList(accessToken, openId);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = TagsApi.GetUserTagList(accessToken, openId);
                    if (result.Success == false)
                    {
                        _log.Write("TagsApi.GetUserTagList 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("TagsApi.GetUserTagList 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
예제 #15
0
        public static RequestApiResult SetUserListGroup(DomainContext domainContext, WeixinSetUserListGroupArgs args)
        {
            string           accessToken = domainContext.AccessToken;
            RequestApiResult result      = GroupApi.SetUserListGroup(accessToken, args);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = GroupApi.SetUserListGroup(accessToken, args);
                    if (result.Success == false)
                    {
                        _log.Write("GroupApi.SetUserListGroup 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("GroupApi.SetUserListGroup 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
        public static RequestApiResult Update(DomainContext domainContext, WeixinTag args)
        {
            string           accessToken = domainContext.AccessToken;
            RequestApiResult result      = TagsApi.Update(accessToken, args);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = TagsApi.Update(accessToken, args);
                    if (result.Success == false)
                    {
                        _log.Write("TagsApi.Update 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("TagsApi.Update 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
예제 #17
0
        /// <summary>
        /// 使用授权码换取公众号的授权信息
        /// </summary>
        public static RequestApiResult <WeixinThirdPartyGetAuthorizationInfoResult> GetAuthorizationInfo(
            string accessToken, WeixinThirdPartyGetAuthorizationInfoArgs args)
        {
            RequestApiResult <WeixinThirdPartyGetAuthorizationInfoResult> result =
                new RequestApiResult <WeixinThirdPartyGetAuthorizationInfoResult>();

            HttpRequestArgs requestArgs = new HttpRequestArgs();

            requestArgs.Method = "POST";
            requestArgs.Url    = String.Format(
                "https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token={0}",
                accessToken);
            requestArgs.Content = JsonConvert.SerializeObject(args);

            result.HttpRequestArgs   = requestArgs;
            result.HttpRequestResult = _httpService.Request(requestArgs);

            if (result.HttpRequestResult.Success)
            {
                result.ApiResult = WeixinApiHelper.Parse <WeixinThirdPartyGetAuthorizationInfoResult>(
                    result.HttpRequestResult.Content, ref result.ApiError);
            }

            return(result);
        }
예제 #18
0
        /// <summary>
        /// 获取预授权码
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="appid"></param>
        /// <returns></returns>
        public static RequestApiResult <WeixinThirdPartyGetPreAuthCodeResult> GetPreAuthCode(
            string accessToken, string appid)
        {
            RequestApiResult <WeixinThirdPartyGetPreAuthCodeResult> result =
                new RequestApiResult <WeixinThirdPartyGetPreAuthCodeResult>();

            HttpRequestArgs requestArgs = new HttpRequestArgs();

            requestArgs.Method = "POST";
            requestArgs.Url    = String.Format(
                "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token={0}",
                accessToken);
            requestArgs.Content = JsonConvert.SerializeObject(new { component_appid = appid });

            result.HttpRequestArgs   = requestArgs;
            result.HttpRequestResult = _httpService.Request(requestArgs);

            if (result.HttpRequestResult.Success)
            {
                result.ApiResult = WeixinApiHelper.Parse <WeixinThirdPartyGetPreAuthCodeResult>(
                    result.HttpRequestResult.Content, ref result.ApiError);
            }

            return(result);
        }
        public NormalResult CreateMemberTag(DomainContext domainContext, MemberTagEntity tag)
        {
            NormalResult result = new NormalResult(false);

            if (tag == null)
            {
                result.Message = "参数错误。";
                return(result);
            }

            //先往微信后台添加,成功后写数据库
            WeixinCreateTagArgs apiArgs = new WeixinCreateTagArgs();

            apiArgs.Tag.Name = tag.Name;
            RequestApiResult <WeixinTag> createResult = TagsApiWrapper.Create(domainContext, apiArgs);

            if (createResult.Success == false)
            {
                result.Message = createResult.Message;
                return(result);
            }

            tag.Domain = domainContext.Domain.Id;
            tag.TagId  = createResult.ApiResult.Tag.Id;
            _dataBase.Insert(tag);

            result.Success = true;
            return(result);
        }
        public string RemoveMemberGroup(DomainContext domainContext, Guid id)
        {
            MemberGroupEntity memberGroup = GetMemberGroup(id);

            if (memberGroup == null)
            {
                return("分组不存在。");
            }

            //先往微信后台更新,成功后写数据库
            RequestApiResult removeResult = GroupApiWrapper.Remove(domainContext, memberGroup.GroupId);

            if (removeResult.Success == false)
            {
                return(removeResult.Message);
            }

            //将此分组下的用户分到默认分组下面
            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@domain", domainContext.Domain.Id));
            parameterList.Add(new CommandParameter("@appId", domainContext.AppId));
            parameterList.Add(new CommandParameter("@groupId", memberGroup.GroupId));

            _dataBase.ExecuteNonQuery(
                "UPDATE [Member] SET [GroupId] = 0 WHERE [Domain] = @domain AND [AppId] = @appId AND [GroupId] = @groupId",
                parameterList);

            _dataBase.Remove(memberGroup);

            return(null);
        }
예제 #21
0
        public static string Handle(string message)
        {
            XElement xml = XElement.Parse(message);

            string messageType = xml.XPathSelectElement("MsgType").Value;

            if (String.IsNullOrEmpty(messageType))
            {
                return(String.Empty);
            }

            _fromUserName = xml.XPathSelectElement("FromUserName").Value;

            //事件消息
            if (messageType == "event")
            {
                string eventType = xml.XPathSelectElement("Event").Value;
                if (String.IsNullOrEmpty(eventType))
                {
                    return(String.Empty);
                }

                ResponsiveXMLMessage_TextMessage textMessage = new ResponsiveXMLMessage_TextMessage();
                textMessage.Content      = eventType + "from_callback";
                textMessage.ToUserName   = _fromUserName;
                textMessage.FromUserName = UserName;
                textMessage.CreateTime   = WeixinApiHelper.ConvertDateTimeToInt(DateTime.Now);

                return(XMLMessageHelper.XmlSerialize(textMessage));
            }
            //普通消息
            else
            {
                string content = xml.XPathSelectElement("Content").Value;
                if (content == "TESTCOMPONENT_MSG_TYPE_TEXT")
                {
                    ResponsiveXMLMessage_TextMessage textMessage = new ResponsiveXMLMessage_TextMessage();
                    textMessage.Content      = "TESTCOMPONENT_MSG_TYPE_TEXT_callback";
                    textMessage.ToUserName   = _fromUserName;
                    textMessage.FromUserName = UserName;
                    textMessage.CreateTime   = WeixinApiHelper.ConvertDateTimeToInt(DateTime.Now);

                    return(XMLMessageHelper.XmlSerialize(textMessage));
                }
                else
                {
                    _query_auth_code = content.Remove(0, "QUERY_AUTH_CODE:".Length);

                    RequestApiResult <WeixinThirdPartyGetAuthorizationInfoResult> getAuthorizationInfo =
                        ThirdPartyApiWrapper.GetAuthorizationInfo(_query_auth_code);

                    _accessToken = getAuthorizationInfo.ApiResult.AuthorizationInfo.AccessToken;

                    _timer = new System.Threading.Timer(SendKFMessage, null, 2 * 1000, 1 * 60 * 1000);

                    return(null);
                }
            }
        }
        public NormalResult UpdateAuthorizerAccountInfo(Guid domainId, string appId)
        {
            //获取公众号帐户信息
            RequestApiResult <WeixinThirdPartyGetAuthorizerAccountInfoResult> accountInfoResult =
                ThirdPartyApiWrapper.GetAuthorizerAccountInfo(appId);

            if (accountInfoResult.Success)
            {
                WeixinThirdPartyAuthorizerAccountInfo account = accountInfoResult.ApiResult.AccountInfo;

                //微信返回的二维码图片不允许外部引用,此处必须把图片下载到本地
                FileDownloadAgentArgs downloadAgentArgs = new FileDownloadAgentArgs();
                downloadAgentArgs.Domain = domainId;
                downloadAgentArgs.Url    = account.QRCodeUrl;
                FileDownloadAgentResult result = _fileService.DownloadAgent(downloadAgentArgs);
                string qrCodeUrl;
                if (result.Success)
                {
                    _log.Write("下载二维码返回", JsonConvert.SerializeObject(result), TraceEventType.Verbose);
                    qrCodeUrl = _fileService.FileServiceUri + result.OutputFile;
                }
                else
                {
                    qrCodeUrl = account.QRCodeUrl;
                }

                SqlStructureBuild sqlBuild = new SqlStructureBuild();
                sqlBuild.Table = "Authorizer";
                sqlBuild.Type  = SqlExpressionType.Update;
                sqlBuild.AddParameter("AppId", appId, true);
                sqlBuild.AddParameter("Domain", domainId, true);
                sqlBuild.AddParameter("NickName", account.NickName);
                sqlBuild.AddParameter("HeadImg", account.HeadImg);
                sqlBuild.AddParameter("ServiceType", account.ServiceType.Id);
                sqlBuild.AddParameter("VerifyType", account.VerifyType.Id);
                sqlBuild.AddParameter("UserName", account.UserName);
                sqlBuild.AddParameter("Alias", account.Alias);
                sqlBuild.AddParameter("QRCodeUrl", qrCodeUrl);
                sqlBuild.AddParameter("Store", account.Business.Store);
                sqlBuild.AddParameter("Scan", account.Business.Scan);
                sqlBuild.AddParameter("Pay", account.Business.Pay);
                sqlBuild.AddParameter("Card", account.Business.Card);
                sqlBuild.AddParameter("Shake", account.Business.Shake);
                sqlBuild.AddParameter("FuncScopeCategory",
                                      accountInfoResult.ApiResult.AuthorizationInfo.FuncScopeCategoryList.ToString());

                _dataBase.ExcuteSqlExpression(sqlBuild.GetSqlExpression());

                //更新LastUpdateTime
                DomainManager.Instance.UpdateLastUpdateTime(domainId);
            }

            NormalResult normalResult = new NormalResult();

            normalResult.Success = accountInfoResult.Success;
            normalResult.Message = accountInfoResult.Message;

            return(normalResult);
        }
        public ActionResult AuthorizationCallbackDemo(string auth_code)
        {
            RequestApiResult <WeixinThirdPartyGetAuthorizationInfoResult> result =
                ThirdPartyApiWrapper.GetAuthorizationInfo(auth_code);

            AuthorizationCallbackDemoViewModel model = new AuthorizationCallbackDemoViewModel();

            model.Info = result.ApiResult.AuthorizationInfo;
            return(View(model));
        }
        private void UpdateWrapper(AuthorizerJsApiTicketWrapper wrapper)
        {
            RequestApiResult <WeixinGetJsApiTicketResult> result = TokenApiWrapper.GetJsApiTicket(wrapper.AppId);

            if (result.Success)
            {
                wrapper.JsApiTicket           = result.ApiResult.Ticket;
                wrapper.JsApiTicketExpiryTime = DateTime.Now.AddSeconds(result.ApiResult.ExpiresIn);
            }
        }
        private void UpdateWrapper(AuthorizerAccessTokenWrapper wrapper)
        {
            RequestApiResult <WeixinThirdPartyGetAuthorizerAccessTokenResult> result =
                ThirdPartyApiWrapper.GetAuthorizerAccessToken(wrapper.AppId, wrapper.RefreshToken);

            if (result.Success)
            {
                wrapper.RefreshToken          = result.ApiResult.RefreshToken;
                wrapper.AccessToken           = result.ApiResult.AccessToken;
                wrapper.AccessTokenExpiryTime = DateTime.Now.AddSeconds(result.ApiResult.ExpiresIn);
            }
        }
        public NormalResult Create(DomainContext domainContext, ScenicQRCodeEntity scenicQRCode)
        {
            if (scenicQRCode == null)
            {
                Debug.Assert(false, "scenicQRCode 为空");
                return(new NormalResult("参数错误"));
            }

            //if (domainContext.Domain.Type == EnumDomainType.Free)
            //{
            //    //最大数量不允许超过10个
            //    if (GetTotalCount(domainContext) >= 5)
            //    {
            //        return new NormalResult("免费帐户创建场景二维码数量最多不可超过5个。");
            //    }
            //}

            WeixinCreateQRCodeArgs createArgs = new WeixinCreateQRCodeArgs();

            createArgs.ActionInfo.Scene.SceneId = scenicQRCode.Id.ToString();
            RequestApiResult <WeixinCreateQRCodeResult> createResult = QRCodeApiWrapper.Create(domainContext, createArgs);

            if (createResult.Success == false)
            {
                return(new NormalResult(createResult.Message));
            }

            scenicQRCode.Ticket = createResult.ApiResult.Ticket;
            scenicQRCode.Url    = createResult.ApiResult.Url;

            //下载二维码图片
            FileDownloadAgentArgs downloadAgentArgs = new FileDownloadAgentArgs();

            downloadAgentArgs.Domain = domainContext.Domain.Id;
            downloadAgentArgs.Url    = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" +
                                       System.Web.HttpUtility.UrlEncode(createResult.ApiResult.Ticket);
            FileDownloadAgentResult downloadAgentResult = _fileService.DownloadAgent(downloadAgentArgs);

            if (downloadAgentResult.Success)
            {
                _log.Write("下载二维码返回", JsonConvert.SerializeObject(downloadAgentResult), TraceEventType.Verbose);
                scenicQRCode.QRCodeImageUrl = _fileService.FileServiceUri + downloadAgentResult.OutputFile;
            }
            else
            {
                return(new NormalResult(downloadAgentResult.Message));
            }

            _dataBase.Insert(scenicQRCode);

            return(new NormalResult());
        }
예제 #27
0
        /// <summary>
        /// 用户管理-获取用户基本信息
        /// 未认证订阅号 未认证服务号 没有此权限
        /// </summary>
        /// <param name="domainContext"></param>
        /// <param name="openId"></param>
        /// <returns></returns>
        public static RequestApiResult <WeixinUser> GetUserInfo(DomainContext domainContext, string openId)
        {
            RequestApiResult <WeixinUser> result;

            if (domainContext == null || domainContext.Authorizer == null)
            {
                result                       = new RequestApiResult <WeixinUser>();
                result.ApiError              = new WeixinApiErrorResult();
                result.ApiError.ErrorCode    = -1;
                result.ApiError.ErrorMessage = "无域信息或无授权信息。";
                return(result);
            }

            if (domainContext.Authorizer.AuthorizationType == EnumAuthorizationType.UnauthorizedService ||
                domainContext.Authorizer.AuthorizationType == EnumAuthorizationType.UnauthorizedSubscription)
            {
                result                       = new RequestApiResult <WeixinUser>();
                result.ApiError              = new WeixinApiErrorResult();
                result.ApiError.ErrorCode    = -1;
                result.ApiError.ErrorMessage = "未认证订阅号 及 未认证服务号 没有获取用户基本信息权限。";
                return(result);
            }

            string accessToken = domainContext.AccessToken;

            result = UserApi.GetUserInfo(accessToken, openId);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = UserApi.GetUserInfo(accessToken, openId);
                    if (result.Success == false)
                    {
                        _log.Write("UserApi.GetUserInfo 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("UserApi.GetUserInfo 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
        public NormalResult BatchUntagging(DomainContext domainContext, MemberBatchTaggingArgs args)
        {
            NormalResult result = new NormalResult(false);

            if (args == null || args.OpenIdList == null || args.OpenIdList.Length == 0)
            {
                result.Message = "没有指定要更新的会员。";
                return(result);
            }

            WeixinTagBatchTaggingArgs apiArgs = new WeixinTagBatchTaggingArgs();

            apiArgs.TagId           = args.TagId;
            apiArgs.Data            = new WeixinTagBatchTaggingArgs_Data();
            apiArgs.Data.OpenIdList = args.OpenIdList;
            RequestApiResult updateResult = TagsApiWrapper.BatchUntagging(domainContext, apiArgs);

            if (updateResult.Success == false)
            {
                result.Message = updateResult.Message;
                return(result);
            }

            //更新数据库MEMBER表字段
            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@domain", domainContext.Domain.Id));
            parameterList.Add(new CommandParameter("@appId", domainContext.AppId));
            parameterList.Add(new CommandParameter("@tagId", args.TagId + ","));

            StringBuilder sqlWhere = new StringBuilder();

            for (int i = 0; i < args.OpenIdList.Length; i++)
            {
                sqlWhere.Append("@openId" + i);

                if (i < args.OpenIdList.Length - 1)
                {
                    sqlWhere.Append(",");
                }

                parameterList.Add(new CommandParameter("@openId" + i, args.OpenIdList[i]));
            }

            _dataBase.ExecuteNonQuery(
                "UPDATE [Member] SET [TagList] = REPLACE([TagList],@tagId,'') WHERE [Domain] = @domain AND [AppId] = @appId AND CHARINDEX(@tagId,[TagList]) > 0 AND [OpenId] IN (" + sqlWhere.ToString() + ")",
                parameterList);

            result.Success = true;
            return(result);
        }
        private AuthorizerJsApiTicketWrapper CreateWrapper(string appId)
        {
            RequestApiResult <WeixinGetJsApiTicketResult> result = TokenApiWrapper.GetJsApiTicket(appId);

            if (result.Success)
            {
                AuthorizerJsApiTicketWrapper wrapper = new AuthorizerJsApiTicketWrapper();
                wrapper.AppId                 = appId;
                wrapper.JsApiTicket           = result.ApiResult.Ticket;
                wrapper.JsApiTicketExpiryTime = DateTime.Now.AddSeconds(result.ApiResult.ExpiresIn);
                return(wrapper);
            }

            return(null);
        }
예제 #30
0
        public void Execute(IJobExecutionContext context)
        {
            List <MemberEntity> needUpdateMemberList = _memberManager.GetNeedUpdateList();

            if (needUpdateMemberList == null || needUpdateMemberList.Count == 0)
            {
                return;
            }

            _log.Write("更新会员信息", String.Format("取得待更新会员数:{0}", needUpdateMemberList.Count), TraceEventType.Verbose);

            foreach (MemberEntity member in needUpdateMemberList)
            {
                DomainContext domainContext = _domainPool.GetDomainContext(member.Domain);

                if (domainContext == null)
                {
                    _memberManager.NeedUpdate(member.Id, false);
                    _log.Write("更新会员信息失败", "没有Domain信息\r\n" + JsonHelper.Serializer(member), TraceEventType.Warning);
                    continue;
                }

                RequestApiResult <WeixinUser> getUserInfoResult =
                    UserApiWrapper.GetUserInfo(domainContext, member.OpenId);

                if (getUserInfoResult.Success == false)
                {
                    _log.Write("更新会员信息失败", JsonHelper.Serializer(getUserInfoResult), TraceEventType.Warning);
                    continue;
                }

                if (getUserInfoResult.ApiResult.Subscribe == 0)
                {
                    _memberManager.NeedUpdate(member.Id, false);
                    continue;
                }

                AddMemberArgs args = new AddMemberArgs();
                args.WeixinUser = getUserInfoResult.ApiResult;
                //更新当前用户信息
                _memberManager.UpdateMember(member, args);

                _memberManager.NeedUpdate(member.Id, false);
            }

            _log.Write("更新会员信息", "更新完毕。", TraceEventType.Verbose);
        }