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.

  1. Az összes customers listázása.
  2. Szűrje ki az ügyfeleket a email cím használatával
  3. Az összes előfizetés lekérése a customer paraméter használatával.
  4. 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.

  1. Győződjön meg arról, hogy e-mail címenként csak egy felhasználó jön létre.
  2. 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.