首页 > 解决方案 > 创建订阅时出现条带问题:“无法确定要请求的 URL”

问题描述

我已经多次设置条纹,以前从未遇到过这个问题。我正在处理“客户创建”网络挂钩并使用有效负载将条带 ID 附加到我的用户并设置新订阅。

我收到以下错误:

Stripe\Exception\UnexpectedValueException: Could not determine which URL to request: Stripe\Subscription instance has invalid ID:  in file /Users/mick/repos/askit/vendor/stripe/stripe-php/lib/ApiResource.php on line 107

这只发生在我尝试创建新订阅时。这是我的完整控制器:

public function handleCustomerCreated(Request $request)
    {
        $payload = json_decode($request->getContent(), true);

        $user_id = $payload->data->object->subscriptions->data[0]->metadata->user_id;
        $subscription_id = $payload->data->object->subscriptions->data[0]->id;
        $stripe_customer_id = $payload->data->object->id;
        $current_period_start = $payload->data->object->subscriptions->data[0]->current_period_start;
        $current_period_end = $payload->data->object->subscriptions->data[0]->current_period_end;
        $stripe_plan = $payload->data->object->subscriptions->data[0]->items->data[0]->plan->id;
        $name = $payload->data->object->subscriptions->data[0]->items->data[0]->plan->nickname;
        $stripe_status = $payload->data->object->subscriptions->data[0]->status;
        $interval = $payload->data->object->subscriptions->data[0]->items->data[0]->plan->interval_count;

        $user = User::query()->find($user_id);
        $user->stripe_id = $stripe_customer_id;
        $user->save();

        $subscription = new Subscription();
        $subscription->user_id = $user_id;
        $subscription->name = $name;
        $subscription->stripe_id = $stripe_customer_id;
        $subscription->stripe_status = $stripe_status;
        $subscription->stripe_plan = $stripe_plan;
        $subscription->interval = $interval;
        $subscription->current_period_start = $current_period_start;
        $subscription->current_period_end = $current_period_end;
        $subscription->subscription_id = $subscription_id;
        $subscription->save();

    }

如果我删除了新的订阅内容,它可以正常工作,则条纹会很好地附加到我的用户模型上。错误仅发生在这部分:

  $subscription = new Subscription();
        $subscription->user_id = $user_id;
        $subscription->name = $name;
        $subscription->stripe_id = $stripe_customer_id;
        $subscription->stripe_status = $stripe_status;
        $subscription->stripe_plan = $stripe_plan;
        $subscription->interval = $interval;
        $subscription->current_period_start = $current_period_start;
        $subscription->current_period_end = $current_period_end;
        $subscription->subscription_id = $subscription_id;
        $subscription->save();

有任何想法吗?该表是由 Laravel Cashier 自动创建的。

标签: phplaravelstripe-paymentslaravel-cashier

解决方案


尝试使用Stripe API Docs\Stripe\Subscription::create()中所示的方法,而不是手动创建和修改. 您当前的代码正在尝试API 中尚不存在的订阅,因此无法找到其.new Subscription()updateid


推荐阅读