flitty/subscription

此软件包最新版本(dev-master)没有提供许可信息。

简单的订阅封装

dev-master 2018-10-27 15:55 UTC

This package is auto-updated.

Last update: 2024-09-28 04:58:07 UTC


README

安装

1. 在您的项目中要求此软件包

composer require flitty/subscription

2. 在您的应用程序中注册软件包服务提供者(app.providers)

Flitty\Subscription\Providers\SubscriptionServiceProvider::class

3. 发布迁移和软件包配置文件

php artisan vendor:publish --provider=SubscriptionServiceProvider

4. 创建表格

php artisan migrate

5. 在配置文件中配置回调链接。默认值为

'express-checkout-success' => '/subscription/express-checkout-success?driver=pay-pal-subscription',

5. 将您的订阅类型添加到 `subscription_types` 表中

6. 设置订阅者实体

将订阅者特质和合约注册到用户模型中

use Flitty\Subscription\Traits\Subscriber;
implement Flitty\Subscription\Contracts\SubscriberContract

7. 设置订阅实体

将订阅实体特质和合约注册到订阅实体模型中

use Flitty\Subscription\Traits\Subscribable;
implement Flitty\Subscription\Contracts\SubscribableEntityContract

订阅实体应具有 `subscription_type_id`(您可以在配置中更改字段名称 'subscription.type.foreign')

8. 您可以在 `subscription_coupons` 表中添加优惠券

9. 注册中间件。更新您的 'app/Http/Kernel.php' 类。将以下行添加到 $routeMiddleware

'subscribed' => HasSubscriptionMiddleware::class,

用法

在控制器中

您的控制器至少应有3个方法

public function expressCheckout(ExpressCheckoutRequest $request)
{
    try {
        $response = Auth::user()->subscribeEntity(
            $request->get('subscriptionTypeId'),
            $request->get('coupon'),
            $request->get('driver')
        );
    } catch (UserAlreadyHasTheSubscription $e) {
        Session::flash('error', $e->getMessage());
        $response = redirect()->route('subscription-route-name');
    } catch (SubscriptionRedirectHasBeenFailedException $e) {
        Session::flash('error', $e->getMessage());
        $response = redirect()->route('subscription-route-name');
    }
    return $response;
}
     public function expressCheckoutSuccess(Request $request)
     {
         try {
             app($request->get('driver'))->subscriptionCallback($request->get('token'));
             Session::flash('notice', Message::getMessageData(Message::SUBSCRIBED_SUCCESSFULLY));
         } catch (SubscriptionCallbackHasBeenFailedException $e) {
             Session::flash('error', $e->getMessage());
         }
         return redirect()->route('subscription-route-name');
     }
  
     public function payPalCallback(Request $request)
     {
         $requestData = $request->all();
         try {
             app(SubscriptionServiceProvider::PAY_PAL_DRIVER)->cmdCallback($requestData);
             $message = 'User has been updated his subscription';
         } catch (SubscriptionHasNotBeenFoundException $e) {
             $message = $e->getMessage();
         } catch (InvalidResponseException $e) {
             $message = $e->getMessage();
         }
         logger()->info($message, $requestData);
         return response()->json(['message' => $message]);
     }

可选方法

    
    public function cancelSubscription(CancelSubscriptionRequest $request)
    {
        $type = 'error';
        try {
            Auth::user()->cancelSubscription($request->get('subscriptionTypeId'), $request->get('driver'));
            $message = 'User has been canceled subscription successfully';
            $type = 'notice';
        } catch (UserHasNoSubscriptionException $e) {
            $message = $e->getMessage();
        } catch (CancelSubscriptionHasBeenFailed $e) {
            $message = $e->getMessage();
        }
        Session::flash($type, $message);
        return redirect()->route('settings');
    }
 
    public function suspendSubscription(SuspendSubscriptionRequest $request)
    {
        $type = 'error';
        try {
            Auth::user()->suspendSubscription($request->get('subscriptionTypeId'), $request->get('driver'));
            $message = 'User has been suspended subscription successfully';
            $type = 'notice';
        } catch (UserHasNoSubscriptionException $e) {
            $message = $e->getMessage();
        } catch (CancelSubscriptionHasBeenFailed $e) {
            $message = $e->getMessage();
        }
        Session::flash($type, $message);
        return redirect()->route('settings');
    }
    public function reactivateSubscription(ReactivateSubscriptionRequest $request)
    {
        $type = 'error';
        try {
            Auth::user()->reactivateSubscription($request->get('subscriptionTypeId'), $request->get('driver'));
            $message = 'User has been reactivated subscription successfully';
            $type = 'notice';
        } catch (UserHasNoSubscriptionException $e) {
            $message = $e->getMessage();
        } catch (CancelSubscriptionHasBeenFailed $e) {
            $message = $e->getMessage();
        }
        Session::flash($type, $message);
        return redirect()->route('settings');
    }

获取订阅实体

获取认证用户的全部实体

    $subscriber = Auth::user();
    $entities = Entity::subscribable($subscriber)->get();

中间件和路由

您可以使用中间件来限制对路由的访问

    Route::get('subscription-entities', 'EntityController@index')->middleware('subscribed:{id of the subscription type}');

获取订阅者订阅

获取认证用户的订阅类型

    $subscriber = Auth::user();
    $subscriber->getTypeSubscription($subscriptionTypeId);

获取所有认证用户的订阅

    $subscriber = Auth::user();
    $subscriber->getSubscriptions();