Пример #1
0
        public async Task <IAsyncResult> Handle()
        {
            Event stripeEvent;

            var secret = _settings.WebhookSecret;

            using (var stream = new StreamReader(HttpContext.Request.Body))
            {
                var json = await stream.ReadToEndAsync();

                stripeEvent = EventUtility.ConstructEvent(json, Request.Headers["Stripe-Signature"], secret, throwOnApiVersionMismatch: false);

                if (stripeEvent == null)
                {
                    throw new InvalidOperationException("Unable to extract event.");
                }
            }

            try
            {
                if (stripeEvent.Type == Events.CheckoutSessionCompleted)
                {
                    var data = StripeUtility.ParseStripePayload <Session>(stripeEvent);
                    _logger.LogInformation("Webhook: Checkout Session completed for Session {CartSession}", data.Id);
                    _backgroundJobQueue.Enqueue(() => _checkoutSessionCompleted.HandleWebhookEvent(data.Id));
                }
                else if (stripeEvent.Type == Events.CustomerSubscriptionCreated || stripeEvent.Type == Events.CustomerSubscriptionUpdated || stripeEvent.Type == Events.CustomerSubscriptionDeleted)
                {
                    var data = StripeUtility.ParseStripePayload <Subscription>(stripeEvent);
                    _logger.LogInformation("Webhook: Subscription {SubscriptionId} changed for customer {CustomerId}", data.Id, data.CustomerId);
                    _backgroundJobQueue.Enqueue(() => _subscriptionChanged.HandleWebhookEvent(data.Id));
                }
                else if (stripeEvent.Type == Events.InvoiceFinalized || stripeEvent.Type == Events.InvoicePaymentSucceeded)
                {
                    var data = StripeUtility.ParseStripePayload <Invoice>(stripeEvent);
                    _logger.LogInformation("Webhook: Invoice {InvoiceId} changed for customer {CustomerId} with subscription {SubscriptionId}", data.Id, data.CustomerId, data.SubscriptionId);
                    _backgroundJobQueue.Enqueue(() => _invoiceChanged.HandleWebhookEvent(data.SubscriptionId, data.Id));
                }

                return(Ok() as IAsyncResult);
            }
            catch (StripeException e)
            {
                _logger.LogError(e, "StripeException occurred");
                // return StatusCode(500) as IAsyncResult;
                throw;
            }
            catch (InvalidOperationException e)
            {
                _logger.LogError(e, "InvalidOperationException occurred");
                // return StatusCode(500) as IAsyncResult;
                throw;
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Exception occurred");
                // return StatusCode(500) as IAsyncResult;
                throw;
            }
        }
Пример #2
0
        public IPaymentResponse Charge(PaymentRequest request)
        {
            request.Additional.TryGetValue("quantity", out var quantity);
            request.Additional.TryGetValue("paymentMethodType", out var paymentMethodType);
            string cancelUrl  = string.IsNullOrEmpty(request.CancelUrl) ? Setting.CancelUrl : request.CancelUrl;
            string successUrl = string.IsNullOrEmpty(request.ReturnUrl) ? Setting.SuccessUrl : request.ReturnUrl;

            var lineItems = new List <SessionLineItemOptions>
            {
                new SessionLineItemOptions {
                    Name        = request.Name,
                    Description = request.Description,
                    Amount      = long.Parse(request.TotalAmount.ToString()),
                    Currency    = request.Currency,
                    Quantity    = long.Parse(quantity.ToString())
                }
            };

            var paymentMethodTypesList = new List <string>();

            if (paymentMethodType is object[])
            {
                var paymentMethodTypeArray = Array.ConvertAll((object[])paymentMethodType, x => x.ToString());
                paymentMethodTypesList.AddRange(paymentMethodTypeArray);
            }
            else if (paymentMethodType is object)
            {
                paymentMethodTypesList.Add((string)paymentMethodType);
            }

            var options = new SessionCreateOptions
            {
                SuccessUrl         = successUrl,
                CancelUrl          = cancelUrl,
                LineItems          = lineItems,
                PaymentMethodTypes = paymentMethodTypesList,
                ClientReferenceId  = request.Id.ToString()
            };

            var sessionId = StripeUtility.CreateSession(options, Setting.Secretkey).Result;
            var response  = new HiddenFormResponse
            {
                paymemtMethodReferenceId = request.Id.ToString()
            };

            response.html = GenerateHtml(Setting.Publishablekey, sessionId);
            return(response);
        }
        public IPaymentResponse Charge(PaymentRequest request)
        {
            request.Additional.TryGetValue("quantity", out var quantity);
            request.Additional.TryGetValue("cancelUrl", out var cancelUrl);
            request.Additional.TryGetValue("successUrl", out var successUrl);
            request.Additional.TryGetValue("paymentMethodType", out var paymentMethodType);

            var lineItems = new List <SessionLineItemOptions>
            {
                new SessionLineItemOptions {
                    Name        = request.Name,
                    Description = request.Description,
                    Amount      = long.Parse(request.TotalAmount.ToString()),
                    Currency    = request.Currency,
                    Quantity    = long.Parse(quantity.ToString())
                }
            };

            var paymentMethodTypesList = new List <string>();

            if (paymentMethodType is object[])
            {
                var paymentMethodTypeArray = Array.ConvertAll((object[])paymentMethodType, x => x.ToString());
                paymentMethodTypesList.AddRange(paymentMethodTypeArray);
            }
            else if (paymentMethodType is object)
            {
                paymentMethodTypesList.Add((string)paymentMethodType);
            }

            var options = new SessionCreateOptions
            {
                SuccessUrl         = (string)successUrl,
                CancelUrl          = (string)cancelUrl,
                LineItems          = lineItems,
                PaymentMethodTypes = paymentMethodTypesList
            };

            var sessionId = StripeUtility.CreateSession(options, Setting.Secretkey).Result;
            var response  = new HiddenFormResponse
            {
                paymemtMethodReferenceId = sessionId
            };

            response.setFieldValues("publishableKey", Setting.Publishablekey);
            return(response);
        }