Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }