You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel(Wave框架):将Paddle Webhook取消生效日期存入数据库

问题:Wave集成Paddle后,订阅取消后需保留权限至付费周期结束

背景

我用Wave(快速搭建SaaS的工具包)开发项目,已配置Paddle,但默认用户取消订阅后会立即失去权限,无法保留至付费周期结束。计划添加该功能,从Paddle文档得知Webhook payload对应字段为cancellation_effective_date。现有cancelSubscription函数,尝试两种方式为该字段赋值均报错“变量未定义”,寻求解决办法。

现有cancelSubscription函数代码

private function cancelSubscription($subscription_id){
    $subscription = PaddleSubscription::where('subscription_id', $subscription_id)->first();
    $subscription->cancelled_at = Carbon::now();
    $subscription->status = 'cancelled';
    $subscription->save();
}

尝试过的赋值代码(均报错“变量未定义”)

$subscription->cancellation_effective_date = $request->cancellation_effective_date;
$subscription->cancellation_effective_date = $cancellation_effective_date;

Paddle示例Webhook Payload

Array
(
    [alert_id] => 1282370466
    [alert_name] => subscription_cancelled
    [cancellation_effective_date] => 2023-04-10
    [checkout_id] => 9-d11a2ef3289d6c8-ccdeb4a3ad
    [currency] => EUR
    [custom_data] => custom_data
    [email] => irunolfsdottir@example.net
    [event_time] => 2023-04-05 20:13:54
    [linked_subscriptions] => 7, 2, 7
    [marketing_consent] => 1
    [passthrough] => Example String
    [quantity] => 18
    [status] => deleted
    [subscription_id] => 6
    [subscription_plan_id] => 8
    [unit_price] => unit_price
    [user_id] => 1
)

解决方案

1. 传递Webhook Payload到函数

当前函数仅接收$subscription_id,无法获取Paddle Webhook的完整数据。修改函数定义,添加$payload参数,从payload中提取字段值:

private function cancelSubscription($subscription_id, $payload){
    $subscription = PaddleSubscription::where('subscription_id', $subscription_id)->first();
    $subscription->cancelled_at = Carbon::now();
    $subscription->status = 'cancelled';
    // 从payload中获取生效日期并赋值
    $subscription->cancellation_effective_date = $payload['cancellation_effective_date'];
    $subscription->save();
}

同时,在调用该函数的Webhook处理代码中,把Paddle发送的完整payload传进来。

2. 新增数据库字段

确认paddle_subscriptions表存在cancellation_effective_date字段,若不存在,生成迁移文件添加:

public function up()
{
    Schema::table('paddle_subscriptions', function (Blueprint $table) {
        $table->date('cancellation_effective_date')->nullable();
    });
}

执行迁移:php artisan migrate

3. 修改权限验证逻辑

调整权限判断逻辑,不再仅通过status判定权限,而是结合cancellation_effective_date:

// 示例:在权限检查处添加判断
if ($subscription->status === 'cancelled' && Carbon::now()->greaterThan($subscription->cancellation_effective_date)) {
    // 权限已过期,拒绝访问
    abort(403);
}
// 否则允许访问

内容的提问来源于stack exchange,提问作者neonfontana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:57:41