Example #1
0
        /// <summary>
        /// ����CAP02001��ѯXML
        /// </summary>
        /// <param name="UATicket">����</param>       
        /// <param name="privateKeyFile">˽Կ</param>
        /// <param name="privateKeyPassword">˽Կ����</param>
        /// <param name="ResultXML"></param>
        /// <param name="ErrMsg"></param>
        /// <returns></returns>
        public int GetUATicketXML(string UAProvinceID, string UATicket, byte[] privateKeyFile, string privateKeyPassword, string TransactionID, out string ResultXML, out string ErrMsg)
        {
            int Result = 0;
            ResultXML = "";
            ErrMsg = "";

            XmlDocument xmldoc;
            XmlNode xmlnode;
            XmlElement xmlelem;
            XmlElement xmlelem2;
            XmlElement xmlelem3;
            XmlElement xmlelem4;
            XmlText xmltext;

            xmldoc = new XmlDocument();
            //����XML����������

            xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
            xmldoc.AppendChild(xmlnode);
            //����һ����Ԫ��
            xmlelem = xmldoc.CreateElement("", "CAPRoot", "");
            xmldoc.AppendChild(xmlelem);

            ///////////////////////////////////////////
            xmlelem2 = xmldoc.CreateElement("SessionHeader");
            xmlelem2 = xmldoc.CreateElement("", "SessionHeader", "");
            xmldoc.ChildNodes.Item(1).AppendChild(xmlelem2);

            xmlelem3 = xmldoc.CreateElement("ServiceCode");
            xmlelem3 = xmldoc.CreateElement("", "ServiceCode", "");
            xmltext = xmldoc.CreateTextNode("CAP02001");
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("Version");
            xmlelem3 = xmldoc.CreateElement("", "Version", "");
            xmltext = xmldoc.CreateTextNode("mbossUacVersion1");
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("ActionCode");
            xmlelem3 = xmldoc.CreateElement("", "ActionCode", "");
            xmltext = xmldoc.CreateTextNode("0");
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("TransactionID");
            xmlelem3 = xmldoc.CreateElement("", "TransactionID", "");
            xmltext = xmldoc.CreateTextNode(TransactionID);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("SrcSysID");
            xmlelem3 = xmldoc.CreateElement("", "SrcSysID", "");
            xmltext = xmldoc.CreateTextNode("35000");
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            //����(ϵͳ/ƽ̨)ǩ��
            xmlelem3 = xmldoc.CreateElement("DigitalSign");
            xmlelem3 = xmldoc.CreateElement("", "DigitalSign", "");
            xmlelem2.AppendChild(xmlelem3);

            //��ط�(ϵͳ/ƽ̨)����
            xmlelem3 = xmldoc.CreateElement("DstSysID");
            xmlelem3 = xmldoc.CreateElement("", "DstSysID", "");
            xmltext = xmldoc.CreateTextNode(UAProvinceID);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            ReqTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            xmlelem3 = xmldoc.CreateElement("ReqTime");
            xmlelem3 = xmldoc.CreateElement("", "ReqTime", "");
            xmltext = xmldoc.CreateTextNode(ReqTime);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("Request");
            xmlelem3 = xmldoc.CreateElement("", "Request", "");
            xmlelem2.AppendChild(xmlelem3);

            if (SSQReqLists.Length == 0)
            {
                //xmlelem3 = xmldoc.CreateElement("Request");
                //xmlelem3 = xmldoc.CreateElement("", "Request", "");
                //xmlelem2.AppendChild(xmlelem3);

                xmlelem4 = xmldoc.CreateElement("ReqType");
                xmlelem4 = xmldoc.CreateElement("", "ReqType", "");
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqCode");
                xmlelem4 = xmldoc.CreateElement("", "ReqCode", "");
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqDesc");
                xmlelem4 = xmldoc.CreateElement("", "ReqDesc", "");
                xmlelem3.AppendChild(xmlelem4);
            }

            for (int i = 0; i < SSQReqLists.Length; i++)
            {
                SSQReqList ssqReq = new SSQReqList();
                ssqReq = SSQReqLists[i];
                xmlelem4 = xmldoc.CreateElement("ReqType");
                xmlelem4 = xmldoc.CreateElement("", "ReqType", "");
                xmltext = xmldoc.CreateTextNode(ssqReq.ReqType);
                xmlelem4.AppendChild(xmltext);
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqCode");
                xmlelem4 = xmldoc.CreateElement("", "ReqCode", "");
                xmltext = xmldoc.CreateTextNode(ssqReq.ReqCode);
                xmlelem4.AppendChild(xmltext);
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqDesc");
                xmlelem4 = xmldoc.CreateElement("", "ReqDesc", "");
                xmltext = xmldoc.CreateTextNode(ssqReq.ReqDesc);
                xmlelem4.AppendChild(xmltext);
                xmlelem3.AppendChild(xmlelem4);
            }

            //////////////////////////////////////

            xmlelem2 = xmldoc.CreateElement("SessionBody");
            xmlelem2 = xmldoc.CreateElement("", "SessionBody", "");
            xmldoc.ChildNodes.Item(1).AppendChild(xmlelem2);

            xmlelem3 = xmldoc.CreateElement("AssertionQueryReq");
            xmlelem3 = xmldoc.CreateElement("", "AssertionQueryReq", "");
            xmlelem2.AppendChild(xmlelem3);
            // xmldoc.ChildNodes.Item(2).AppendChild(xmlelem2);

            xmlelem4 = xmldoc.CreateElement("Ticket");
            xmlelem4 = xmldoc.CreateElement("", "Ticket", "");
            xmltext = xmldoc.CreateTextNode(UATicket);
            xmlelem4.AppendChild(xmltext);
            xmlelem3.AppendChild(xmlelem4);

            ResultXML = xmldoc.OuterXml;
            ResultXML = ResultXML.Substring(ResultXML.IndexOf("<CAPRoot>"));
            // XML = @"<?xml version='1.0' encoding='gb2312' standalone='yes' ?>" + XML;
            //  XML = @"<?xml version='1.0' encoding='UTF-8' ?>" + XML;
            ResultXML = ResultXML.Replace("<DigitalSign />", "<DigitalSign/>");
            ResultXML = ResultXML.Replace(" />", "/>");
            Result = AddDigitalSignXML(ResultXML, privateKeyFile, privateKeyPassword, out ResultXML, out ErrMsg);

            return Result;
        }
