private EPaymentRequestModel GetTestData() { var model = new EPaymentRequestModel { AisPaymentId = 14, ServiceProviderName = "Министерство на правосъдието", ServiceProviderBank = "Българска народна банка", ServiceProviderBic = "BNBGBGSD", ServiceProviderIban = "BG09BNBG96613000173701", Currency = "BGN", PaymentTypeCode = 1, PaymentAmount = 49.00m, PaymentReason = "Заплащане на такса", ApplicantUinTypeId = (int)Shared.Enums.IdentificationType.EGN, ApplicantUin = "7105086301", ApplicantName = "Емил Дечев Денчовски", ExpirationDate = DateTime.Now.AddDays(5).Date, AdministrativeServiceSupplierUri = _settings.AdministrativeServiceSupplierUri, AdministrativeServiceNotificationUrl = _settings.AdministrativeServiceNotificationUrl, PaymentReferenceType = 1, PaymentReferenceNumber = "30", PaymentReferenceDate = DateTime.Now.Date, }; return(model); }
public async Task <PaymentRequestSendResultModel> SendEpaymentRequestAsync(EPaymentRequestModel dataModel) { JsonSerializerSettings settings = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.IsoDateFormat, NullValueHandling = NullValueHandling.Include }; string dataJson = JsonConvert.SerializeObject(dataModel, settings); (string data, string hmac) = ComputeBodyProps(dataJson, _settings.UseTestEnv); // Ако се извика услуга с несъществуващ clientId или ако при извикване на услуга калкулирания // от средата HMAC-SHA256 не съответства на подадения в полето hmac се връща грешка HTTP 401 Unauthorized. using (HttpClient client = new HttpClient()) { string serviceVerison = "v1"; string postUri = $"api/{serviceVerison}/eService/paymentJson"; client.BaseAddress = new Uri(_settings.UseTestEnv ? _settings.TestEnvUrl : _settings.Url); // Параметрите се подават в HTTPS POST заявката в Internet media type формат "application/x-www-form-urlencoded; charset=UTF-8". client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded")); // Извикването на услуги на средата се извършва чрез HTTP POST заявка на адрес посочен в полето URL на услугата. // При всяко извикване на услуга се подават три параметъра: // 1. clientId – уникален идентификатор на клиента на средата // 2. hmac – hmac-sha256 код изчислен върху полето data // 3. data – данни за предаваното съобщение. var encodedHttpBody = $"clientId={HttpUtility.UrlEncode(_settings.UseTestEnv ? _settings.TestEnvClientId : _settings.ClientId)}&hmac={HttpUtility.UrlEncode(hmac)}&data={HttpUtility.UrlEncode(data)}"; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateRemoteCertificate); var response = await client.PostAsync(postUri, new StringContent(encodedHttpBody, Encoding.UTF8, "application/x-www-form-urlencoded")); // При невалидна структура на документ "ЗАЯВКА ЗА ПЛАЩАНЕ" се връща грешка HTTP 400 BAD REQUEST PaymentRequestSendResultModel resultModel; if (response.IsSuccessStatusCode) { string responseContent = await response.Content.ReadAsStringAsync(); resultModel = GetResultModel(responseContent); } else { resultModel = new PaymentRequestSendResultModel(); string responseContent = await response.Content.ReadAsStringAsync(); resultModel.ErrorMessage = responseContent; } resultModel.IsSuccessStatusCode = response.IsSuccessStatusCode; resultModel.StatusCode = (int)response.StatusCode; return(resultModel); } }
private async Task <PaymentRequestSendResultModel> CreateTaxMeRequest(int certificateOfDistraintOfPropertyRequestId) { EServicePaymentRequestCreateModel result = await _ePaymentService.GeneratePaymentRequestAsync(Shared.Enums.EServiceType.SEIZEDPROPERTYCERTIFICATE, certificateOfDistraintOfPropertyRequestId); PaymentRequest request = await _context.PaymentRequest.Where(x => x.AisPaymentId == result.PaymentRequestId).SingleOrDefaultAsync(); EPaymentRequestModel model = request.ToEpaymentModel(); PaymentRequestSendResultModel sendResultModel = await _ePaymentService.SendEpaymentRequestAsync(model ?? throw new ArgumentNullException(nameof(result))); return(sendResultModel); }
public async Task <PaymentRequestSendResultModel> TestPaymentRequestAsync() { EPaymentRequestModel dataModel = GetTestData(); return(await SendEpaymentRequestAsync(dataModel)); }