1

Laravel キャッシャー パッケージを 5 バージョンから最新の 6 バージョンに更新しました。複数のサブスクリプションをサポートしており、本当にクールです。しかし、サブスクリプションのキャンセル後にサブスクリプションを更新する際に 1 つの問題があります。

ストライプ ダッシュボードからサブスクリプションを手動で削除していますが、customer.subscription.deletedイベントが発生しています。

Cashier メソッドはこのイベントをキャッチしています: \Laravel\Cashier\Http\Controllers\WebhookController@handleWebhook

そして$subscription->markAsCancelled();発砲しています。

その瞬間からサブスクリプションを更新することはできません。機能を利用しようとしましたが、サブスクリプションは猶予期間中にのみ (!)resume()再開できます。

以前のバージョンのキャッシャーでは、swap()サブスクリプションを再開する方法を使用していました。今それは戻ります:

Stripe\Error\InvalidRequest: Customer cus_*** does not have a subscription with ID sub_***** in /**/vendor/stripe/stripe-php/lib/ApiRequestor.php:103 from API request 'req_****'

新しい顧客とサブスクリプションを作成することは、あまり効率的な方法ではありません。この問題についてどう思いますか。

4

1 に答える 1

1

現時点での私の解決策:

public function resume()
{
    $user = Auth::user();
    $subscription = $user->subscription(ServicePackageRepository::SUBSCRIPTION_NAME);

    if ($subscription->cancelled() && $subscription->onGracePeriod()) { 
        //if it was cancelled by user in grace period
        $subscription->resume();

        return $this->respondWithSaved([]);
    } else { //if cancelled by payment failure or smth else...
        if($user->subscription(ServicePackageRepository::SUBSCRIPTION_NAME)) {
            $user->newSubscription(ServicePackageRepository::SUBSCRIPTION_NAME,
                    $user->subscription(ServicePackageRepository::SUBSCRIPTION_NAME)->stripe_plan)
                ->create();

            return $this->respondWithSaved([]);
        } else {
            return $this->respondWithError([]);
        }
    }
}
于 2016-05-19T15:47:53.823 に答える