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();