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; } }
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); }