/// <summary>
        /// 销量查询
        /// transType="107"
        /// 代理商在收到恒朋电话投注系统发送的“完成期结”奖期通知或者
        /// 代理商查询到恒朋电话投注系统奖期状态为“完成期结”,才能发起销量查询。
        /// </summary>
        /// <param name="accountNo">代理商账号</param>
        /// <param name="transType">交易类型</param>
        /// <param name="issue">要查询返奖信息的奖期对象</param>
        /// <returns></returns>
        public string BalanceQuery(AccountNumber accountNo, TransactionType transType, Issue issue)
        {
            if (transType.TypeCode.Trim() != "107")
            {
                throw new Exception("票查询请求对应的交易类型错误。");
            }

            try
            {
                DateTime now = DateTime.Now;
                string body = "<body><balanceQuery><issue gameName=\"" + issue.PlayMethodInfo.GameName + "\" number=\"" + issue.Number + "\"/></balanceQuery></body>";
                string messageId = accountNo.UserName + now.ToString("yyyyMMdd")  + PostManager.EightSerialNumber;
                string timestamp = now.ToString("yyyyMMdd") + now.ToString("HHmmss");
                string requestMessage="transType=" + transType.TypeCode + "&transMessage=" + (((((((("<?xml version=\"1.0\" encoding=\"GBK\"?>" + "<message version=\"1.0\" id=\"" + messageId + "\">") + "<header>") + "<messengerID>" + accountNo.UserName + "</messengerID>") + "<timestamp>" + timestamp + "</timestamp>") + "<transactionType>"+transType.TypeCode+"</transactionType>") + "<digest>" + PostManager.MD5(messageId + timestamp + accountNo.UserPassword + body, "gb2312") + "</digest>") + "</header>") + body + "</message>");

                Console.WriteLine("销量查询传递的消息为:");
                Console.WriteLine(requestMessage);

                string message = PostManager.Post(GatewayUrl, requestMessage, 120);
                return message;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            Console.WriteLine("恒朋上海接口测试开始。。。。\n");

            AccountNumber accountN = new AccountNumber();
            Console.WriteLine("请输入代理商账号:");
            accountN.UserName = "******";//Console.ReadLine();
            Console.WriteLine("请输入代理商密码:");
            accountN.UserPassword = "******";//Console.ReadLine();
            Console.WriteLine("你输入的代理商账号为:" + accountN.UserName + "    密码为:" + accountN.UserPassword + "\n");

            IIssueQueryGateway gateway = GatewayFactroy.CreateIssueQueryGatewayFactory(LotteryType.ShangHaiWelfareLottery);
            Console.WriteLine("投注/查询网关地址:" + gateway.GatewayUrl + "\n");
            #region 奖期查询
            TransactionTypeManager transTypeM = new TransactionTypeManager(LotteryType.ShangHaiWelfareLottery);
            TransactionType transType = transTypeM.GetTransactionTypeByTypeCode(LotteryType.ShangHaiWelfareLottery, "102");

            ////奖期查询测试
            //Console.WriteLine("奖期查询开始。。。。");
            Issue issue=new Issue();
            PlayMethodManager pleyMethodM = new PlayMethodManager(LotteryType.ShangHaiWelfareLottery);
            //Console.WriteLine("请输入玩法名称(如:双色球、15选5、3D、七乐彩、6+1、天天彩4、时时乐):");
            //issue.PlayMethodInfo=pleyMethodM.GetMethodType(LotteryType.ShangHaiWelfareLottery,Console.ReadLine());
            //Console.WriteLine("请输入期号:");
            //issue.Number=Console.ReadLine();

            //Console.WriteLine("你要进行的奖期查询玩法为:" + issue.PlayMethodInfo.PlayName + "    玩法编号为:" +issue.PlayMethodInfo.GameName + "    奖期为:" + issue.Number);

            //try
            //{
            //    string result = gateway.IssueQuery(accountN, transType, issue);
            //    Console.WriteLine("奖期查询结果:\n" + result);
            //}
            //catch (Exception ex)
            //{
            //    Console.WriteLine("奖期查询结果:\n    错误:" + ex.Message);
            //}

            //Console.WriteLine("奖期查询结束。。。。\n");
            #endregion

            #region 投注
            //投注测试
            Console.WriteLine("投注开始(本测试会携带相同的两张彩票(票号不同))。。。。");
            transType = transTypeM.GetTransactionTypeByTypeCode(LotteryType.ShangHaiWelfareLottery, "103");
            Console.WriteLine("构建彩票信息开始。。。。");
            List<Ticket> tickets = new List<Ticket>();
            Ticket ticketOne = new Ticket();
            ticketOne.TicketId = accountN.UserName + DateTime.Now.ToString("yyyyMMdd") + PostManager.EightSerialNumber;
            ticketOne.IssueInfo = new Issue();
            Console.WriteLine("请输入玩法名称(如:双色球、15选5、3D、七乐彩、6+1、天天彩4、时时乐):");
            string gameName = "ssl";// Console.ReadLine();
            ticketOne.PlayTypeInfo = pleyMethodM.GetMethodType(LotteryType.ShangHaiWelfareLottery, gameName).PlayTypes[0];
            ticketOne.IssueInfo.PlayMethodInfo = pleyMethodM.GetMethodType(LotteryType.ShangHaiWelfareLottery, gameName);
            Console.WriteLine("请输入期号:");
            ticketOne.IssueInfo.Number = Console.ReadLine();
            Console.WriteLine("倍投数:");
            ticketOne.Amount = "1";// Console.ReadLine();
            Console.WriteLine("购买金额:");
            ticketOne.Money = "2";//Console.ReadLine();
            Console.WriteLine("要投注的彩票号码(测试时,每张彩票一注):");
            ticketOne.AnteCodes = Console.ReadLine();

            UserProfile user = new UserProfile();
            Console.WriteLine("彩票用户名:");
            user.UserName = "******";// Console.ReadLine();
            Console.WriteLine("用户证件类型(1、身份证;2、军官证;3、护照):");
            string cardType = "1";// Console.ReadLine();
            if (cardType == "1" || cardType == "2" || cardType == "3")
            {
                user.CardTypeInfo = (CardType)int.Parse(cardType);
                Console.WriteLine("证件号码:");
                user.CardNumber = "510212198105057410"; //Console.ReadLine();
                Console.WriteLine("用户邮箱地址:");
                user.Mail = "*****@*****.**";// Console.ReadLine();
                Console.WriteLine("用户手机号(无纸化彩票中大奖的凭证之一):");
                user.Mobile = "15902307117"; // Console.ReadLine();
                Console.WriteLine("用户真实姓名:");
                user.RealName = "钟家宇";// Console.ReadLine();
                Console.WriteLine("你输入的彩票用户信息为:  证件类型:" + (int)user.CardTypeInfo + "  证件号码:" + user.CardNumber + "  邮箱:" + user.Mail + "  手机号:" + user.Mobile + "  真实姓名:" + user.RealName);

                ticketOne.UserProfile = user;
                tickets.Add(ticketOne);
                ticketOne.TicketId = accountN.UserName + DateTime.Now.ToString("yyyyMMdd") + PostManager.TenSerialNumber;
                tickets.Add(ticketOne);

                transType = transTypeM.GetTransactionTypeByTypeCode(LotteryType.ShangHaiWelfareLottery, "103");
                try
                {
                    string result = gateway.LotteryRequest(accountN, transType, tickets);
                    Console.WriteLine("投注结果:");
                    Console.WriteLine(result);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("投注结果:\n    错误:" + ex.Message);
                }
            }
            else
            {
                Console.WriteLine("构建彩票用户错误:用户证件类型不正确");
            }
            Console.WriteLine("投注结束。。。。\n");
            #endregion

            #region 票查询
            Console.WriteLine("票查询开始(如果上面的投注成功,直接查询投票的彩票,否则请输入彩票号)。。。。");
            Console.WriteLine("上面的投注是否成功?(1、成功;2、失败):");

            try
            {
                Ticket ticketP = null;
                if (Console.ReadLine() == "2")
                {
                    Console.WriteLine("请输入要查询的票号:");
                    ticketP = new Ticket();
                    ticketP.TicketId = Console.ReadLine();
                }
                else
                    ticketP = tickets[0];

                transType = transTypeM.GetTransactionTypeByTypeCode(LotteryType.ShangHaiWelfareLottery, "105");
                List<Ticket> ticketsP = new List<Ticket>();
                ticketsP.Add(ticketP);

                string result = gateway.TicketQuery(accountN, transType, ticketsP);
                Console.WriteLine("票查询结果:");
                Console.WriteLine(result);
            }
            catch (Exception ex)
            {
                Console.WriteLine("票查询结果:\n    错误:" + ex.Message);
            }
            Console.WriteLine("票查询结束。。。。\n");
            #endregion

            #region 销量查询
            Console.WriteLine("销量查询开始。。。。");
            Console.WriteLine("请输入玩法名称(如:双色球、15选5、3D、七乐彩、6+1、天天彩4、时时乐):");
            issue.PlayMethodInfo = pleyMethodM.GetMethodType(LotteryType.ShangHaiWelfareLottery, Console.ReadLine());
            Console.WriteLine("请输入期号:");
            issue.Number = Console.ReadLine();
            transType = transTypeM.GetTransactionTypeByTypeCode(LotteryType.ShangHaiWelfareLottery, "107");
            try
            {
                string result = gateway.BalanceQuery(accountN, transType, issue);
                Console.WriteLine("销量查询结果:\n" + result);
            }
            catch (Exception ex)
            {
                Console.WriteLine("销量查询结果:\n    错误:" + ex.Message);
            }
            Console.WriteLine("销量查询结束。。。。\n");
            #endregion

            #region 返奖查询
            Console.WriteLine("返奖查询开始。。。。");
            Console.WriteLine("请输入玩法名称(如:双色球、15选5、3D、七乐彩、6+1、天天彩4、时时乐):");
            issue.PlayMethodInfo = pleyMethodM.GetMethodType(LotteryType.ShangHaiWelfareLottery, Console.ReadLine());
            Console.WriteLine("请输入期号:");
            issue.Number = Console.ReadLine();
            transType = transTypeM.GetTransactionTypeByTypeCode(LotteryType.ShangHaiWelfareLottery, "106");
            try
            {
                string result = gateway.BonusQuery(accountN, transType, issue);
                Console.WriteLine("返奖查询结果:\n" + result);
            }
            catch (Exception ex)
            {
                Console.WriteLine("返奖查询结果:\n    错误:" + ex.Message);
            }
            Console.WriteLine("返奖查询结束。。。。\n");
            #endregion

            #region 账户查询
            Console.WriteLine("账户查询开始。。。。");
            try
            {
                transType = transTypeM.GetTransactionTypeByTypeCode(LotteryType.ShangHaiWelfareLottery, "116");
                List<AccountQuery> users = new List<AccountQuery>();
                AccountQuery account = new AccountQuery();
                account.UserName = "******";
                users.Add(account);
                account = new AccountQuery();
                account.UserName = "******";
                users.Add(account);

                string result = gateway.AccountQuery(accountN, transType, users);
                Console.WriteLine("账户查询结果:    \n" + result);
            }
            catch (Exception ex)
            {
                Console.WriteLine("账户查询结果:    \n错误:" + ex.Message);
            }
            Console.WriteLine("账户查询结束。。。。\n");
            #endregion

            IAddBalanceGateway gateway2 = GatewayFactroy.CreateAddBalanceGatewayFactory(LotteryType.ShangHaiWelfareLottery);
            Console.WriteLine("\n充值网关地址:" + gateway2.GatewayUrl + "\n");
            #region 充值
            Console.WriteLine("充值开始。。。。");
            Console.WriteLine("请输入支付提供商类型(1、银联;2、支付宝;3、腾讯财付通;4、汇付天下;5、快钱;6、网银在线;7、云网支付):");
            AlipayProviderTypeManager alipayM = new AlipayProviderTypeManager();
            int alipayIndex = Convert.ToInt32(Console.ReadLine()) - 1;
            AlipayProviderType alipayType = alipayM.providerTypes[alipayIndex];
            user = new UserProfile();
            Console.WriteLine("彩票用户名:");
            user.UserName = Console.ReadLine();
            Console.WriteLine("用户证件类型(1、身份证;2、军官证;3、护照):");
            cardType = Console.ReadLine();
            if (cardType == "1" || cardType == "2" || cardType == "3")
            {
                user.CardTypeInfo = (CardType)int.Parse(cardType);
                Console.WriteLine("证件号码:");
                user.CardNumber = Console.ReadLine();
                Console.WriteLine("用户真是姓名:");
                user.RealName = Console.ReadLine();
                Console.WriteLine("你输入的彩票用户信息为:  证件类型:" + (int)user.CardTypeInfo + "  证件号码:" + user.CardNumber + "  邮箱:" + user.Mail + "  真实姓名:" + user.RealName);
                Console.WriteLine("请输入充值金额:");
                string money = Console.ReadLine();
                Console.WriteLine("请输入接受充值结果的URL地址:");
                string returnUrl = Console.ReadLine();

                try
                {
                    gateway2.PostAddBalance(accountN, alipayType, user, money, returnUrl);
                    Console.WriteLine("充值结果:成功");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("充值结果:\n    错误:" + ex.Message);
                }
            }
            else
            {
                Console.WriteLine("构建彩票用户错误:用户证件类型不正确");
            }

            Console.WriteLine("充值结束。。。。\n");
            #endregion

            #region 充值查询
            Console.WriteLine("充值查询开始(本测试只查询一个充值)。。。。");
            Console.WriteLine("请输入号充值Id(请COPY上面\"充值请求信息\"中的id):");
            string id = Console.ReadLine();

            try
            {
                Fill fill = new Fill();
                fill.Id = id;
                List<Fill> fills = new List<Fill>();
                fills.Add(fill);
                transType = transTypeM.GetTransactionTypeByTypeCode(LotteryType.ShangHaiWelfareLottery, "110");
                string result = gateway2.FillQuery(accountN, transType, fills);
                Console.WriteLine("充值查询结果:\n" + result);
            }
            catch (Exception ex)
            {
                Console.WriteLine("充值查询结果:\n    错误" + ex.Message);
            }

            Console.WriteLine("充值查询结束。。。。\n");
            #endregion

            IDrawingGateway gateway3 = GatewayFactroy.CreateDrawingGatewayFactory(LotteryType.ShangHaiWelfareLottery);
            Console.WriteLine("\n提款网关地址:" + gateway3.GatewayUrl + "\n");
            #region 提款
            Console.WriteLine("提款开始。。。。");
            Drawing drawing = new Drawing();
            try
            {
                drawing = new Drawing();
                drawing.Id = accountN.UserName + DateTime.Now.ToString("yyyyMMdd") + PostManager.EightSerialNumber;

                Console.WriteLine("彩票用户名:");
                user.UserName = Console.ReadLine();
                Console.WriteLine("用户证件类型(1、身份证;2、军官证;3、护照):");
                cardType = Console.ReadLine();
                if (cardType == "1" || cardType == "2" || cardType == "3")
                {
                    user.CardTypeInfo = (CardType)int.Parse(cardType);
                    Console.WriteLine("证件号码:");
                    user.CardNumber = Console.ReadLine();
                    Console.WriteLine("用户真是姓名:");
                    user.RealName = Console.ReadLine();
                    Console.WriteLine("你输入的彩票用户信息为:  证件类型:" + (int)user.CardTypeInfo + "  证件号码:" + user.CardNumber + "  邮箱:" + user.Mail + "  真实姓名:" + user.RealName);
                }

                drawing.User = user;
                Console.WriteLine("银行账号:");
                drawing.BankCard = Console.ReadLine();
                Console.WriteLine("开户行名称:");
                drawing.BankName = Console.ReadLine();
                Console.WriteLine("开户行所在省或直辖市名称:");
                drawing.Province = Console.ReadLine();
                Console.WriteLine("开户行所在城市:");
                drawing.City = Console.ReadLine();
                Console.WriteLine("分行或支行、分理处名称:");
                drawing.Branch = Console.ReadLine();
                Console.WriteLine("提款金额:");
                drawing.Money = Convert.ToInt32(Console.ReadLine());

                transType = transTypeM.GetTransactionTypeByTypeCode(LotteryType.ShangHaiWelfareLottery, "111");
                string result = gateway3.DrawingRequest(accountN, transType, drawing);

                Console.WriteLine("提款结果:\n" + result);
            }
            catch (Exception ex)
            {
                Console.WriteLine("提款结果:    \n错误:" + ex.Message);
            }
            Console.WriteLine("提款结束。。。。\n");
            #endregion

            #region 提款查询
            Console.WriteLine("提款查询开始。。。。");
            try
            {
                List<Drawing> drawings = new List<Drawing>();
                drawings.Add(drawing);
                transType = transTypeM.GetTransactionTypeByTypeCode(LotteryType.ShangHaiWelfareLottery, "113");
                string result = gateway3.DrawingQuery(accountN, transType, drawings);
                Console.WriteLine("提款查询结果:\n" + result);
            }
            catch (Exception ex)
            {
                Console.WriteLine("提款查询结果:    \n错误:" + ex.Message);
            }
            Console.WriteLine("提款查询结束。。。。\n");
            #endregion
        }
        /// <summary>
        /// 联合购买
        /// 代理商向恒朋系统发其一个联合购买请求只能包含一个联合购买方案。
        /// </summary>
        /// <param name="accountNo">代理商账户</param>
        /// <param name="transType">交易类型</param>
        /// <param name="anteInfo">联合购买方案信息</param>
        /// <param name="issue">奖期信息</param>
        /// <param name="anteTickets">联合购买方案投注票信息集合</param>
        /// <param name="anteBuies">联合购买方案认购主体信息集合</param>
        /// <param name="anteCommisions">联合购买方案佣金规则信息集合</param>
        /// <returns></returns>
        public string UniteAnteRequest(AccountNumber accountNo, TransactionType transType, UniteAnteInfo anteInfo, Issue issue, List<UniteAnteTicket> anteTickets, List<UniteAnteBuy> anteBuies, List<UniteAnteCommision> anteCommisions)
        {
            //if (transType.TypeCode.Trim() != "114")
            //    throw new Exception("交易类型和赠送彩金的交易类型不匹配。");

            try
            {
                DateTime now = DateTime.Now;
                    string body = "<body><uniteAnteRequest>";
                    //联合购买方案信息
                    body += "<uniteAnteInfo counterAnteId=\"" + anteInfo.CounterAnteId + "\" ";
                    body += "anteName=\"" + anteInfo.AnteName + "\" ";
                    body += "totalAnteMoney=\"" + anteInfo.TotalAnteMoney + "\" ";
                    body += "totalDeal=\"" + anteInfo.TotalDeal + "\" ";
                    body += "perDeal=\"" + anteInfo.PerDeal + "\" ";
                    body += "userName=\"" + anteInfo.UserName + "\" ";
                    body += "userName=\"" + anteInfo.UserName + "\" >";
                    body += "<issue gameName=\"" + issue.PlayMethodInfo.PlayName + "\" number=" + issue.Number + "\" /></uniteAnteInfo>";
                    //联合购买方案投注票明细信息
                    foreach(UniteAnteTicket anteTicket in anteTickets)
                    {
                        body += "<uniteAnteTicket ticketId=\"" + anteTicket.TicketId + "\" amount=\"" + anteTicket.Amount + "\" money=\"" + anteTicket.Money + "\" playType=\"" + anteTicket.PlayTypeInfo.ID + "\" >";
                        foreach (string anteCode in anteTicket.AnteCodes.Split(new char[] { '\n' }))//投注号
                        {
                            if (!(anteCode.Trim() == ""))
                            {
                                //<anteCode>01,02,03,04,05,06#01</anteCode>
                                body = body + "<anteCode>" + anteCode + "</anteCode>";
                            }
                        }
                        body += "</uniteAnteTicket>";
                    }
                    //联合购买方案认购主体的明细信息
                    foreach (UniteAnteBuy anteBuy in anteBuies)
                    {
                        //<uniteAnteBuy userName="******" cardType="1" mail="*****@*****.**"
                        //cardNumber="430923198009071234" bonusPhone="(0551)76526753" mobile="13098191231" realName="李侠" buyDeal="10" buyMoney="10"/>
                        body += "<uniteAnteBuy userName=\"" + anteBuy.UserName + "\" cardType=\"" + (int)anteBuy.CardType + "\" mail=\"" + anteBuy.Mail + "\" cardNumber=\"" + anteBuy.CardNumber + "\" bonusPhone=\"" + anteBuy.BonusPhone + "\" mobile=\"" + anteBuy.Mobile + "\" realName=\"" + anteBuy.RealName + "\" buyDeal=\"" + anteBuy.BuyDeal + "\" buyMoney=\"" +anteBuy.BuyMoney + "\" />";
                    }
                    //联合购买方案佣金规则信息
                    foreach (UniteAnteCommision anteCommision in anteCommisions)
                    {
                        //<uniteAnteCommision minMoney="100" maxMoney="1000" rate="4"/>
                        body += "<uniteAnteCommision minMoney=\"" + anteCommision.MinMoney +"\" maxMoney=\"" + anteCommision.MaxMoney + "\" rate=\"" + anteCommision.Rate + "\"/>";
                    }

                    body = body + "</uniteAnteRequest></body>";
                    string messageId = accountNo.UserName + now.ToString("yyyyMMdd") + PostManager.EightSerialNumber;
                    string timestamp = now.ToString("yyyyMMdd") + now.ToString("HHmmss");
                    string requestMessage = "transType=" + transType.TypeCode + "&transMessage=" + (((((((("<?xml version=\"1.0\" encoding=\"GBK\"?>" + "<message version=\"1.0\" id=\"" + messageId + "\">") + "<header>") + "<messengerID>" + accountNo.UserName + "</messengerID>") + "<timestamp>" + timestamp + "</timestamp>") + "<transactionType>" + transType.TypeCode + "</transactionType>") + "<digest>" + PostManager.MD5(messageId + timestamp + accountNo.UserPassword + body, "gb2312") + "</digest>") + "</header>") + body + "</message>");
                    string responseMessage = PostManager.Post(GatewayUrl, requestMessage, 120);
                    return responseMessage;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
        }
        /// <summary>
        /// 风险控制查询
        /// tansType="134"
        /// </summary>
        /// <param name="accountNo">代理商账户</param>
        /// <param name="transType">交易类型</param>
        /// <param name="issue"></param>
        /// <param name="anteCode">投注号码.如果指定投注号码,表示查询特定号码的可投注注数,反之,表示查询所有可投注注数小于某个阀值的号码.</param>
        /// <returns></returns>
        public string RiskControlQuery(AccountNumber accountNo, TransactionType transType,Issue issue,string anteCode)
        {
            if (transType.TypeCode.Trim() != "134")
                throw new Exception("交易类型和赠送彩金的交易类型不匹配。");

            try
            {
                DateTime now = DateTime.Now;
                string body = "<body><riskControlQuery gameName=" + issue.PlayMethodInfo.PlayName + "\" number=\"" + issue.Number + "\" anteCode=\"" + anteCode + "\" /></body>";
                string messageId = accountNo.UserName + now.ToString("yyyyMMdd") + now.ToString("HHmmss");
                string timestamp = now.ToString("yyyyMMdd") + now.ToString("HHmmss");
                string message = PostManager.Post(GatewayUrl, "transType=" + transType.TypeCode + "&transMessage=" + (((((((("<?xml version=\"1.0\" encoding=\"GBK\"?>" + "<message version=\"1.0\" id=\"" + messageId + "\">") + "<header>") + "<messengerID>" + accountNo.UserName + "</messengerID>") + "<timestamp>" + timestamp + "</timestamp>") + "<transactionType>106</transactionType>") + "<digest>" + PostManager.MD5(messageId + timestamp + accountNo.UserPassword + body, "gb2312") + "</digest>") + "</header>") + body + "</message>"), 120);
                string responseMessage = PostManager.Post(GatewayUrl, message, 120);
                return responseMessage;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }