laravel - Subscriptions 和 subscription_item 数据库使用 Stripe 结帐为空
问题描述
我尝试使用 Stripe 创建一个每月订阅的网站。
我有一个定价页面,当我选择产品时,我使用 JS 创建了一个结帐会话,当我付款时,我成功获得了付款和一切,但我的订阅数据库是空的。默认的收银员 webhook 什么都不做,但他在我的条带 cli 上被成功调用,我也尝试创建一个 webhook,但我什么也没得到,我在条带 cli 上每次都收到错误 500。
你有想法吗 ?
这是我的 JS
<script src="https://js.stripe.com/v3/"></script>
<script defer>
$("#form").submit(function(e){
e.preventDefault();
});
var handleResult = function(result) {
if (result.error) {
showErrorMessage(result.error.message);
}
};
function subscribe(offer)
{
fetch("{{ route('subscription_setup') }}", {
method: "GET",
headers: {
"Content-Type": "application/json",
}
})
.then((result) => result.json())
.then(function(result) {
var publishableKey = result.publishableKey;
var stripe = Stripe(publishableKey);
var createCheckoutSession = function(offer) {
return fetch("{{ route('subscription_create_checkout_session') }}", {
method: "POST",
headers: {
"Content-Type": "application/json",
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
body: JSON.stringify({
offer: offer
})
}).then(function(result) {
return result.json();
});
}
createCheckoutSession(offer).then(function(data) {
stripe.redirectToCheckout({
sessionId: data.sessionId
}).then(handleResult);
});
})
}
</script>
这是我的PHP:
<?php
namespace App\Http\Controllers;
use Exception;
use Illuminate\Http\Request;
use \Stripe\Stripe;
use Illuminate\Support\Facades\Auth;
use Laravel\Cashier\Cashier;
use \Stripe\Checkout\Session;
class SubscriptionController extends Controller
{
public function __construct() {
Stripe::setApiKey(env('STRIPE_SECRET'));
}
public function index()
{
return view('subscription/index');
}
public function create_checkout_session(Request $request)
{
$user = Auth::user();
// User is not in stripe database
if(empty($user->stripe_id))
{
$stripe_user = $user->createAsStripeCustomer();
}
// User already in stripe database
else
{
$stripe_user = Cashier::findBillable($user->stripe_id);
}
// After retrieve the stripe user
$offer = $request->post('offer');
if($offer == 'football')
{
$price = 'price_1I4z8kDdfEiamf5bMiTElVAM';
}
else
{
return response()->json(['error' => 'Vous n\'avez pas sélectionné une offre valide']);
}
$checkout_session = Session::create([
'payment_method_types' => ['card'],
'line_items' => [
[
'price' => $price,
'quantity' => 1,
],
],
'mode' => 'subscription',
'success_url' => url('/'),
'cancel_url' => url('/subscription'),
'customer' => $stripe_user['stripe_id']
]);
return response()->json(['sessionId' => $checkout_session['id']]);
}
public function setup()
{
return response()->json([
'publishableKey' => env('STRIPE_KEY')
]);
}
}
我愿意接受每一个建议,非常感谢。
编辑 :
我的自定义 webhook
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Laravel\Cashier\Http\Controllers\WebhookController as CashierController;
use \Stripe\Subscription;
use Illuminate\Support\Facades\DB;
class WebhookController extends CashierController
{
/**
* Handle invoice payment succeeded.
*
* @param array $payload
* @return \Symfony\Component\HttpFoundation\Response
*/
public function handleInvoicePaymentSucceeded($payload)
{
$session = $payload['data']['object'];
$user = Auth::user();
// $plan = Subscription::retrieve($session['subscription']['items']['data']['price']['id']);
DB::transaction(function () use ($session, $user) {
$user->update(['stripe_id' => $session['customer']]);
$user->subscriptions()->create([
'name' => 'default',
'stripe_id' => $session['subscription'],
'stripe_status' => 'active',
'stripe_plan' => 'price_1I4z8kDdfEiamf5bMiTElVAM',
'quantity' => 1,
'trial_ends_at' => null,
'ends_at' => now()->addDays(30),
]);
});
return $this->successMethod();
}
}
我的验证csrftoken.php
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'stripe/*',
];
}
我的路线:
Route::post('/stripe/webhook', [WebhookController::class, 'handleWebhook']);
当我订阅产品时,我的条带 cli 出现错误 500。
编辑:我终于使用了本教程https://weeklyhow.com/create-website-subscription-with-laravel-cashier/#:~:text=Laravel%20cashier%20is%20a%20package,and%20even%20generate%20invoice %20PDF。并且不再使用条带结帐。
解决方案
推荐阅读
- python - 如何制作带有相关子项的 Pandas 计数数据透视表?
- javascript - 根据 Object 值对 Observable 数组进行排序
- java - 期间发生内部错误:“正在启动
"。ATTR_EXCLUDE_TEST_CODE - docker - WixToolset 不能安装在具有 windows/servercore 基础映像的 windows 容器中
- oracle-data-integrator - 有没有一种方法可以在 ODI 元数据数据库中的某处找到数据存储对象上的强制执行上下文?
- spring-boot - 如何修复 XXX:jar:1.0 的 POM 丢失,没有可用的依赖信息
- tomcat - 如何在servlet容器(tomcat)中运行wiremock
- hyperledger-fabric - 生产模式下的 Hyperledger Fabric SDK 连接配置文件配置
- python - 在 Alexa Skills Kit 中了解插槽并获取其值
- javascript - 我如何检查字段是否填充了科尔多瓦/角度