public static async Task <RegisterDOResponse> RegisterDO(RegisterDORequest request)
        {
            using (var client = new HttpClient())
            {
                var serializerSettings = new JsonSerializerSettings
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                };

                var content  = JsonConvert.DeserializeObject <Dictionary <string, string> >(JsonConvert.SerializeObject(request, serializerSettings));
                var uri      = new Uri(TestHost, "payment/rest/register.do");
                var response = await client.PostAsync(uri, new FormUrlEncodedContent(content));

                var responseContent = await response.Content.ReadAsStringAsync();

                return(JsonConvert.DeserializeObject <RegisterDOResponse>(responseContent));
            }
        }
예제 #2
0
        public async Task <IActionResult> CreatePayment([FromBody] CreatePaymentRequest request)
        {
            var user = UserService.Get(long.Parse(User.Identity.Name));

            if (user == null)
            {
                return(NotFound(new ResponseModel
                {
                    Success = false,
                    Message = "Пользователь не найден"
                }));
            }

            var wallet = UserWalletService.GetUserWallet(user);

            if (wallet == null)
            {
                return(NotFound(new ResponseModel
                {
                    Success = false,
                    Message = "Кошелек не найден"
                }));
            }

            var payment = new Payment
            {
                Wallet = wallet,
                Amount = request.Amount,
                Type   = request.Type,
                Status = PaymentStatus.New
            };

            PaymentService.Create(payment);

            var paymentRequest = new RegisterDORequest($"user#{user.ID}deposit#{payment.ID}_{DateTime.UtcNow.Millisecond}", (payment.Amount * 100));

            if (request.SessionID != 0)
            {
                paymentRequest.SetSessionID(request.SessionID);
            }

            var paymentResponse = await SberbankAPI.RegisterDO(paymentRequest);

            if (paymentResponse.OrderId == null)
            {
                payment.Status = PaymentStatus.Canceled;
                PaymentService.Update(payment);

                return(BadRequest(new ResponseModel
                {
                    Success = false,
                    Message = $"{paymentResponse.ErrorMessage} Код ошибки: {paymentResponse.ErrorCode}"
                }));
            }

            payment.OrderID = paymentResponse.OrderId;
            PaymentService.Update(payment);

            return(Ok(new CreatePaymentResponse
            {
                RedirectUrl = paymentResponse.FormUrl
            }));
        }