static void Main(string[] args) { const string password = "******"; //var p = new UniplatServiceWCFMobicom.UniplatServiceWCFMobicom(); var client = new NS.UniplatService();//UniplatServiceClient(); { Console.WriteLine("Sending DebitMoney"); var paymentNumber = DateTime.Now.Ticks.ToString().Substring(1, 10); var reqBeeline = new NS.ReqDebit() { Amount = 1000, Comment = "Test", PartnerCode = "tst", ServiceId = "13632", //"6889", MSISDN = "9099952793", //"9035618208", //"9168036435",//"9099952793",//"9055812453", PaymentNumber = paymentNumber, PaymentId = Guid.NewGuid().ToString() }; var reqMts = new NS.ReqDebit() { Amount = 1500, Comment = "Test", PartnerCode = "tst", ServiceId = "6889", //"6907", MSISDN = "9104501874", //"9521873493", //"9035618208", //"9168036435",//"9099952793",//"9055812453", PaymentNumber = paymentNumber, PaymentId = Guid.NewGuid().ToString() }; var req = reqMts; req.Hash = GetHash(req.PaymentId + req.PartnerCode + req.ServiceId + req.MSISDN + req.PaymentNumber + req.Amount + password); var resp = client.DebitMoney(req); if (resp.ResultCode == 0) { Console.WriteLine("Succsessfull response received"); Console.WriteLine("Send state request?"); int x = 0; while (Console.ReadLine() == "y") //(x ++ < 10) { var reqState = new NS.ReqState() { PaymentId = req.PaymentId, PartnerCode = "tst" }; reqState.Hash = GetHash(reqState.PaymentId + reqState.PartnerCode + password); resp = client.GetDebitState(reqState); Console.WriteLine(resp.ResultCode + " " + resp.ResultComment); } } else { Console.WriteLine("Bad request. Error code: " + resp.ResultCode); } Console.ReadKey(); } }
/// <summary> /// Создает и инициализирует объект Payment по поступившему от клиента запросу /// </summary> /// <param name="request">Переданный клиентом запрос</param> /// <returns>Объект частично описывающий совершаемый платеж</returns> private UniplatServiceData.Payment FillPaymentWithRequest(ReqDebit request) { var payment = _storage.Payments.CreateObject(); payment.PaymentNumber = request.PaymentNumber; payment.MSISDN = request.MSISDN ?? "NULL"; payment.Amount = request.Amount; payment.Currency = CurrencyId; payment.SMSComment = request.Comment; payment.MessageTime = DateTime.Now; return(payment); }
/// <summary> /// Запиывает в БД запрос ReqDebit клиента /// </summary> /// <param name="request">Переданный клиентом запрос</param> /// <returns>Добавленная в БД запись</returns> private ClientMessage LogReqDebit(ReqDebit request) { var logEntry = _storage.ClientMessages.CreateObject(); logEntry.Id = Guid.NewGuid(); logEntry.CreateTime = DateTime.Now; logEntry.Method = "DebitMoney"; logEntry.Action = "Request"; logEntry.PaymentId = Truncate(request.PaymentId, 50); logEntry.PaymentNumber = Truncate(request.PaymentNumber, 10); logEntry.PartnerCode = Truncate(request.PartnerCode, 3); logEntry.MSISDN = Truncate(request.MSISDN, 10); logEntry.Amount = Truncate(request.Amount.ToString(), 10); logEntry.Comment = Truncate(request.Comment, 50); logEntry.OperatorCode = Truncate(request.OperatorCode, 3); logEntry.ServiceId = Truncate(request.ServiceId, 50); logEntry.Hash = Truncate(request.Hash, 50); _storage.ClientMessages.AddObject(logEntry); return(logEntry); }
public Resp DebitMoney(ReqDebit request) { Trace.WriteLine("ReqDebit for " + request.MSISDN + " amount=" + request.Amount); MobicomMessage initialResponse = null; Func <int, string, Resp> createAndSaveDebitResp = (code, comment) => CreateAndSaveResp(request.PaymentId, code, comment, "DebitMoney", initialResponse); try { // Если это тестовый режим, то ... if (ConfigurationManager.AppSettings["IsTesting"].ToLower() == "true") // Если это тестовый режим, то ... { #region Log var initialRequest = LogReqDebit(request); var payment = FillPaymentWithRequest(request); string wrongParameter; Guid paymentId; if (!Guid.TryParse(request.PaymentId, out paymentId)) { return(createAndSaveDebitResp(2, "Incorrect parameter: PaymentId")); } payment.Id = paymentId; if (!request.CheckParametersRegex(out wrongParameter)) { return(createAndSaveDebitResp(2, "Incorrect parameter: " + wrongParameter)); } var partner = _storage.Partners.SingleOrDefault(p => p.Code == request.PartnerCode); if (partner == null) { return(createAndSaveDebitResp(3, "Incorrect parameter: PartnerCode")); } payment.Partner = partner; if (!request.CheckHashCode(partner.Password)) { return(createAndSaveDebitResp(4, "Incorrect hash-value")); } var brand = _storage.GetBrandByMSISDN("7" + request.MSISDN).Single(); var brandNotFound = brand.Id == Guid.Empty; //Определяем агрегатора которому предназначен запрос int merchOwnerId = int.Parse(request.ServiceId); var merch2Op = partner.Partner2Merchants.Select(p2m => p2m.Merchant) .Where(m => m.Code == merchOwnerId) .SelectMany(m => m.Merchants2Operators) .SingleOrDefault( m2o => m2o.BrandId == brand.Id && m2o.OperatorParameter.Active); // Условие переделать if (merch2Op == null) { return(createAndSaveDebitResp(3, "ServiceId")); } var merchant = merch2Op.Merchant; payment.Merchant = merchant; var bank = merchant.Bank; var agregatorId = bank.AgregarorId; //------------------------------------- //развилка по банкам/платежным системам //------------------------------------- if (brand.Id == MEGAPHONE_OPERATOR_BREND) { #region КиберПлат var clnt = new CyberPlatClient(); var res = clnt.PayRequest(request.MSISDN, merch2Op.OperatorParameter.Code.ToString(), request.Amount, request.ServiceId, request.PaymentNumber); Debug.Print(res); #endregion } else { #region Мобиком // Основные параметры подключения к МобиКом // **************************************************************** var mobiAgregator = new Agregator { id = agregatorId }; var mobiMerchant = new MobicomLibrary.Merchant { id = merchant.Code }; // Переменные параметры подключения // **************************************************************** var mobiPhone = new Phone { number = request.MSISDN, provider = merch2Op.OperatorParameter.Code }; var mobyClient = new Client { Phone = mobiPhone }; var mobiPayment = new MobicomLibrary.Payment { currency = CurrencyId, amount = request.Amount }; _storage.Payments.AddObject(payment); var mobiMessage = new Message { bill = request.PaymentNumber, comment = request.Comment }; Owner mobiOwner = new Owner { id = Guid.NewGuid().ToString().Replace("-", "") }; // Идентификатор транзакции, заданный Агрегатором. (Регулярное выражение для проверки: ^[A-Za-z0-9]+$ ). Этот идентификатор должен быть уникальным в течении всего периода взаимодействия с системой Mobicom, причём в пределах обоих типов сообщений: MCStartReq и MCStartExReq. payment.OwnerId = mobiOwner.id; _storage.Payments.AddObject(payment); //// Регистрируем запрос в Мобиком и получаем статус выполнения запроса. //var mobiClient = new mobicomTypeClient(); //MobicomStartResponse resp = mobiClient.MobicomStartRequestOperation(mobiRequest); //initialResponse = LogMobicomStartResponse(resp); ////+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //if (resp.Result.code.HasValue && resp.Result.code.Value != 0) // return createAndSaveDebitResp(11, resp.Result.comment); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Создаем и инициализируем объект MobicomStartRequest для быстрой регистрации запроса на стороне Мобиком //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ var mobiRequest = new MobicomStartRequest { Agregator = mobiAgregator, Merchant = mobiMerchant, Client = mobyClient, version = bank.ProtocolVersion, Owner = mobiOwner, Payment = mobiPayment, Message = mobiMessage }; string ss = mobiRequest.Owner.id + mobiRequest.Client.Phone.number + mobiRequest.Client.Phone.provider.ToString() + mobiRequest.Payment.amount.ToString() + mobiRequest.Payment.currency.ToString() + mobiRequest.Message.bill + mobiRequest.Message.comment + bank.Password; mobiRequest.hash = GetHash(ss); LogMobicomStartRequest(mobiRequest, initialRequest); // Регистрируем запрос в Мобиком и получаем статус выполнения запроса. var mobiClient = new mobicomTypeClient(); MobicomStartResponse resp = mobiClient.MobicomStartRequestOperation(mobiRequest); initialResponse = LogMobicomStartResponse(resp); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (resp.Result.code.HasValue && resp.Result.code.Value != 0) { return(createAndSaveDebitResp(11, resp.Result.comment)); } #endregion } return(createAndSaveDebitResp(0, "")); //createAndSaveDebitResp(0, ""); #endregion #region Emulation //var eagregatorId = 33; // bank.AgregarorId; // //Основные параметры подключения // //**************************************************************** //var emobiAgregator = new ServiceEmulation.Agregator { id = eagregatorId }; //var emobiMerchant = new ServiceEmulation.Merchant { id = 6889 }; // //Переменные параметры подключения // //**************************************************************** //var emobiPhone = new ServiceEmulation.Phone { number = request.MSISDN, provider = 2 }; //emobiPhone.provider = 3; // 1 — «Вымпелком», 2 — «Мобильные Телесистемы», 3 — «Мегафон» //var emobClient = new ServiceEmulation.Client { Phone = emobiPhone }; //var mobyClient = new Client { Phone = mobiPhone }; //var emobiPayment = new ServiceEmulation.Payment { currency = CurrencyId, amount = request.Amount }; //var emobiMessage = new ServiceEmulation.Message //{ // bill = request.PaymentNumber, // comment = request.Comment //}; //var emobiOwner = new ServiceEmulation.Owner { id = Guid.NewGuid().ToString().Replace("-", "") }; // //Идентификатор транзакции, заданный Агрегатором. (Регулярное выражение для проверки: ^[A-Za-z0-9]+$ ). Этот идентификатор должен быть уникальным в течении всего периода взаимодействия с системой Mobicom, причём в пределах обоих типов сообщений: MCStartReq и MCStartExReq. ////+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //// Создаем и инициализируем объект MobicomStartRequest для быстрой регистрации запроса на стороне Мобиком ////+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //var emobiRequest = new ServiceEmulation.MobicomStartRequest //{ // Agregator = emobiAgregator, // Merchant = emobiMerchant, // Client = emobClient, // version = "1.0", //bank.ProtocolVersion, // Owner = emobiOwner, // Payment = emobiPayment, // Message = emobiMessage //}; //string ess = emobiRequest.Owner.id + emobiRequest.Client.Phone.number + // emobiRequest.Client.Phone.provider.ToString() + // emobiRequest.Payment.amount.ToString() + emobiRequest.Payment.currency.ToString() + // emobiRequest.Message.bill + // emobiRequest.Message.comment + "Qq12345678"; //+ bank.Password; //emobiRequest.hash = GetHash(ess); //LogMobicomStartRequest(mobiRequest, initialRequest); //// Создаем слиентское подключение к сервису Мобиком //var emobiClient = new ServiceEmulation.MobicomEmulationClient("BasicHttpBinding_IMobicomEmulation"); //// Регистрируем запрос в Мобиком и получаем статус выполнения запроса. //ServiceEmulation.MobicomStartResponse eresp = emobiClient.MobicomStartRequestOperation(emobiRequest); //return createAndSaveDebitResp(eresp.Result.code.GetValueOrDefault(0), eresp.Result.comment); #endregion } else // Иначе это боевой режим { #region Pay var initialRequest = LogReqDebit(request); var payment = FillPaymentWithRequest(request); string wrongParameter; Guid paymentId; if (!Guid.TryParse(request.PaymentId, out paymentId)) { return(createAndSaveDebitResp(2, "Incorrect parameter: PaymentId")); } payment.Id = paymentId; if (!request.CheckParametersRegex(out wrongParameter)) { return(createAndSaveDebitResp(2, "Incorrect parameter: " + wrongParameter)); } var partner = _storage.Partners.SingleOrDefault(p => p.Code == request.PartnerCode); if (partner == null) { return(createAndSaveDebitResp(3, "Incorrect parameter: PartnerCode")); } payment.Partner = partner; if (!request.CheckHashCode(partner.Password)) { return(createAndSaveDebitResp(4, "Incorrect hash-value")); } var brand = _storage.GetBrandByMSISDN("7" + request.MSISDN).Single(); var brandNotFound = brand.Id == Guid.Empty; //Определяем агрегатора которому предназначен запрос int merchOwnerId = int.Parse(request.ServiceId); /* * var merch2Op1 = * partner.Partner2Merchants.Select(p2m => p2m.Merchant).ToArray(); * * var merch2Op2 = * partner.Partner2Merchants.Select(p2m => p2m.Merchant) * .Where(m => m.Code == merchOwnerId).ToArray(); * * var merch2Op3 = * partner.Partner2Merchants.Select(p2m => p2m.Merchant) * .Where(m => m.Code == merchOwnerId) * .SelectMany(m => m.Merchants2Operators).ToArray(); */ var merch2Op = partner.Partner2Merchants.Select(p2m => p2m.Merchant) .Where(m => m.Code == merchOwnerId) .SelectMany(m => m.Merchants2Operators) .SingleOrDefault( m2o => m2o.BrandId == brand.Id && m2o.OperatorParameter.Active); // Условие переделать if (merch2Op == null) { return(createAndSaveDebitResp(3, "ServiceId")); } var merchant = merch2Op.Merchant; payment.Merchant = merchant; var bank = merchant.Bank; var agregatorId = bank.AgregarorId; // Основные параметры подключения // **************************************************************** var mobiAgregator = new Agregator { id = agregatorId }; var mobiMerchant = new MobicomLibrary.Merchant { id = merchant.Code }; // Переменные параметры подключения // **************************************************************** var mobiPhone = new Phone { number = request.MSISDN, provider = merch2Op.OperatorParameter.Code }; var mobyClient = new Client { Phone = mobiPhone }; var mobiPayment = new MobicomLibrary.Payment { currency = CurrencyId, amount = request.Amount }; var mobiMessage = new Message { bill = request.PaymentNumber, comment = request.Comment }; Owner mobiOwner = new Owner { id = Guid.NewGuid().ToString().Replace("-", "") }; // Идентификатор транзакции, заданный Агрегатором. (Регулярное выражение для проверки: ^[A-Za-z0-9]+$ ). Этот идентификатор должен быть уникальным в течении всего периода взаимодействия с системой Mobicom, причём в пределах обоих типов сообщений: MCStartReq и MCStartExReq. payment.OwnerId = mobiOwner.id; _storage.Payments.AddObject(payment); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Создаем и инициализируем объект MobicomStartRequest для быстрой регистрации запроса на стороне Мобиком //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ var mobiRequest = new MobicomStartRequest { Agregator = mobiAgregator, Merchant = mobiMerchant, Client = mobyClient, version = bank.ProtocolVersion, Owner = mobiOwner, Payment = mobiPayment, Message = mobiMessage }; string ss = mobiRequest.Owner.id + mobiRequest.Client.Phone.number + mobiRequest.Client.Phone.provider.ToString() + mobiRequest.Payment.amount.ToString() + mobiRequest.Payment.currency.ToString() + mobiRequest.Message.bill + mobiRequest.Message.comment + bank.Password; mobiRequest.hash = GetHash(ss); LogMobicomStartRequest(mobiRequest, initialRequest); // Регистрируем запрос в Мобиком и получаем статус выполнения запроса. var mobiClient = new mobicomTypeClient(); MobicomStartResponse resp = mobiClient.MobicomStartRequestOperation(mobiRequest); initialResponse = LogMobicomStartResponse(resp); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (resp.Result.code.HasValue && resp.Result.code.Value != 0) { return(createAndSaveDebitResp(11, resp.Result.comment)); } return(createAndSaveDebitResp(0, "")); #endregion } } catch (Exception e) { Trace.WriteLine("Ошибка в DebitMoney: " + e); return(createAndSaveDebitResp(13, "UniplatService internal error")); } finally { TrySaveChanges(); } }
public Resp DebitMoney(ReqDebit request) { return(CreateRandomResp()); }