【发布时间】: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