From 920ec185b23cfef3cc846d53a0265bf2611d2a03 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 13 Mar 2024 18:44:50 +0100 Subject: [PATCH] fix: confirm payments --- src/lib/stores/stripe.ts | 16 ++++++++++------ src/routes/console/account/payments/+page.svelte | 13 +++++++++++++ .../console/account/payments/paymentModal.svelte | 3 ++- .../billing/replaceCard.svelte | 2 +- .../billing/retryPaymentModal.svelte | 2 +- .../billing/wizard/paymentDetails.svelte | 3 ++- .../paymentDetails.svelte | 3 ++- 7 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/lib/stores/stripe.ts b/src/lib/stores/stripe.ts index 959b46ffc..93b4576ae 100644 --- a/src/lib/stores/stripe.ts +++ b/src/lib/stores/stripe.ts @@ -51,7 +51,7 @@ export async function unmountPaymentElement() { elements = null; } -export async function submitStripeCard(name: string, urlRoute?: string) { +export async function submitStripeCard(name: string, organizationId?: string) { try { // If a payment method was created during initialization, use it, otherwise create a new one if (!paymentMethod) { @@ -62,16 +62,20 @@ export async function submitStripeCard(name: string, urlRoute?: string) { // // Element needs to be submitted before confirming the setup intent elements.submit(); - const baseUrl = 'https://cloud.appwrite.io/console/'; + const baseUrl = 'https://cloud.appwrite.io/console'; + const accountUrl = `${baseUrl}/account/payments?clientSecret=${clientSecret}`; + const orgUrl = `${baseUrl}/organization-${organizationId}/billing?clientSecret=${clientSecret}`; + + const returnUrl = new URL(organizationId ? orgUrl : accountUrl); + + returnUrl.searchParams.append('clientSecret', clientSecret); + returnUrl.searchParams.append('paymentMethodId', paymentMethod.$id); const { setupIntent, error } = await get(stripe).confirmSetup({ elements, clientSecret, confirmParams: { - return_url: `${baseUrl}${ - urlRoute ?? - `organization-${get(organization).$id}/billing?clientSecret=${clientSecret}` - }`, + return_url: returnUrl.toString(), payment_method_data: { billing_details: { name diff --git a/src/routes/console/account/payments/+page.svelte b/src/routes/console/account/payments/+page.svelte index 8cca7e6f8..f4a654ac8 100644 --- a/src/routes/console/account/payments/+page.svelte +++ b/src/routes/console/account/payments/+page.svelte @@ -3,8 +3,21 @@ import { Container } from '$lib/layout'; import PaymentMethods from './paymentMethods.svelte'; import BillingAddress from './billingAddress.svelte'; + import { onMount } from 'svelte'; + import { page } from '$app/stores'; + import { confirmPayment } from '$lib/stores/stripe'; + import { user } from '$lib/stores/user'; let showPayment = false; + user; + + onMount(async () => { + if ($page.url.searchParams.has('clientSecret')) { + const clientSecret = $page.url.searchParams.get('clientSecret'); + const paymentMethodId = $page.url.searchParams.get('paymentMethodId'); + await confirmPayment('', clientSecret, paymentMethodId); + } + }); diff --git a/src/routes/console/account/payments/paymentModal.svelte b/src/routes/console/account/payments/paymentModal.svelte index dfd8b3caf..2ac93e0b2 100644 --- a/src/routes/console/account/payments/paymentModal.svelte +++ b/src/routes/console/account/payments/paymentModal.svelte @@ -6,6 +6,7 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { addNotification } from '$lib/stores/notifications'; + import { page } from '$app/stores'; export let show = false; @@ -20,7 +21,7 @@ async function handleSubmit() { try { - const card = await submitStripeCard(name, '/account/payments'); + const card = await submitStripeCard(name, $page?.params?.organization ?? null); invalidate(Dependencies.PAYMENT_METHODS); dispatch('submit', card); show = false; diff --git a/src/routes/console/organization-[organization]/billing/replaceCard.svelte b/src/routes/console/organization-[organization]/billing/replaceCard.svelte index e25348990..639964119 100644 --- a/src/routes/console/organization-[organization]/billing/replaceCard.svelte +++ b/src/routes/console/organization-[organization]/billing/replaceCard.svelte @@ -33,7 +33,7 @@ async function handleSubmit() { try { if (!selectedPaymentMethodId) { - const method = await submitStripeCard(name); + const method = await submitStripeCard(name, $organization.$id); selectedPaymentMethodId = method.$id; } isBackup diff --git a/src/routes/console/organization-[organization]/billing/retryPaymentModal.svelte b/src/routes/console/organization-[organization]/billing/retryPaymentModal.svelte index 828782773..e0f034029 100644 --- a/src/routes/console/organization-[organization]/billing/retryPaymentModal.svelte +++ b/src/routes/console/organization-[organization]/billing/retryPaymentModal.svelte @@ -39,7 +39,7 @@ try { if (paymentMethodId === null) { try { - const method = await submitStripeCard(name); + const method = await submitStripeCard(name, $organization.$id); const card = await sdk.forConsole.billing.getPaymentMethod(method.$id); if (card?.last4) { paymentMethodId = card.$id; diff --git a/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte b/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte index b4f54264d..f9d34c28e 100644 --- a/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte +++ b/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte @@ -9,6 +9,7 @@ import { sdk } from '$lib/stores/sdk'; import { PaymentBoxes } from '$lib/components/billing'; import { addCreditWizardStore } from '../store'; + import { organization } from '$lib/stores/organization'; let methods: PaymentList; let name: string; @@ -21,7 +22,7 @@ async function handleSubmit() { try { - const method = await submitStripeCard(name); + const method = await submitStripeCard(name, $organization.$id); $addCreditWizardStore.paymentMethodId = method.$id; invalidate(Dependencies.PAYMENT_METHODS); } catch (e) { diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/paymentDetails.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/paymentDetails.svelte index b82943719..f03feecca 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/paymentDetails.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/paymentDetails.svelte @@ -13,6 +13,7 @@ import { symmetricDifference } from '$lib/helpers/array'; import { showUsageRatesModal } from '$lib/stores/billing'; import { PaymentBoxes } from '$lib/components/billing'; + import { page } from '$app/stores'; let methods: PaymentList; let filteredMethods: PaymentMethodData[]; @@ -48,7 +49,7 @@ } } else { try { - await submitStripeCard(name); + await submitStripeCard(name, $page?.params?.organization ?? null); const latestMethods = await sdk.forConsole.billing.listPaymentMethods(); const paymentMethod = symmetricDifference( methods.paymentMethods,