Пример #1
0
        /// <summary>
        /// Выполнения платежа по шаблону
        /// </summary>
        void TemplatePayment()
        {
            if (ErrCode != 0)
            {
                return;
            }

            int paySum = (int)(Amount * 100M);

            RootLog("{0} [Rapida.TplPay - start] Ext={1} TID={2} Trm={3} Amount={4}", Tid, Session, TemplateTid, PPID, Amount.AsCurrency());
            stRequest = string.Format("?function=payment&PaymExtId={0}&PPID={1}&TID={2}&Amount={3}", Session, PPID, TemplateTid, paySum);

            string Result = Get(Host + stRequest);

            if (string.IsNullOrEmpty(Result))
            {
                // Если ршибка SSL-соединения попробуем ещё раз
                if ((WebExceptionStatus)ErrCode == WebExceptionStatus.SecureChannelFailure && Attempts++ < 5)
                {
                    Wait(20);
                    TemplatePayment();
                    return;
                }

                if (ErrCode != 0) // Ошибка сервиса
                {
                    errCode = 11;
                }
                return;
            }

            string ResultStatus = XPath.GetString(Result, "/Response/Result");

            if (string.IsNullOrEmpty(ResultStatus))
            {
                ResultStatus = XPath.GetString(Result, "/Response/CheckResult");
            }

            if (ResultStatus.ToUpper() == "OK")
            {
                // Баланс агента
                Balance = XPath.GetDec(Result, "/Response/Balance").Value;
                errDesc = "Payment OK";
                Bank    = $"{XPath.GetString(Result, "/Response/B_Name").ToUpper()}; {XPath.GetString(Result, "/Response/List/par1")}; {XPath.GetString(Result, "/Response/List/par3")}; {XPath.GetString(Result, "/Response/List/par4")}";
                errCode = 3;
                state   = 6;
            }
            else
            {
                errCode = XPath.GetInt(Result, "/Response/ErrCode").Value;
                errDesc = $"({errCode}) {XPath.GetString(Result, "/Response/Description")}";
                errCode = 6;
                state   = 12;
            }

            RootLog($"{Tid} [Rapida.TplPay - finish] Ext={Session} TID={TemplateTid} Trm={PPID} Balance={Balance.AsCurrency()} err={ErrCode} {ErrDesc}");
        }
Пример #2
0
 void Pay()
 {
     MakeRequest(3);
     if (!string.IsNullOrEmpty(stRequest))
     {
         stResponse = Get(Host + "?" + stRequest);
         errCode    = XPath.GetInt(stResponse, "/response/result").Value;
         errDesc    = XPath.GetString(stResponse, "/response/comment");
         addinfo    = (string.IsNullOrEmpty(addinfo))? XPath.GetString(stResponse, "/response/projectName/ru"): addinfo;
         outtid     = (string.IsNullOrEmpty(Outtid)) ? XPath.GetString(stResponse, "/response/order"): Outtid;
     }
 }
Пример #3
0
        /// <summary>
        /// Регистрация плательщика
        /// </summary>
        void RegPayeer()
        {
            // Если какого-то параметра нет - возникнет исключение

            if (Gateway.ToLower() != "regpay")
            {
                return;
            }

            RootLog($"{Tid} [Rapida.RegPay - start] Ext={Session} Ph={Phone} Fio={Fam.ToUpper()}||{Name.ToUpper()}||{SName.ToUpper()} Pass={KD}||{SD}||{ND} GD={GD} DD={DD} DR={DR} MR={MR} CS={CS} AMR={AMR}, Trm={PPID}");

            stRequest = $"?function=reg&PaymExtId={Session}&PPID={PPID}&mPhone={Phone}&fam={(Fam != null ? Fam.ToUpper() : "")}&name={(Name != null ? Name.ToUpper(): "")}&sname={(SName != null ? SName.ToUpper() : "")}&KD={KD}&SD={SD}&ND={ND}&GD={GD}&DD={DD}&DR={DR}&MR={MR}&CS={CS}&AMR={AMR}";

            string Result = Get(Host + stRequest);

            if (string.IsNullOrEmpty(Result))
            {
                // Если ршибка SSL-соединения попробуем ещё раз
                if ((WebExceptionStatus)ErrCode == WebExceptionStatus.SecureChannelFailure && Attempts++ < 5)
                {
                    Wait(20);
                    RegPayeer();
                    return;
                }

                if (ErrCode != 0) // Ошибка сервиса
                {
                    errCode = 11;
                }
                return;
            }

            string ResultStatus = XPath.GetString(Result, "/Response/Result");

            if (ResultStatus.ToUpper() == "OK")
            {
                GKID    = XPath.GetString(Result, "/Response/Gkid");
                errDesc = XPath.GetString(Result, "/Response/Description");
                errCode = 0;
                state   = 0;
            }
            else
            {
                errCode = XPath.GetInt(Result, "/Response/ErrCode").Value;
                errDesc = $"({errCode}) {XPath.GetString(Result, "/Response/Description")}";
                errCode = 6;
                state   = 12;
            }

            RootLog($"{Tid} [Rapida.RegPay - finish]  Ext={Session} GkID={GKID}\r\nerr={ErrCode}: {ErrDesc}");
        }
Пример #4
0
        /// <summary>
        /// Проверка баланса счёта агента
        /// </summary>
        /// <returns></returns>
        bool CheckBalance()
        {
            RootLog($"{Tid} [Rapida.CheckBalance - start] {Session}");

            string Result = Get(Host + $"?function=getbalance&PaymExtId={Session}");

            // Если ршибка SSL-соединения попробуем ещё раз
            if ((WebExceptionStatus)ErrCode == WebExceptionStatus.SecureChannelFailure && Attempts++ < 5)
            {
                Wait(20);
                return(CheckBalance());
            }

            // Получение статуса запроса
            string sResult = XPath.GetString(Result, "/Response/Result");

            errDesc = XPath.GetString(Result, "/Response/Description");


            // Если запрос завершился с ошибкой вернем -1
            if (sResult.ToUpper() != "OK")
            {
                errCode = XPath.GetInt(Result, "/Response/ErrCode").Value;
                state   = 12; // Ошибка на стороне сервиса РАРИДА
                RootLog($"{Tid} [Rapida.CheckBalance - finish] {Session} Result={sResult} {ErrDesc}");
                return(false);
            }

            // Проверка баланса
            Balance = XPath.GetDec(Result, "/Response/Data/Balance").Value;

            if (Balance < Amount)
            {
                RootLog($"{Tid} [Rapida.CheckBalance - finish] {Session} Баланс {Balance} меньше размера платежа. Сервис приостанавливается\r\nResult={sResult}: {ErrDesc}");
                errCode = 12;
                errDesc = "Шлюз временно заблокирован";
                state   = 0;
                return(false);
            }
            else
            {
                RootLog($"{Tid} [Rapida.CheckBalance - finish] {Session} {Service} sResult={sResult} Balance={Balance.AsCF()} Amount={Amount.AsCF()}");
            }

            errCode = 0;
            state   = 1;
            return(true);
        }
Пример #5
0
        /// <summary>
        /// Регистрация платёжного шаблона
        /// </summary>
        void RegTemplate()
        {
            if (ErrCode != 0)
            {
                return;
            }
            // Если запрос с регистрацией
            if (Gateway.ToLower() == "regpay")
            {
                string Params = $"{Bik};{Account};{Fam} {Name} {SName};{Number}";
                RootLog($"{Tid} [Rapida.RegTpl - start] Ext={Session} Trm={PPID} Ph={Phone} Params=\"{Params}\"");
                stRequest = $"?function=check&PaymExtId={Session}&PPID={PPID}&mPhone={Phone}&RCode=601&Params={Params}";
            }
            // Если запрос по номеру кода
            else
            {
                RootLog($"{Tid} [Rapida.RegTpl - start] Ext={Session} Trm={PPID} TID={TemplateTid}");
                stRequest = $"?function=check&PaymExtId={Session}&PPID={PPID}&TID={TemplateTid}";
            }

            string Result = Get(Host + stRequest);

            if (string.IsNullOrEmpty(Result))
            {
                // Если ршибка SSL-соединения попробуем ещё раз
                if ((WebExceptionStatus)ErrCode == WebExceptionStatus.SecureChannelFailure && Attempts++ < 5)
                {
                    Wait(20);
                    RegTemplate();
                    return;
                }

                if (ErrCode == 500) // Ошибка сервиса
                {
                    state = 11;
                }
                return;
            }

            string ResultStatus = XPath.GetString(Result, "/Response/CheckResult");

            if (ResultStatus.ToUpper() == "OK")
            {
                Fam   = XPath.GetString(Result, "/Response/Fam");
                Name  = XPath.GetString(Result, "/Response/Name");
                SName = XPath.GetString(Result, "/Response/SName");

                fio = Fam + " " + Name + " " + SName;

                // Код требования
                TemplateTid = XPath.GetString(Result, "/Response/Tid");
                // Банк
                Bank = $"{XPath.GetString(Result, "/Response/B_Name").ToUpper()}; {XPath.GetString(Result, "/Response/List/par1")}; {XPath.GetString(Result, "/Response/List/par3")}; {XPath.GetString(Result, "/Response/List/par4")}";
                // Bank = GetValueFromAnswer(Result, "/Response/B_Name");
                // Номер платежа в системе
                PaymNumb = XPath.GetString(Result, "/Response/PaymNumb");
                // Баланс агента
                Balance = XPath.GetDec(Result, "/Response/Balance").Value;
                errDesc = "Valid check";
                errCode = 0;
                state   = 0;
            }
            else
            {
                errCode = XPath.GetInt(Result, "/Response/ErrCode").Value;
                errDesc = $"({ErrCode}) {XPath.GetString(Result, "/Response/Description")}";
                errCode = 6;
                state   = 12;
            }

            RootLog($"{Tid} [RegTpl - finish] Ext={Session} TID={TemplateTid} FIO={Fam + " " + Name + " " + SName} Trm={PPID} PayNumb={PaymNumb} Balance={Balance.AsCurrency()} \r\nerr={ErrCode}: {ErrDesc}");
        }