/// <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}"); }
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; } }
/// <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}"); }
/// <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); }
/// <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}"); }