Example #2
0
        private static SSQReqList[] GetSSQReqLists()
        {
            string SSQReqListsStr =  System.Configuration.ConfigurationManager.AppSettings["SSQReqLists"];
            string ReqTypeStr = System.Configuration.ConfigurationManager.AppSettings["ReqType"];
            string ReqCodeStr = System.Configuration.ConfigurationManager.AppSettings["ReqCode"];
            string ReqDescStr = System.Configuration.ConfigurationManager.AppSettings["ReqDesc"];
            int count = 0;
            SSQReqList[] SSQReqLists;
            string[] ReqTypeList;
            string[] ReqCodeList;
            string[] ReqDescList;
            try
            {
                count = int.Parse(SSQReqListsStr);

            }
            catch { count = 0; }

            ReqTypeList = ReqTypeStr.Split(';');
            ReqCodeList = ReqCodeStr.Split(';');
            ReqDescList = ReqDescStr.Split(';');

            SSQReqLists = new SSQReqList[count];

            for (int i = 0; i < count; i++)
            {
                SSQReqList SSQReq = new SSQReqList();
                SSQReq.ReqCode = ReqCodeList[i];
                SSQReq.ReqDesc = ReqDescList[i];
                SSQReq.ReqType = ReqTypeList[i];
                SSQReqLists[i] = SSQReq;

            }
            return SSQReqLists;
        }
