Подписка на полосу Laravel Cashier, когда Оплачиваемая модель не является пользовательской

#php #laravel #stripe-payments #laravel-cashier

Вопрос:

Я использую laravel cashier 13.4.4, и у меня проблема с подпиской на обновление.

В моей конфигурации моя Оплачиваемая модель настроена не для пользователя, а для модели компании. Все работает нормально, я имею в виду — создание/получение/обновление клиента, добавление/получение способов оплаты, получение и создание подписки… Но когда я пытаюсь использовать каким-либо образом asStripeSubscription или updateStripeSubscription или любую другую операцию, которая запускает этот метод позже (например updateQuantity ) Я получаю ошибку:

 Error: Call to a member function stripe() on null in file /var/www/html/vendor/laravel/cashier/src/Subscription.php on line 1269

#0 /var/www/html/vendor/laravel/cashier/src/Subscription.php(495): LaravelCashierSubscription->updateStripeSubscription(Array)
 

Часть кода из /laravel/cashier/src/Subscription.php:

 /**
     * Update the underlying Stripe subscription information for the model.
     *
     * @param  array  $options
     * @return StripeSubscription
     */
    public function updateStripeSubscription(array $options = [])
    {
        return $this->owner->stripe()->subscriptions->update(
            $this->stripe_id, $options
        );
    }

    /**
     * Get the subscription as a Stripe subscription object.
     *
     * @param  array  $expand
     * @return StripeSubscription
     */
    public function asStripeSubscription(array $expand = [])
    {
        return $this->owner->stripe()->subscriptions->retrieve(
            $this->stripe_id, ['expand' => $expand]
        );
    }
 

$this->owner для меня это равно нулю.

У кого-нибудь была подобная проблема?

Ответ №1:

Я столкнулся с аналогичной проблемой, но в качестве оплачиваемой модели я использую модель «Команда», а не модель «Пользователь» по умолчанию. Похоже, что кассир теперь требует, чтобы вы внесли дополнение в AppServiceProvider, чтобы сообщить ему о другой оплачиваемой модели. Это было реализовано в .env ранее.

 use AppModelsCashierUser;
use LaravelCashierCashier;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Cashier::useCustomerModel(Team::class);
}