internal override string GetRedirectUrl(CallbackContentInfo contentInfo, string code, string state) { var appAccountPublic = ProviderGateway.AppAccountProvider.Get(contentInfo.AppAccountPublic); GetOpenId(appAccountPublic, code); var appAccountPrivate = ProviderGateway.AppAccountProvider.Get(contentInfo.AppAccountPrivate); var extend = new Dictionary <string, string> { { TemplateConst.ExtendState, state }, { TemplateConst.ExtendBatch, contentInfo.BatchId } }; var requestTemplate = new DefaultApiTemplate(appAccountPrivate, TemplateConst.AuthorizeUrl, extend); SetNextState(contentInfo.BatchId, CallbackContentState.Private); //跳转获取私有身份 return(requestTemplate.GetRequestUrl()); }
/// <summary> /// 获取开放平台授权URL /// </summary> /// <param name="appAccountId"></param> /// <param name="redirectUrl"></param> /// <param name="type">公共服务号类型。12:微信服务号,21:钉钉</param> /// <param name="cookie"></param> /// <returns></returns> public string GetAuthorizeUrl(string appAccountId, string redirectUrl, int type, UserCookie cookie, string loginType = null) { //Log 信息 // AppConnectLogHelper.ErrorFormat("进入GetAuthorizeUrl方法!appAccountId:{0},redirectUrl:{1},type:{2}", appAccountId, redirectUrl, type); ArgumentHelper.AssertIsTrue(!string.IsNullOrWhiteSpace(redirectUrl), "redirectUrl is null or empty"); AppAccountInfo appAccountPublic; AppAccountInfo appAccountPrivate; AppAccountInfo appAccountAuthorize; string appAccountPublicId; string appAccountPrivateId = null; CallbackContentState callbackState; var tenantId = 0; //根据类型初始化信息 if (string.IsNullOrWhiteSpace(appAccountId)) { //公共账户方式 AppConnectLogHelper.Debug("进入GetAuthorizeUrl方法->公共账户方式!"); appAccountPublic = ProviderGateway.AppAccountProvider.GetPublicByType(type); if (!string.IsNullOrWhiteSpace(CookieHelper.GetOpenId(cookie, appAccountPublic.AppId))) { return(null); } appAccountPublicId = appAccountPublic.AppAccountId; callbackState = CallbackContentState.Public; appAccountAuthorize = appAccountPublic; } else { //私有账户类型 AppConnectLogHelper.Debug("进入GetAuthorizeUrl方法->私有账户方式!"); appAccountPrivate = ProviderGateway.AppAccountProvider.Get(appAccountId); if (appAccountPrivate == null) { AppConnectLogHelper.Error("AppAccountProvider-GetByAppAccountId 为 null"); return(null); } appAccountPrivateId = appAccountPrivate.AppAccountId; tenantId = appAccountPrivate.TenantId; switch (appAccountPrivate.Type) { case 11: case 12: AppConnectLogHelper.Debug("进入GetAuthorizeUrl方法->私有账户方式!->Case11,12"); appAccountPublic = ProviderGateway.AppAccountProvider.GetPublicByType(appAccountPrivate.Type); appAccountPublicId = appAccountPublic.AppAccountId; if (!string.IsNullOrWhiteSpace(CookieHelper.GetOpenId(cookie, appAccountPublic.AppId)) && !string.IsNullOrWhiteSpace(CookieHelper.GetOpenId(cookie, appAccountPrivate.AppId))) { return(null); } if (!string.IsNullOrWhiteSpace(CookieHelper.GetOpenId(cookie, appAccountPublic.AppId))) { callbackState = CallbackContentState.Private; appAccountAuthorize = appAccountPrivate; } else if (!string.IsNullOrWhiteSpace(CookieHelper.GetOpenId(cookie, appAccountPrivate.AppId))) { callbackState = CallbackContentState.Public; appAccountAuthorize = appAccountPublic; } else { callbackState = CallbackContentState.PrivateAndPublic; appAccountAuthorize = appAccountPublic; } break; default: AppConnectLogHelper.Debug("进入GetAuthorizeUrl方法->私有账户方式!->CaseDefault"); if (string.IsNullOrWhiteSpace(CookieHelper.GetOpenId(cookie, appAccountPrivate.AppId))) { callbackState = CallbackContentState.Private; appAccountAuthorize = appAccountPrivate; appAccountPublicId = appAccountPrivate.AppAccountId; } else { AppConnectLogHelper.Debug("进入GetAuthorizeUrl方法->私有账户方式!->CaseDefault->Cookie有值返回Null"); return(null); } break; } } AppConnectLogHelper.Debug("进入GetAuthorizeUrl方法->私有账户方式!->Case->记录回调信息"); //记录回调信息 var batchId = Guid.NewGuid().ToString(); var callbackContent = new CallbackContentInfo { BatchId = batchId, TenantId = tenantId, AppAccountPublic = appAccountPublicId, AppAccountPrivate = appAccountPrivateId, Content = redirectUrl, State = callbackState }; ProviderGateway.CallbackContentProvider.Add(callbackContent); var state = Guid.NewGuid().ToString("N"); AppConnectLogHelper.Debug("进入GetAuthorizeUrl方法->私有账户方式!->Case->记录回调信息->记录Cookie"); try { AppConnectLogHelper.Debug("进入GetAuthorizeUrl方法->私有账户方式!->Case->记录回调信息->记录Cookie前->State:" + state); CookieHelper.SetState(state); var getCookieState = CookieHelper.GetState(); AppConnectLogHelper.Debug("进入GetAuthorizeUrl方法->私有账户方式!->Case->记录回调信息->记录Cookie后获取->State:" + getCookieState); } catch (System.Exception ex) { AppConnectLogHelper.Debug("SetState加日志发生了错误!!!!!"); } //生成授权Url var extend = new Dictionary <string, string> { { TemplateConst.ExtendState, state }, { TemplateConst.ExtendBatch, batchId } }; string url = null; //钉钉的PC登录 if (!string.IsNullOrEmpty(loginType) && loginType == "0") { var requestTemplate = new DefaultApiTemplate(appAccountAuthorize, TemplateConst.AuthorizePCUrl, extend); url = requestTemplate.GetRequestUrl(); } else { var requestTemplate = new DefaultApiTemplate(appAccountAuthorize, TemplateConst.AuthorizeUrl, extend); url = requestTemplate.GetRequestUrl(); } AppConnectLogHelper.Debug("进入GetAuthorizeUrl方法->私有账户方式!->Case->记录回调信息->记录Cookie后获取->State->Url" + url); return(url); }