coderity / wallet
Coderity Wallet 扩展 Laravel Cashier,使用户能够拥有多个信用卡和多个订阅,同时能够根据需要向不同的信用卡收费。
Requires
- php: >=5.5.9
- cartalyst/stripe-laravel: 7.0.*
- laravel/cashier: ~7.0
Requires (Dev)
- fzaninotto/faker: ^1.7
- illuminate/http: ~5.5
- illuminate/routing: ~5.5
- illuminate/view: ~5.5
- phpunit/phpunit: ~5.0
- vlucas/phpdotenv: ~2.0
This package is not auto-updated.
Last update: 2024-09-29 03:47:09 UTC
README
简介
Coderity Wallet 扩展 Laravel Cashier,允许用户拥有多个信用卡和多个订阅,同时具备根据需要向不同的信用卡收费的能力。
Coderity Wallet 仍然包含 Laravel Cashier 的所有功能,并提供额外的方法!
Coderity Wallet 目前仅支持 Stripe。
安装
Wallet 遵循 Laravel Cashier 安装指南 - 但有一些细微的区别。
Composer
首先,将 Wallet 包添加到 Stripe 的依赖项中
composer require "coderity/wallet":"~1.0"
服务提供商
如果你的 Laravel 版本是 5.5 或更高版本,你可以跳过以下步骤。
接下来,在你的 config/app.php 配置文件中注册 Coderity\Wallet\WalletServiceProvider 服务提供商。
数据库迁移
在使用 Wallet 之前,我们还需要准备数据库。我们需要向你的 users 表中添加几个列,并创建一个新的 subscriptions 表来保存所有客户的订阅
Schema::table('users', function ($table) {
$table->string('stripe_id')->nullable();
$table->string('card_brand')->nullable();
$table->string('card_last_four')->nullable();
$table->timestamp('trial_ends_at')->nullable();
});
Schema::create('subscriptions', function ($table) {
$table->increments('id');
$table->integer('user_id');
$table->string('name');
$table->string('stripe_id');
$table->string('stripe_plan');
$table->integer('quantity');
$table->timestamp('trial_ends_at')->nullable();
$table->timestamp('ends_at')->nullable();
$table->timestamps();
});
创建迁移后,运行 migrate Artisan 命令。
可计费模型
接下来,将 Billable 特性添加到你的模型定义中。这个特性提供了各种方法,允许你执行常见的计费任务,例如创建订阅、应用优惠券和更新信用卡信息
use Coderity\Wallet\Billable;
class User extends Authenticatable
{
use Billable;
}
API 密钥
最后,你应该在你的 services.php 配置文件中配置你的 Stripe 密钥。你可以从 Stripe 控制面板获取 Stripe API 密钥
'stripe' => [
'model' => App\User::class,
'key' => env('STRIPE_KEY'),
'secret' => env('STRIPE_SECRET'),
],
文档
你应该熟悉 Laravel Cashier 安装指南,以查看所有可用方法和功能。
以下突出显示 Coderity Wallet 的特定方法。
添加信用卡
你可以通过传递 addCard() 方法轻松地为用户添加信用卡
$user = User::find(1); $user->addCard([ 'cardNumber' => 4242424242424242, 'expiryMonth' => 12, 'expiryYear' => 2021, 'cvc' => 123 ]);
如果你想将新卡设置为默认卡,可以将第二个参数传递为 true
$user->addCard([ 'cardNumber' => 4242424242424242, 'expiryMonth' => 12, 'expiryYear' => 2021, 'cvc' => 123 ], true);
如果你已经生成了令牌,也可以将令牌作为第一个参数传递
$user->addCard($token);
生成令牌
如果你需要生成令牌或验证信用卡,请使用 generateToken() 方法
$result = $user->generateToken([ 'cardNumber' => 4242424242424242, 'expiryMonth' => 12, 'expiryYear' => 2021, 'cvc' => 123 ]); $token = $result['token'];
获取所有卡
你可以通过传递 cards() 方法来查看用户的所有卡
$user->cards();
将返回一个卡数组。注意,卡 ID ($card->id) 将以 card_ 开头,例如 card_1BGBDfLBsAc3LtzZbIEQ8xpF。这是你将在其他方法中使用卡时需要的 ID。
获取一张卡
要获取特定卡片,可以将卡 ID 传递给 getCard() 方法
$user->getCard($cardID);
使用特定卡收费
charge() 方法与 Laravel Cashier 的用法相同,但以下参数有额外的功能
$this->user->charge(100, [ 'cardId' => $cardId ]);
此参数将向特定卡收取 100 美元。
不使用订阅收费
Coderity 钱包还使得进行简单收费变得非常容易。通过两种方法,您可以轻松地进行一次性收费(无需用户已注册订阅)
$card = $user->addCard([ 'cardNumber' => 4242424242424242, 'expiryMonth' => 12, 'expiryYear' => 2021, 'cvc' => 123 ]); $this->user->charge(100, [ 'cardId' => $card['cardId'] ]);
使用特定卡片创建订阅
您可以通过在添加订阅时调用 create() 之前包含 useCard() 方法来使用特定卡片创建订阅。
$this->user->newSubscription('main', 'monthly-10-1') ->trialDays(10) ->useCard($cardId) ->create();
请注意,当前功能实际上会将此卡片设置为用户所有订阅的默认卡片 - 这是 Stripe 当前处理客户多个订阅的方式。
更新默认卡片
当然,您可以使用 updateDefaultCard() 方法在任何阶段更新默认卡片
$user->updateDefaultCard($cardId);
获取默认卡片
如果您想获取用户的默认卡片,只需使用 getDefaultCard() 方法即可
$card = $user->getDefaultCard();
删除特定卡片
您可以通过将卡片 ID 传递给 deleteCard() 方法来删除特定卡片
$user->deleteCard($cardId);
有关更多用例,请参阅单元测试。
本地运行钱包的测试
为了运行钱包单元测试,您需要在本地和您的 Stripe 账户中设置以下详细信息
环境
.env
STRIPE_KEY=
STRIPE_SECRET=
STRIPE_MODEL=User
Stripe
计划
* monthly-10-1 ($10)
贡献
如果您想对 Coderity 钱包提出任何改进建议,请阅读贡献指南。
许可
Coderity 钱包是开源软件,根据MIT 许可证授权