ronappleton / laravel-wallet
适用于Laravel的简单钱包系统包
Requires
Requires (Dev)
- larastan/larastan: 2.x-dev
- laravel/framework: 10.*
- laravel/pint: dev-main
- orchestra/testbench: 8.*
README
Laravel钱包
介绍
Laravel钱包是一个可配置的平台交易管理系统钱包系统,它与支付提供商或资金的存入无关。
如果您提供使用用户和其他实体之间微交易的平台,则此包可以帮助您处理这些交易。
潜在用途
- 积分系统
- 店铺信用
- 货币交易
- 游戏化
- 礼品余额
- 订阅
- 奖励系统
- ...
该包可配置,以便将其应用于现有平台,并在新平台中良好地控制实现。
功能列表
- 多货币
- 实体每个实体多个钱包
- 单货币钱包锁定
- 将资金存入钱包
- 从钱包中提取资金
- 钱包之间转账
- 完整交易日志
- 交易事件
- 钱包元数据
可配置选项
- 设置钱包和钱包交易模型
- 使用Uuids或整数作为记录ID(推荐使用Uuids)
- 允许负余额(不推荐)
- 将钱包锁定为每个实体每种货币一个
- 设置钱包和钱包交易表名
安装
composer require ronappleton/laravel-wallet
该包将自动注册和发现。
使用方法
提供了一个特质 Appleton\LaravelWallet\Models\Concerns\HasWallets
将此特质用于任何您想要拥有钱包的模型,例如 User
。
然后您可以使用 User::createWallet(string|BackedEnum $currency)
为用户创建一个新的钱包。如果用户已经对该货币有一个钱包,并且设置 one_wallet_per_currency
为 true,将抛出 WalletExists
异常。
您可以使用货币列的几种方式
- 记录钱包类型,例如:积分(用于忠诚度积分等)
- 记录货币,例如:USD、GBP、EUR
- 记录加密货币,例如:BTC、ETH、LTC
这确保了您可以在同一安装中用于多种目的。
钱包不能被更新或删除。这确保了数据记录(即交易)的一致性。
交易不能被更新或删除。这同样是为了数据记录的一致性。
您可以在钱包模型上调用 balance
,余额将始终从交易表中计算得出。
这意味着您可能会发现随着时间的推移性能下降,这就是为什么您可以通过配置来配置钱包和钱包交易模型,这样您就可以调整您的做法。
转移资金
钱包模型上有3个与转移资金相关的方法
- deposit(float $amount, array $meta = [])
- withdrawal(float $amount, array $meta = [])
- transfer(Wallet $wallet, float $amount, array $meta = [], ?CurrencyConverter $converter = null)
您会注意到每个方法中的数组 $meta
参数。
这是为了您添加任何可能需要记录的额外信息。
@param array<string, mixed> $meta
应该注意的是,认证用户将被自动记录。
您还会注意到转移方法中的 CurrencyConverter
参数。
可以理解,您可能需要转换货币/积分等。
CurrencyConverter
是包内的一个接口,允许您将转换器传递给方法以进行转换。合同规定了包管理转换所需的必要方法。转换元数据也会自动记录,记录转换的货币、使用的汇率和转换器。
事件
包内有两个事件可供您监听。
Appleton\LaravelWallet\Events\TransactionStartEvent
Appleton\LaravelWallet\Events\TransactionCompletedEvent
第一个事件在开始交易时触发。
此事件可以用于在交易完成前执行欺诈检查等。
第二个事件在交易完成后触发。
此事件可以用于发送电子邮件通知用户交易详情,例如,或者您可能对转账或货币转换等收取佣金,此时可以使用监听器创建这些费用。
这两个事件在每次交易、存款、取款和转账时都会触发。