【问题标题】:How to prevent stripe from creating new user when receiving a payment?如何防止条纹在收到付款时创建新用户?
【发布时间】:2022-11-28 16:09:49
【问题描述】:

我从条纹开始,仍处于测试模式。 我使用 Laravel 9 + 收银台和 vuejs 我还安装了 vue-stripe 并创建了一个视图来测试结帐功能。 这是我的观点

<template>
  <div class="text-xl sass-editor-1 text-center">
    <h1 class="text-2xl">Stripe Payment Gateway integration</h1>
    <div class="container" v-if="payId">

      <stripe-checkout 
      ref="checkoutRef" 
      :pk="publishableKey" 
      :sessionId="payId"
      :customerEmail="customerEmail" />
      <button class="border-2 rounded-lg bg-green-800 text-white  p-3 mt-4" @click="submit">Pay Now!</button>
    </div>
  {{customerEmail}}

    <div v-if="subscribeId" class="container">
      <stripe-checkout 
      ref="subRef" 
      :pk="publishableKey" 
      :sessionId="subscribeId"
      :customerEmail="customerEmail" />
      <button class="border-2 rounded-lg bg-green-800 text-white  p-3 mt-4" @click="submitSub">Subscribe Now!</button>

    </div>

  </div>
</template>

<script>
import { ref, onMounted } from 'vue';
import { StripeCheckout , Stripe} from '@vue-stripe/vue-stripe';
import axios from "../axios"
import store from "../store"

export default {
  components: {
    StripeCheckout,
  },
  data() {
    return {
      publishableKey: 'pk_test_51M6ZtzI....................XgAyUVjlwG6MFos0AaqaQYJOf2YC3a6oWlZqMjFtTZj00Tue51qVs',
      payId: null,
      subscribeId: null,
      customerEmail: store.state.user.email
    }
  },
  methods: {
    getSession() {
      axios.get('api/getSession')
        .then(res => {
          console.log(res);
          this.payId = res.data.oneTime.id;
          this.subscribeId = res.data.sub.id;
        })
        .catch(err => {
          console.log(err);
        })
    },

    submit() {
      this.$refs.checkoutRef.redirectToCheckout();
    },
    submitSub() {
      this.$refs.subRef.redirectToCheckout();
    }
  },
  mounted() {
    this.getSession();
  
  }

}
</script>

这是在后端返回 sessionId 的 StripeController

<?php

namespace App\Http\Controllers;


use Stripe\StripeClient;
use Illuminate\Http\Request;
use Laravel\Cashier\Cashier;

class StripeController extends Controller
{
    public function getSession()
    {
        $stripe = new StripeClient(env('STRIPE_SECRET'));
        $user=auth()->user();
    
        $stripeCustomer = $user->createOrGetStripeCustomer(
            ['name'=>$user->name,'email'=>$user->email]); 

        $checkout = $stripe->checkout->sessions->create(
            [ 
                'success_url' => 'https://yahoo.com',
                'cancel_url' => 'https://google.com',
                'line_items' =>
                [
                    [
                        'price_data' =>
                        [
                            'currency' => 'eur',
                            'unit_amount' => 500,
                            'product_data' =>
                            [
                                'name' => 'Example Stripe Checkout'
                            ],
                        ],
                        'quantity' => 1,

                    ],
                ],

                'mode' => 'payment',
            ]
        );

        $sub = $stripe->checkout->sessions->create(
            [
                'success_url' => 'https://denentzat.fr',
                'cancel_url' => 'https://google.com',
                'line_items' =>
                [
                    [

                        'price'=>'price_1M84UNIWDjpHNQK1FXOj1k01',
                        'quantity' => 1,

                    ],
                ],

                'mode' => 'subscription',
            ]
        );
        return  ['oneTime'=>$checkout, 'sub'=>$sub];
    }

    public function webhook(Request $request){
        \Log::info($request->data);
        
        return response()->json(['status'=>'success']);
    }
}

付款在两种情况下(支付或订阅)完成。 然而,当我进入仪表板的客户选项卡时,我可以看到有时(我找不到原因)条带创建来宾用户或普通用户并且 最终,可能会有多个用户使用同一个电子邮件。如何防止这种情况? 我希望在将用户电子邮件传递给表单(Stripe-checkout 组件)时,这将预填充电子邮件字段,但它并没有发生。 谢谢你的帮助。

【问题讨论】:

    标签: laravel vue.js stripe-payments laravel-cashier


    【解决方案1】:

    您可以使用他们的电子邮件预先创建客户,然后在创建结帐会话时传入客户 ID。 (请参阅 Stripe Doc 上的 Existing Customer)。

    【讨论】:

      猜你喜欢
      • 2021-02-27
      • 2023-02-03
      • 2021-09-27
      • 2021-02-23
      • 2020-12-01
      • 2017-05-20
      • 2018-11-17
      • 2015-01-03
      • 2019-02-25
      相关资源
      最近更新 更多