REST API Laravel 中的订阅和交易(支付)端点

REST API Subscriptions and transactions(payments) endpoints in Laravel

我正在开发一个网络应用程序并且我遵守 REST API 标准。我正在搜索订阅和付款的 REST API 最佳实践。

当新用户订阅"pro plan"时,用户应该为计划付费,这是一笔交易。

新用户订阅时是否需要设置POST:users/{id}/subscriptionsSubscriptionsController@store

并且因为订阅是一个交易和 2 个单独的请求(before/after 银行),所以所有的订阅代码都应该在 SubscriptionController@store?

对于升级、取消或更新计划,我应该设置 PUT:users/{id}/subscriptions/{id}SubscriptionController@update 还是其他端点?

我正在尝试了解您的要求,但对我来说有点模糊,所以如果我没看错,您正在尝试弄清楚 API 端点命名的最佳做法是什么,这真的取决于您将提供的功能以及您将如何公开文档。

但从我的角度来看,我没有看到在 URL 中链接用户 ID 和订户 ID 的理由,我推荐这样的东西,你可以在正文中传递你想要的所有信息

$router->post('settings/user/plan', 'Settings\SubscriptionController@subscribe');
$router->put('settings/user/plan', 'Settings\SubscriptionController@changeSubscriptionPlan');
$router->delete('settings/user/plan', 'Settings\SubscriptionController@cancelSubscription');
$router->post('settings/user/plan/resume', 'Settings\SubscriptionController@resumeSubscription');
$router->put('settings/user/card', 'Settings\SubscriptionController@updateCard');
$router->put('settings/user/vat', 'Settings\SubscriptionController@updateExtraBillingInfo');
$router->get('settings/user/plan/invoice/{id}', 'Settings\SubscriptionController@downloadInvoice');

如何定义端点完全取决于您

通常您不会在路由中传递用户 ID,除非控制器中有某种​​身份验证。例如。管理员正在更新用户。而是使用控制器中的 Auth::user() 对象。

关于你的问题,有很多选择,这完全取决于你,但一种可能的方法是为此使用 resource route\controller

Route::resource('user/subscription', 'User\SubscriptionController');

然后控制器看起来像这样:

<?php

namespace App\Http\Controllers\User;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class SubscriptionController extends Controller
{

    public function index()
    {
        // get user
        $user = Auth::user();

        // list all user subscriptions
    }

    public function store(Request $request)
    {

        // get user
        $user = Auth::user();

        if(empty($user)) {
            // create user
        }

        // create and process subscription for the user 
        // possibly using a plan id in the $request
    }

    public function show($id)
    {
        // get user
        $user = Auth::user();

        // return user subscription details for $id
    }

    public function update(Request $request, $id)
    {
        // get user
        $user = Auth::user();

        // update or change user subscription
        // possibly using a plan id in the $request

    }


    public function destroy($id)
    {
        // get user
        $user = Auth::user();

        // cancel user subscription with $id
    }
}

你的路线是这样的:

GET user/subscription 列出所有用户订阅 index()

POST user/subscription 创建用户订阅 store(Request $request)

GET user/subscription/{subscription_id} 显示用户订阅 show($id)

PUT/PATCH user/subscription/{subscription_id} 更新用户订阅 update($id)

DELETE user/subscription/{subscription_id} 取消用户订阅 destroy($id)

如果您尝试 Braintree 或 Stripe 这两个支付网关可以轻松维护计划和订阅。

主要优点:-

  1. 更少的订阅和计划编码
  2. UI 已在 Braintree 树中准备就绪 drop-ui 其响应[​​=22=]
  3. 轻松附加 add-ons 费用