# Stripe / payments
## Inledning
Stripe
Använda subscriptions (per månad/år)
Produkter med schedules går inte att avbryta, så om en användare köper access för ett år så kan de inte få pengarna tillbaka
Det går att konfigurera trial-period
Stripe hostar customer portal
### Sätta upp hos Stripe
* Produkt och priser
* Customer portal med vår branding
### Vi behöver hantera
* Generera unika länkar till customer portal-sessions
* Villkora access till Livestream Insights baserat på paid_until-datum (+ grace period)
* Ny service som ansvarar för att kontrollera behörighet
* Inte låta användare med aktiva prenumerationer ta bort sitt konto förrän de avbrutit eller avslutat sin prenumeration
* Webhook som tar emot events från Stripe
* Mailutskick om betalning misslyckas för en subscription
* Hantera access vid ny eller avbruten prenumeration (sätta/uppdatera paid_until-datum)
* Bara verifierade epostadresser
Behövs subsciption schedule för årsprenumeration?
* Eller om vi vill ge rabatt de fösta X månaderna
* Eller om prenumerationen ska starta i framtiden
## Db
### Products
```json
{
_id: "bson_id",
external_id: "prod_H1Nl2JMpwPur6w",
external_price_id: "price_H1NlVtpo6ubk0m",
name: "Premium",
description: "Get all the stuff",
access: ["Insights", "Analytics"]
}
```
### Subscriptions
```json
{
_id: "bson_id",
external_customer_id: "cus_HAwfE7FhKgxbJ6",
company_id: "bson_id",
product_id: "bson_id",
external_subscription_id: "sub_HAwfLuEoLetEJ3"
status: Pending | Active | Canceled,
from: "2021-01-01",
to: "2021-02-01",
// Bara om vi inte gör nya produkter
external_price_id: "price_H1NlVtpo6ubk0m",
created: "2021-02-21",
updated: "2021-02-21"
}
```
### Eventlog
```json
{
date: "2021-02-01",
info: "Payment failed becouse of insufficient funds" | "Success",
invoice_id: "in_EmGqfJMYy3Nt9M",
subscription_id: null | "bson_id",
external_customer_id: "cus_HAwfE7FhKgxbJ6",
company_id: "bson_id",
product_id: "bson_id",
}
```
### Company
```json
{
...
"Name": "testuser1234company",
"Slug": "testuser1234company",
...
"Verified": true,
"Access": ["Insights", "Analytics"]
}
```
## 3D Secure
Alla betalningar med kort inom EU kräver detta från och med 2021. Detta innbär troligen att alla subscriptions med kort kommer kräva att kunden måste autentisera sig innan varje förnyelse. Kan lösas med email och webhooks.
## Use Cases
Inledningsvis 1 produkt (Livestream Insights)
Vilka betalningsmodeller?
* Bara prenumerationer
* Köpa 12 månader (som sen inte automatiskt ska förnyas)
Vad ska vi ha för grace periods om betalning misslyckas? Ska användaren t.ex. få fortsätta använda en tjänst som har gått ut i X dagar innan vi börjar begränsa åtkomst?
Hur hanterar vi prisändringar? Om en kund har en aktiv prenumeration som startades med pris X, ska den då få fortsätta med det priset så länge prenumerationen är aktiv medan nya prenumerationer skapade efter prishöjningen debiteras pris Y?
## Att utreda vidare
Hur genererar vi unika länkar till användarnas customer portals?
- Det CustomerId som genereras för varje kund hos Stripe måste sparas hos oss på varje user/company. Det används för att skapa länkar via Stripes klient.
Vilka secrets ansvarar vi för och finns det andra potentiella säkerhetsproblem?
- Apikey är det enda jag kan hitta. Sen har vi ett gäng idn som är kopplade till users som ju inte är bra om de kommer ut. Står inte så mycket om vad man kan göra med dem.
Vad loggar Stripe och vad vill vi själva logga i felsökningssyfte?
- Alla subscriptions verkar loggas i dashboarden för
Kan Stripe skicka mail om misslyckade betalningar?
- https://dashboard.stripe.com/settings/billing/automatic.

- Kan även skicka kvitto för varje betalning.
Elements eller Checkout session?
- Checkout!
Hur ska moms hanteras?
- https://stripe.com/docs/billing/taxes/tax-rates. Nån som förstår ekonomi får gärna läsa igenom det där.
Inom Europa betalar och deklarerar företagen själva moms. För USA verkar det mer komplicerat. Vi inväntar mer information från advokatfirman.
Hur ska QA hanteras för betalningar och prenumerationer
- Betalningar med kort kan testas med Stripes testkort, https://stripe.com/docs/billing/subscriptions/fixed-price#test.
- Tester för återkommande betalningar kan simuleras med stripes cli.
- https://stripe.com/docs/testing
- https://stripe.com/docs/billing/testing
Hur ska vi hantera trials
- https://stripe.com/docs/billing/subscriptions/trials
Kan vi konfigurera olika alternativ för olika company members Customer Portal?
- Önskvärt vore att Company Owner är den enda som kan redigera betalningsinformation men att övriga company members kan se information, framförallt billing history och kvitton.
Det går inte att skapa olika typer av Customer Portal Sessions med olika nivåer av access. Alla Customer Portal Sessions kommer vara likadana.
Att diskutera: Ska bara CompanyOwner får gå till Stripe Checkout (för att köpa) och Stripe Customer Portal (för att redigera betalningsinformation, se kvitton, avbryta prenumerationer) eller ska alla members i ett Company har denna access?