A Stripe-nek nincs közvetlen módja erre, de van rá mód.
Egy korábbi cikkben megvitattuk a Stripe-előfizetés létrehozását egy ReactJS alkalmazásban.
A csíkos előfizetés létrehozása után meg szeretné kapni a felhasználó előfizetési állapotát az e-mail címével, igaz?
Sajnos a Stripe-nek nincs egyszerű módja a felhasználók előfizetési állapotának e-mailben történő megszerzésére
Ennek oka az, hogy lehetséges több ügyfelet létrehozni ugyanazzal az e-mail címmel, ami bonyolulttá teszi az előfizetések ellenőrzését az e-mail cím használatával.
Régi megoldás
Van néhány régimódi megoldás erre a problémára. A legközelebbi, amit találtam, "itt".
Amit csinál, az.
- Az összes
customers
listázása. - Szűrje ki az ügyfeleket a
email
cím használatával - Az összes előfizetés lekérése a
customer
paraméter használatával. - Szűrje ki a
subscriptions
.
Nem olyan egyértelmű, igaz?
Hadd mutassak egy jobb utat.
Lehetséges megoldás
A probléma megkerülésének egyik érdekes módja a stripe által biztosított metadata
mező használata.
A metadata
mezőben bármit eltárolhat, és később lekérdezheti.
Ezt kihasználjuk.
Mit kell tenni?
Ennek megkerüléséhez két dolgot tehetünk.
- Győződjön meg arról, hogy e-mail címenként csak egy felhasználó jön létre.
- Tároljon néhány metaadatot
Térjünk rá a kódra.
Győződjön meg arról, hogy egy e-mailben csak egy ügyfél jön létre.
Ügyfél létrehozása előtt a következő ellenőrzést végezhetjük el.
let customer = await this.stripe.customers.search({ query: `email:'${createSubscriptionDto.email}'`, }); if (customer.data.length == 0) { console.log(' No Custoemr is found. Let us create one!'); customer = await this.stripe.customers.create({ name: createSubscriptionDto.name, email: createSubscriptionDto.email, payment_method: createSubscriptionDto.paymentMethod, invoice_settings: { default_payment_method: createSubscriptionDto.paymentMethod, }, }); }
Hozzon létre egy előfizetést, és tárolja a metaadatokat
A következő lépésben el kell tárolnunk az ügyfél e-mail címét az előfizetés metaadatai között.
const subscription = await this.stripe.subscriptions.create({ customer: customer.id, items: [{ price: priceId }], payment_settings: { payment_method_options: { card: { request_three_d_secure: 'any', }, }, payment_method_types: ['card'], save_default_payment_method: 'on_subscription', }, expand: ['latest_invoice.payment_intent'], metadata: { customerEmail: createSubscriptionDto.email }, // NOTICE HERE! });
Figyelje meg a metadata
mezőt. Az ügyfél e-mail-címét customerEmail
mezőként tároljuk.
Végül szerezze be az előfizetést
Most jön a szórakoztató rész. Keressük meg az előfizetést a metaadat mező segítségével.
const subscription = await this.stripe.subscriptions.search({ query: `status:'active' AND metadata['customerEmail']:'${email}'`, });
Ez a lekérdezés érvényes előfizetési listát ad vissza az adott e-mail címhez.
Utolsó szavak
Ez nem a legtisztább megoldás, de az egyik legjobb, mert szépen megoldja a problémát.
Hacsak a csík nem nyújt nekünk egy egyszerűbb módot a dolgok elvégzésére, ezt kapjuk.
Remélem ma tanultál valami újat. Mesés napom van!
Hozzám fordulhat a LinkedIn-en vagy a Webhelyemen.