ronappleton/laravel-wallet

适用于Laravel的简单钱包系统包

v1.0.6 2024-06-06 18:49 UTC

This package is auto-updated.

Last update: 2024-09-06 19:20:15 UTC


README

laravel_wallet.jpg

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

第一个事件在开始交易时触发。

此事件可以用于在交易完成前执行欺诈检查等。

第二个事件在交易完成后触发。

此事件可以用于发送电子邮件通知用户交易详情,例如,或者您可能对转账或货币转换等收取佣金,此时可以使用监听器创建这些费用。

这两个事件在每次交易、存款、取款和转账时都会触发。