bavix / laravel-wallet
与虚拟钱包一起工作非常简单。
11.3.0
2024-09-11 19:12 UTC
Requires
- php: ^8.2
- ext-json: *
- ext-pdo: *
- brick/math: ~0.10
- illuminate/contracts: ^11.0
- illuminate/database: ^11.0
- ramsey/uuid: ^4.0
Requires (Dev)
- driftingly/rector-laravel: ^1.0
- ergebnis/phpstan-rules: ^2.1
- infection/infection: ~0.27
- larastan/larastan: ^2.8
- laravel/cashier: ^15.0
- nunomaduro/collision: ^8.0
- orchestra/testbench: ^9.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^11.0
- rector/rector: ^1.0
- symplify/easy-coding-standard: ^12.1
Suggests
- bavix/laravel-wallet-swap: Addition to the laravel-wallet library for quick setting of exchange rates
- bavix/laravel-wallet-uuid: Addition to the laravel-wallet library uuid support in laravel-wallet
- bavix/laravel-wallet-warmup: Addition to the laravel-wallet library for refresh balance wallets
- dev-master
- 11.3.0
- 11.2.2
- 11.2.1
- 11.2.0
- 11.1.1
- 11.1.0
- 11.0.6
- 11.0.5
- 11.0.4
- 11.0.3
- 11.0.2
- 11.0.1
- 11.0.0
- 10.x-dev
- 10.1.7
- 10.1.6
- 10.1.5
- 10.1.4
- 10.1.3
- 10.1.2
- 10.1.1
- 10.1.0
- 10.0.2
- 10.0.1
- 10.0.0
- 9.6.4
- 9.6.3
- 9.6.2
- 9.6.1
- 9.6.0
- 9.5.0
- 9.4.0
- 9.3.0
- 9.2.0
- 9.1.0
- 9.0.4
- 9.0.3
- 9.0.2
- 9.0.1
- 9.0.0
- 9.0.0-RC2
- 9.0.0-RC1
- 9.0.0-beta5
- 9.0.0-beta4
- 9.0.0-beta3
- 9.0.0-beta2
- 9.0.0-beta1
- 9.0.0-alpha
- 8.4.3
- 8.4.2
- 8.4.1
- 8.4.0
- 8.3.0
- 8.2.1
- 8.2.0
- 8.1.1
- 8.1.0
- 8.0.6
- 8.0.5
- 8.0.4
- 8.0.3
- 8.0.2
- 8.0.1
- 8.0.0
- 7.3.6
- 7.3.5
- 7.3.4
- 7.3.3
- 7.3.2
- 7.3.1
- 7.3.0
- 7.3.0-beta1
- 7.3.0-alpha
- 7.2.0
- 7.2.0-beta1
- 7.1.0
- 7.1.0-RC3
- 7.1.0-RC2
- 7.1.0-RC1
- 7.1.0-beta1
- 7.0.0
- 7.0.0-beta3
- 7.0.0-beta2
- 7.0.0-beta1
- 7.0.0-alpha
- 6.2.4
- 6.2.3
- 6.2.2
- 6.2.1
- 6.2.0
- 6.1.0
- 6.0.4
- 6.0.3
- 6.0.2
- 6.0.1
- 6.0.0
- 5.5.1
- 5.5.0
- 5.4.0
- 5.3.2
- 5.3.1
- 5.3.0
- 5.2.1
- 5.2.0
- 5.1.0
- 5.0.2
- 5.0.1
- 5.0.0
- 4.2.2
- 4.2.1
- 4.2.0
- 4.1.4
- 4.1.3
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.1
- 4.0.0
- 3.3.0
- 3.2.1
- 3.2.0
- 3.1.6
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.4.1
- 2.4.0
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.0
- 2.0.1
- 2.0.0
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.0
- 0.0.1
- dev-dependabot/npm_and_yarn/rollup-4.22.4
This package is auto-updated.
Last update: 2024-09-24 04:09:26 UTC
README
laravel-wallet - 与虚拟钱包一起工作非常简单。
- 供应商: bavix
- 包: laravel-wallet
- Composer:
composer require bavix/laravel-wallet
支持策略
重要
如果您正在使用laravel-wallet ^10.0与laravel ^11,则最低php版本为8.2。
升级指南
要执行迁移,您将需要指导。
社区
我想为使用钱包包的开发者创建一个舒适的地方。这将帮助您更快地找到错误,获取反馈并讨论想法。
Telegram: @laravel_wallet
扩展
用法
将HasWallet
特性类和Wallet
接口添加到模型中。
use Bavix\Wallet\Traits\HasWallet; use Bavix\Wallet\Interfaces\Wallet; class User extends Model implements Wallet { use HasWallet; }
现在我们进行交易。
$user = User::first(); $user->balanceInt; // 0 $user->deposit(10); $user->balance; // 10 $user->balanceInt; // int(10) $user->withdraw(1); $user->balance; // 9 $user->forceWithdraw(200, ['description' => 'payment of taxes']); $user->balance; // -191
购买
将CanPay
特性类和Customer
接口添加到您的User
模型中。
use Bavix\Wallet\Traits\CanPay; use Bavix\Wallet\Interfaces\Customer; class User extends Model implements Customer { use CanPay; }
将HasWallet
特性类和接口添加到Item
模型中。
从版本9.x开始有两个产品接口
- 对于无限数量的产品(
ProductInterface
); - 对于有限数量的产品(
ProductLimitedInterface
);
无限数量产品的示例
use Bavix\Wallet\Traits\HasWallet; use Bavix\Wallet\Interfaces\Customer; use Bavix\Wallet\Interfaces\ProductInterface; class Item extends Model implements ProductInterface { use HasWallet; public function getAmountProduct(Customer $customer): int|string { return 100; } public function getMetaProduct(): ?array { return [ 'title' => $this->title, 'description' => 'Purchase of Product #' . $this->id, ]; } }
有限数量产品的示例
use Bavix\Wallet\Traits\HasWallet; use Bavix\Wallet\Interfaces\Customer; use Bavix\Wallet\Interfaces\ProductLimitedInterface; class Item extends Model implements ProductLimitedInterface { use HasWallet; public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool { /** * This is where you implement the constraint logic. * * If the service can be purchased once, then * return !$customer->paid($this); */ return true; } public function getAmountProduct(Customer $customer): int|string { return 100; } public function getMetaProduct(): ?array { return [ 'title' => $this->title, 'description' => 'Purchase of Product #' . $this->id, ]; } }
我不建议在处理购物车时使用有限接口。如果您正在处理购物车,则应重写PurchaseServiceInterface
接口。通过它,您可以使用一个请求检查所有产品的可用性,数据库中将不会有N查询。
继续购买。
$user = User::first(); $user->balance; // 100 $item = Item::first(); $user->pay($item); // If you do not have enough money, throw an exception var_dump($user->balance); // 0 if ($user->safePay($item)) { // try to buy again } var_dump((bool)$user->paid($item)); // bool(true) var_dump($user->refund($item)); // bool(true) var_dump((bool)$user->paid($item)); // bool(false)
预加载
// When working with one wallet User::with('wallet'); // When using the multi-wallet functionality User::with('wallets');
如何处理分数?
将HasWalletFloat
特性类和WalletFloat
接口添加到模型中。
use Bavix\Wallet\Traits\HasWalletFloat; use Bavix\Wallet\Interfaces\WalletFloat; use Bavix\Wallet\Interfaces\Wallet; class User extends Model implements Wallet, WalletFloat { use HasWalletFloat; }
现在我们进行交易。
$user = User::first(); $user->balance; // 100 $user->balanceFloat; // 1.00 $user->depositFloat(1.37); $user->balance; // 237 $user->balanceFloat; // 2.37
性能比较
所有版本
支持者
贡献者
代码贡献者
此项目得益于所有贡献者。[贡献].
财务贡献者
成为财务贡献者,帮助我们维持我们的社区。[贡献]
个人
组织
请贵组织支持此项目。您的标志将在这里显示,并带有链接到您的网站。[贡献]