From 8fbea6a90a1a7a3229c9f26a9bcb3eb9247519d1 Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Tue, 12 Oct 2021 12:48:34 +0100 Subject: [PATCH] Doc: Added Stripe doc --- packages/server/readme/stripe.md | 25 ++++++++++++++++++ packages/server/src/routes/index/stripe.ts | 30 +++------------------- 2 files changed, 28 insertions(+), 27 deletions(-) create mode 100644 packages/server/readme/stripe.md diff --git a/packages/server/readme/stripe.md b/packages/server/readme/stripe.md new file mode 100644 index 0000000000..78289e2639 --- /dev/null +++ b/packages/server/readme/stripe.md @@ -0,0 +1,25 @@ +# How to test the complete workflow locally + +- In website/build.ts, set the env to "dev", then build the website - `npm run watchWebsite` +- Start the Stripe CLI tool: `npm run stripeListen` +- Copy the webhook secret, and paste it in joplin-credentials/server.env (under STRIPE_WEBHOOK_SECRET) +- Start the local Joplin Server, `npm run start-dev`, running under http://joplincloud.local:22300 +- Start the workflow from http://localhost:8077/plans/ +- The local website often is not configured to send email, but you can see them in the database, in the "emails" table. + +# Simplified workflow + +To test without running the main website, use http://joplincloud.local:22300/stripe/checkoutTest + +# Stripe config + +- The public config is under packages/server/stripeConfig.json +- The private config is in the server .env file + +# Failed Stripe cli login + +If the tool show this error, with code "api_key_expired": + +> FATAL Error while authenticating with Stripe: Authorization failed + +Need to logout and login again to refresh the CLI token - `stripe logout && stripe login` \ No newline at end of file diff --git a/packages/server/src/routes/index/stripe.ts b/packages/server/src/routes/index/stripe.ts index 5834ff5569..8e86981377 100644 --- a/packages/server/src/routes/index/stripe.ts +++ b/packages/server/src/routes/index/stripe.ts @@ -1,6 +1,6 @@ import { SubPath } from '../../utils/routeUtils'; import Router from '../../utils/Router'; -import { RouteType } from '../../utils/types'; +import { Env, RouteType } from '../../utils/types'; import { AppContext } from '../../utils/types'; import { bodyFields } from '../../utils/requestUtils'; import globalConfig from '../../config'; @@ -198,32 +198,6 @@ export const postHandlers: PostHandlers = { return { sessionId: session.id }; }, - // # How to test the complete workflow locally - // - // - In website/build.ts, set the env to "dev", then build the website - `npm run watchWebsite` - // - Start the Stripe CLI tool: `stripe listen --forward-to http://joplincloud.local:22300/stripe/webhook` - // - Copy the webhook secret, and paste it in joplin-credentials/server.env (under STRIPE_WEBHOOK_SECRET) - // - Start the local Joplin Server, `npm run start-dev`, running under http://joplincloud.local:22300 - // - Start the workflow from http://localhost:8077/plans/ - // - The local website often is not configured to send email, but you can see them in the database, in the "emails" table. - // - // # Simplified workflow - // - // To test without running the main website, use http://joplincloud.local:22300/stripe/checkoutTest - // - // # Stripe config - // - // - The public config is under packages/server/stripeConfig.json - // - The private config is in the server .env file - // - // # Failed Stripe cli login - // - // If the tool show this error, with code "api_key_expired": - // - // > FATAL Error while authenticating with Stripe: Authorization failed - // - // Need to logout and login again to refresh the CLI token - `stripe logout && stripe login` - webhook: async (stripe: Stripe, _path: SubPath, ctx: AppContext, event: Stripe.Event = null, logErrors: boolean = true) => { event = event ? event : await stripeEvent(stripe, ctx.req); @@ -425,6 +399,8 @@ const getHandlers: Record = { }, checkoutTest: async (_stripe: Stripe, _path: SubPath, ctx: AppContext) => { + if (globalConfig().env === Env.Prod) throw new ErrorForbidden(); + const basicPrice = findPrice(stripeConfig().prices, { accountType: 1, period: PricePeriod.Monthly }); const proPrice = findPrice(stripeConfig().prices, { accountType: 2, period: PricePeriod.Monthly });