コード例 #1
0
        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);
        }
コード例 #2
0
 public void Create(StripeOrderCharge stripeCharge)
 {
     _repository.Insert(stripeCharge);
 }