flitty / subscription
此软件包最新版本(dev-master)没有提供许可信息。
简单的订阅封装
dev-master
2018-10-27 15:55 UTC
Requires
- php: >=7.1
- laravel/framework: >=5.4
- srmklive/paypal: ~1.0
Requires (Dev)
- mockery/mockery: ~1.0
- phpunit/phpunit: ~6.0
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();