public ProcessPaymentResult Charge(string token, decimal orderSubTotal, int sellerCustomerId, ProcessPaymentRequest processPaymentRequest) { var stripeSeller = _customerEntityService.GetOrCreate(sellerCustomerId); var StripeBasedTotal = NopDecimalToStripeInt(processPaymentRequest.OrderTotal); var stripebasedSubTotal = NopDecimalToStripeDecimal(orderSubTotal); // fee is 20% of total without shipping var appFee = Convert.ToInt32(Math.Floor(stripebasedSubTotal * 0.2m)); // todo configurable appfee percent var chargeAmount = StripeBasedTotal - appFee; var chargeOptions = new StripeChargeCreateOptions() { Amount = chargeAmount, SourceTokenOrExistingSourceId = token, ApplicationFee = appFee, Currency = "USD" // TODO currency }; _logger.Information("Stripe charge with Token: " + token + ", Amount: " + chargeAmount + ", AppFee: " + appFee); var charge = _stripeChargeService.Create(chargeOptions, new StripeRequestOptions() { IdempotencyKey = processPaymentRequest.OrderGuid.ToString("N"), StripeConnectAccountId = stripeSeller.StripeUserId }); var result = new ProcessPaymentResult(); if (charge.Paid) { result.NewPaymentStatus = Core.Domain.Payments.PaymentStatus.Paid; var stripeOrderCharge = new StripeOrderCharge(); stripeOrderCharge.CustomerId = processPaymentRequest.CustomerId; stripeOrderCharge.SellerCustomerId = sellerCustomerId; stripeOrderCharge.OrderGuid = processPaymentRequest.OrderGuid; stripeOrderCharge.StripeChargeId = charge.Id; _orderChargeEntityService.Create(stripeOrderCharge); } else { result.AddError("Error " + charge.FailureCode + " " + charge.FailureMessage); } return(result); }
public void Create(StripeOrderCharge stripeCharge) { _repository.Insert(stripeCharge); }