Example #3
0
        public int AuthenSelectArddess(string SPID,string ProvinceID, System.Web.HttpContext SpecificContext, string SPDataCacheName, out  SSOAddressResp SSOAddress, out string ErrMsg)
        {
            int Result = 0;
            string ResultXML = "";
            ErrMsg = "";
            SSOAddress = new SSOAddressResp();
            SSOAddress.AssertionAddress = "";
            SSOAddress.SSOAddress = "";
            XmlDocument xmldoc;
            XmlNode xmlnode;
            XmlElement xmlelem;
            XmlElement xmlelem2;
            XmlElement xmlelem3;
            XmlElement xmlelem4;

            XmlText xmltext;

            xmldoc = new XmlDocument();
            //����XML����������

            #region
            byte[] privateKeyFile=new byte[0];
            string privateKeyPassword = "";
            string UserName = "";
            SPInfoManager spInfo = new SPInfoManager();
            try
            {
              Object SPData = spInfo.GetSPData(SpecificContext, SPDataCacheName);
              privateKeyFile = spInfo.GetCAInfo(SPID, 1, SPData, out UserName, out privateKeyPassword);
            }catch(Exception err)
            {
              ErrMsg = err.Message;
              Result = -20001;
            }
            #endregion

            #region ����xml
            xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
            xmldoc.AppendChild(xmlnode);
            //����һ����Ԫ��
            xmlelem = xmldoc.CreateElement("", "CAPRoot", "");
            xmldoc.AppendChild(xmlelem);

            #region �Ự����
            ///////////////////////////////////////////
            xmlelem2 = xmldoc.CreateElement("SessionHeader");
            xmlelem2 = xmldoc.CreateElement("", "SessionHeader", "");
            xmldoc.ChildNodes.Item(1).AppendChild(xmlelem2);

            xmlelem3 = xmldoc.CreateElement("ServiceCode");
            xmlelem3 = xmldoc.CreateElement("", "ServiceCode", "");
            xmltext = xmldoc.CreateTextNode(ServiceCode);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("Version");
            xmlelem3 = xmldoc.CreateElement("", "Version", "");
            xmltext = xmldoc.CreateTextNode(Version);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("ActionCode");
            xmlelem3 = xmldoc.CreateElement("", "ActionCode", "");
            xmltext = xmldoc.CreateTextNode(ActionCode);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("TransactionID");
            xmlelem3 = xmldoc.CreateElement("", "TransactionID", "");
            xmltext = xmldoc.CreateTextNode(TransactionID);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("SrcSysID");
            xmlelem3 = xmldoc.CreateElement("", "SrcSysID", "");
            xmltext = xmldoc.CreateTextNode(SrcSysID);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            //����(ϵͳ/ƽ̨)ǩ��
            xmlelem3 = xmldoc.CreateElement("DigitalSign");
            xmlelem3 = xmldoc.CreateElement("", "DigitalSign", "");
            xmlelem2.AppendChild(xmlelem3);

            //��ط�(ϵͳ/ƽ̨)����
            xmlelem3 = xmldoc.CreateElement("DstSysID");
            xmlelem3 = xmldoc.CreateElement("", "DstSysID", "");
            xmltext = xmldoc.CreateTextNode(DstSysID);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("ReqTime");
            xmlelem3 = xmldoc.CreateElement("", "ReqTime", "");
            xmltext = xmldoc.CreateTextNode(ReqTime);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("Request");
            xmlelem3 = xmldoc.CreateElement("", "Request", "");
            xmlelem2.AppendChild(xmlelem3);

            if (SSQReqLists.Length == 0)
            {
                xmlelem3 = xmldoc.CreateElement("Request");
                xmlelem3 = xmldoc.CreateElement("", "Request", "");
                xmlelem2.AppendChild(xmlelem3);

                xmlelem4 = xmldoc.CreateElement("ReqType");
                xmlelem4 = xmldoc.CreateElement("", "ReqType", "");
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqCode");
                xmlelem4 = xmldoc.CreateElement("", "ReqCode", "");
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqDesc");
                xmlelem4 = xmldoc.CreateElement("", "ReqDesc", "");
                xmlelem3.AppendChild(xmlelem4);
            }

            for (int i = 0; i < SSQReqLists.Length; i++)
            {
                SSQReqList ssqReq = new SSQReqList();
                ssqReq = SSQReqLists[i];
                xmlelem4 = xmldoc.CreateElement("ReqType");
                xmlelem4 = xmldoc.CreateElement("", "ReqType", "");
                xmltext = xmldoc.CreateTextNode(ssqReq.ReqType);
                xmlelem4.AppendChild(xmltext);
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqCode");
                xmlelem4 = xmldoc.CreateElement("", "ReqCode", "");
                xmltext = xmldoc.CreateTextNode(ssqReq.ReqCode);
                xmlelem4.AppendChild(xmltext);
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqDesc");
                xmlelem4 = xmldoc.CreateElement("", "ReqDesc", "");
                xmltext = xmldoc.CreateTextNode(ssqReq.ReqDesc);
                xmlelem4.AppendChild(xmltext);
                xmlelem3.AppendChild(xmlelem4);
            }
            #endregion

            #region ҵ�����
            //////////////////////////////////////

            xmlelem2 = xmldoc.CreateElement("SessionBody");
            xmlelem2 = xmldoc.CreateElement("", "SessionBody", "");
            xmldoc.ChildNodes.Item(1).AppendChild(xmlelem2);

            xmlelem3 = xmldoc.CreateElement("SPSSOAuthReq");
            xmlelem3 = xmldoc.CreateElement("", "SPSSOAuthReq", "");
            xmlelem2.AppendChild(xmlelem3);
            // xmldoc.ChildNodes.Item(2).AppendChild(xmlelem2);

            xmlelem4 = xmldoc.CreateElement("ProvinceID");
            xmlelem4 = xmldoc.CreateElement("", "ProvinceID", "");
            xmltext = xmldoc.CreateTextNode(ProvinceID);
            xmlelem4.AppendChild(xmltext);
            xmlelem3.AppendChild(xmlelem4);

            #endregion

            ResultXML = xmldoc.OuterXml;
            ResultXML = ResultXML.Substring(ResultXML.IndexOf("<CAPRoot>"));
            ResultXML = ResultXML.Replace("<DigitalSign />", "<DigitalSign/>");

            Result = AddDigitalSignXML(ResultXML, privateKeyFile, privateKeyPassword, out ResultXML, out ErrMsg);

            #endregion

            try
            {

                #region  ���͵��ͻ���
                UaService u = new UaService();
                u.Url = System.Configuration.ConfigurationManager.AppSettings["GetInfoByTicketURL"];
                string req = "";
                req = u.authReq(ResultXML);
                #endregion

                #region
                SSOAddress.SSOAddress = GetValueFromXML(req, "SSOAddress") == null ? "" : GetValueFromXML(req, "SSOAddress");
                SSOAddress.AssertionAddress = GetValueFromXML(req, "AssertionAddress") == null ? "" : GetValueFromXML(req, "AssertionAddress");
                #endregion

            }
            catch (Exception err)
            {
                ErrMsg = err.Message;
                Result = -20001;
            }
            finally
            {
                #region
                #endregion
            }

            return Result;
        }
Example #4
0
        /// <summary>
        /// CAP01003 ҵ��ϵͳSSO��֤����,���ɵ�SSO��֤��xml�ַ���
        /// </summary>  
        /// <param name="ProvinceID">ProvinceID</param>
        /// <param name="SPID">SPID</param>
        /// <param name="RedirectURL">�ض���URL</param>
        /// <param name="AcceptAccountTypes">�ɽ��յ��ʺ������б�</param>
        /// <param name="privateKeyFile">˽Կ</param>
        /// <param name="privateKeyPassword">˽Կ����</param>
        /// <param name="ResultXML">���ص�xml</param>
        /// <param name="ErrMsg">���ص���Ϣ</param>
        /// <returns>����ֵ</returns>
        public int SSOAuthanXML(string ProvinceID,string SPID,string RedirectURL, AcceptAccountTypeList[] AcceptAccountTypes, System.Web.HttpContext SpecificContext, string SPDataCacheName,
            out string ResultXML, out string ErrMsg, out string TransactionID)
        {
            ResultXML = "";
            ErrMsg = "";
            int Result = 0;
            TransactionID = "";
            XmlDocument xmldoc;
            XmlNode xmlnode;
            XmlElement xmlelem;
            XmlElement xmlelem2;
            XmlElement xmlelem3;
            XmlElement xmlelem4;

            XmlElement xmlelem5;

            XmlText xmltext;

            SPInfoManager spInfo = new SPInfoManager();
            byte[] privateKeyFile;
            string UserName = "";
            string privateKeyPassword = "";
            try
            {
                Object SPData = spInfo.GetSPData(SpecificContext, SPDataCacheName);
                privateKeyFile = spInfo.GetCAInfo(SPID, 1, SPData, out UserName, out privateKeyPassword);
            }
            catch (Exception err)
            {
                Result = -20005;
                ErrMsg = err.Message;
                return Result;
            }

            xmldoc = new XmlDocument();
            //����XML����������

            xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
            xmldoc.AppendChild(xmlnode);
            //����һ����Ԫ��
            xmlelem = xmldoc.CreateElement("", "CAPRoot", "");
            xmldoc.AppendChild(xmlelem);

            #region �Ự����
            ///////////////////////////////////////////
            xmlelem2 = xmldoc.CreateElement("SessionHeader");
            xmlelem2 = xmldoc.CreateElement("", "SessionHeader", "");
            xmldoc.ChildNodes.Item(1).AppendChild(xmlelem2);

            xmlelem3 = xmldoc.CreateElement("ServiceCode");
            xmlelem3 = xmldoc.CreateElement("", "ServiceCode", "");
            xmltext = xmldoc.CreateTextNode("CAP01003");
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("Version");
            xmlelem3 = xmldoc.CreateElement("", "Version", "");
            xmltext = xmldoc.CreateTextNode("mbossUacVersion1");
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("ActionCode");
            xmlelem3 = xmldoc.CreateElement("", "ActionCode", "");
            xmltext = xmldoc.CreateTextNode("0");
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            // ��2λUAƽ̨������롿+��3λҵ��ƽ̨������롿+��8λ���ڱ��롿+��10λ��ˮ�š�
            //TransactionID = "35000";
            //TransactionID += DateTime.Now.ToString("yyyyMMdd");
            //Random r = new Random(Guid.NewGuid().GetHashCode());
            //TransactionID += r.Next(10000000, 99999999).ToString();
            //r = new Random(Guid.NewGuid().GetHashCode());
            //TransactionID += r.Next(10, 99).ToString();
            TransactionID = "35000" + CommonBizRules.CreateTransactionID();

            //12392652948909910320090
            xmlelem3 = xmldoc.CreateElement("TransactionID");
            xmlelem3 = xmldoc.CreateElement("", "TransactionID", "");
            xmltext = xmldoc.CreateTextNode(TransactionID);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("SrcSysID");
            xmlelem3 = xmldoc.CreateElement("", "SrcSysID", "");
            xmltext = xmldoc.CreateTextNode("35000");
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            //����(ϵͳ/ƽ̨)ǩ��
            xmlelem3 = xmldoc.CreateElement("DigitalSign");
            xmlelem3 = xmldoc.CreateElement("", "DigitalSign", "");
            xmlelem2.AppendChild(xmlelem3);

            //��ط�(ϵͳ/ƽ̨)����
            xmlelem3 = xmldoc.CreateElement("DstSysID");
            xmlelem3 = xmldoc.CreateElement("", "DstSysID", "");
            xmltext = xmldoc.CreateTextNode(ProvinceID);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            ReqTime = DateTime.Now.ToString("yyyyMMddHHmmss") ;
            xmlelem3 = xmldoc.CreateElement("ReqTime");
            xmlelem3 = xmldoc.CreateElement("", "ReqTime", "");
            xmltext = xmldoc.CreateTextNode(ReqTime);
            xmlelem3.AppendChild(xmltext);
            xmlelem2.AppendChild(xmlelem3);

            xmlelem3 = xmldoc.CreateElement("Request");
            xmlelem3 = xmldoc.CreateElement("", "Request", "");
            xmlelem2.AppendChild(xmlelem3);
            if (SSQReqLists.Length == 0)
            {
                xmlelem4 = xmldoc.CreateElement("ReqType");
                xmlelem4 = xmldoc.CreateElement("", "ReqType", "");
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqCode");
                xmlelem4 = xmldoc.CreateElement("", "ReqCode", "");
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqDesc");
                xmlelem4 = xmldoc.CreateElement("", "ReqDesc", "");
                xmlelem3.AppendChild(xmlelem4);
            }

            for (int i = 0; i < SSQReqLists.Length; i++)
            {
                SSQReqList ssqReq = new SSQReqList();
                ssqReq = SSQReqLists[i];
                xmlelem4 = xmldoc.CreateElement("ReqType");
                xmlelem4 = xmldoc.CreateElement("", "ReqType", "");
                xmltext = xmldoc.CreateTextNode(ssqReq.ReqType);
                xmlelem4.AppendChild(xmltext);
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqCode");
                xmlelem4 = xmldoc.CreateElement("", "ReqCode", "");
                xmltext = xmldoc.CreateTextNode(ssqReq.ReqCode);
                xmlelem4.AppendChild(xmltext);
                xmlelem3.AppendChild(xmlelem4);

                xmlelem4 = xmldoc.CreateElement("ReqDesc");
                xmlelem4 = xmldoc.CreateElement("", "ReqDesc", "");
                xmltext = xmldoc.CreateTextNode(ssqReq.ReqDesc);
                xmlelem4.AppendChild(xmltext);
                xmlelem3.AppendChild(xmlelem4);
            }

            #endregion

            #region ҵ�����
            //////////////////////////////////////

            xmlelem2 = xmldoc.CreateElement("SessionBody");
            xmlelem2 = xmldoc.CreateElement("", "SessionBody", "");
            xmldoc.ChildNodes.Item(1).AppendChild(xmlelem2);

            xmlelem3 = xmldoc.CreateElement("SPSSOAuthReq");
            xmlelem3 = xmldoc.CreateElement("", "SPSSOAuthReq", "");
            xmlelem2.AppendChild(xmlelem3);
            // xmldoc.ChildNodes.Item(2).AppendChild(xmlelem2);

            xmlelem4 = xmldoc.CreateElement("RedirectURL");
            xmlelem4 = xmldoc.CreateElement("", "RedirectURL", "");
            xmltext = xmldoc.CreateTextNode(RedirectURL);
            xmlelem4.AppendChild(xmltext);
            xmlelem3.AppendChild(xmlelem4);

            xmlelem4 = xmldoc.CreateElement("AcceptAccountTypeList");
            xmlelem4 = xmldoc.CreateElement("", "AcceptAccountTypeList", "");
            xmlelem3.AppendChild(xmlelem4);

            xmlelem5 = xmldoc.CreateElement("AcceptAccountType");
            xmlelem5 = xmldoc.CreateElement("", "AcceptAccountType", "");

            for (int i = 0; i < AcceptAccountTypes.Length; i++)
            {
                AcceptAccountTypeList AcceptAccountType = new AcceptAccountTypeList();
                AcceptAccountType = AcceptAccountTypes[i];
                xmlelem5 = xmldoc.CreateElement("AcceptAccountType");
                xmlelem5 = xmldoc.CreateElement("", "AcceptAccountType", "");
                xmltext = xmldoc.CreateTextNode(AcceptAccountType.AcceptAccountType);
                xmlelem5.AppendChild(xmltext);

                xmlelem4.AppendChild(xmlelem5);
            }
            #endregion

            ResultXML = xmldoc.OuterXml;
            ResultXML = ResultXML.Substring(ResultXML.IndexOf("<CAPRoot>"));
            ResultXML = ResultXML.Replace("<DigitalSign />", "<DigitalSign/>");

            Result = AddDigitalSignXML(ResultXML, privateKeyFile, privateKeyPassword, out ResultXML, out ErrMsg);

            return Result;
        }