예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #4
0
        public async Task <PaymentRequestSendResultModel> TestPaymentRequestAsync()
        {
            EPaymentRequestModel dataModel = GetTestData();

            return(await SendEpaymentRequestAsync(dataModel));
        }