如何防止stripe在收到付款时创建新用户?



我从条纹开始,仍然处于测试模式。我用的是Laravel 9 +收银员和收银员我还安装了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>

这里是stripeccontroller返回后端sessionId

<?php
namespace AppHttpControllers;

use StripeStripeClient;
use IlluminateHttpRequest;
use LaravelCashierCashier;
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']);
}
}

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

您可以使用他们的电子邮件预先创建一个客户,然后在创建Checkout会话时传入客户Id。(见现有客户的条纹文件)。

最新更新