public async Task <SubmitPaymentResult> SubmitPayment(SubmitPaymentRequest submitPaymentRequest) { var result = new SubmitPaymentResult(); if (Guid.TryParse(submitPaymentRequest.PriceLockId, out Guid validPriceLockId)) { var payeeValidationResult = await ValidateNewPriceLockPayee(submitPaymentRequest); if (payeeValidationResult == PaymentErrorCodes.None) { using (X42DbContext dbContext = new X42DbContext(databaseSettings.ConnectionString)) { var priceLock = dbContext.PriceLocks.Where(p => p.PriceLockId == validPriceLockId).FirstOrDefault(); if (priceLock != null) { if (priceLock.Status == (int)Status.New) { priceLock.PayeeSignature = submitPaymentRequest.PayeeSignature; priceLock.TransactionId = submitPaymentRequest.TransactionId; priceLock.Status = (int)Status.WaitingForConfirmation; priceLock.Relayed = false; dbContext.SaveChanges(); if (!string.IsNullOrEmpty(submitPaymentRequest.TransactionHex)) { await networkFeatures.SendTransaction(submitPaymentRequest.TransactionHex); } result.Success = true; } else { result.ErrorCode = (int)PaymentErrorCodes.NotNew; } } else { result.ErrorCode = (int)PaymentErrorCodes.PriceLockNotFound; } } } else { result.ErrorCode = (int)payeeValidationResult; } } return(result); }
/// <inheritdoc /> public SubmitPaymentResult SubmitPayment(SubmitPaymentRequest submitPaymentRequest) { var result = new SubmitPaymentResult(); var t3Node = this.xServerPeerList.GetPeers().Where(n => n.Tier == (int)TierLevel.Three).OrderBy(n => n.ResponseTime).FirstOrDefault(); if (t3Node != null) { string xServerURL = Utils.GetServerUrl(t3Node.NetworkProtocol, t3Node.NetworkAddress, t3Node.NetworkPort); var client = new RestClient(xServerURL); client.UseNewtonsoftJson(); var paymentRequest = new RestRequest("/submitpayment", Method.POST); var request = JsonConvert.SerializeObject(submitPaymentRequest); paymentRequest.AddParameter("application/json; charset=utf-8", request, ParameterType.RequestBody); paymentRequest.RequestFormat = DataFormat.Json; var submitPaymentResult = client.Execute <SubmitPaymentResult>(paymentRequest); if (submitPaymentResult.StatusCode == HttpStatusCode.OK) { result = submitPaymentResult.Data; } else { var errorResponse = JsonConvert.DeserializeObject <ErrorResponse>(submitPaymentResult.Content); if (errorResponse != null) { result.ResultMessage = errorResponse.errors[0].message; } else { result.ResultMessage = "Failed to access xServer"; } result.Success = false; } } else { result.ResultMessage = "Not connected to any tier 3 servers"; } return(result); }