coderity/wallet

Coderity Wallet 扩展 Laravel Cashier,使用户能够拥有多个信用卡和多个订阅,同时能够根据需要向不同的信用卡收费。

v1.0.0 2017-10-23 19:38 UTC

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 许可证授权