mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2026-06-07 20:48:09 +08:00
将多处基于浮点的数值计算替换为 BC Math 字符串运算以避免浮点精度问题,涉及支付、退款、转账、比较与统计逻辑的重构。主要改动包括: - 将比较与判断替换为 bccomp,累加与合并使用 bcadd,乘以 100 等使用 bcmul; - 将部分初始数值与统计结果从数值类型改为字符串形式(如 '0.00'),并调整相关返回类型(如 Payment::paidAmount 改为返回 string); - 修正订单/退款金额计算与超额校验逻辑以使用高精度算术; - 更新微信支付相关 SDK 调用中金额乘 100 的计算以避免精度误差; - 在若干插件中用高精度运算替换 floatval/int 转换(包括 SystemQueue、Wemall、Wuma 等); - 更新文档(readme)添加 BC Math/高精度计算等说明并统一版权年份至 2014-2026; - 新增 .copilot-commit-message-instructions.md(提交信息规范)。 此改动旨在增强金融/金额相关业务的计算正确性与一致性,避免因浮点运算导致的金额误差。
6.2 KiB
6.2 KiB
ThinkPlugsPayment for ThinkAdmin
ThinkPlugsPayment 是 ThinkAdmin 的多端支付插件,本插件属于会员尊享插件,未经授权不得用于商业用途。
支付类型主要涵盖线上支付和抵扣支付两大类。
- 抵扣支付包括账户余额支付和账户积分抵扣。
- 线上支付则涵盖各类微信支付、支付宝支付以及大额凭证支付。
默认情况下,账户余额支付和账户积分抵扣均得到支持,但业务系统可根据需求控制是否向用户开放。在支付优先级方面,积分优先于余额,余额则优先于其他支付方式。 若您希望完全关闭积分抵扣或余额支付功能,只需在支付配置中取消对应的支付方式选项即可。
当前,同一业务订单支持混合支付模式,业务系统需传入订单需支付的总金额及此次支付金额。支付完成情况将根据已完成的支付总额来判断,并触发全局支付事件。您可以在任意初始化文件中监听支付事件,以便实时刷新订单状态。
待办事项:未来子支付单将支持独立的退款操作。目前,积分抵扣、余额支付、凭证支付以及微信支付退款操作已得到支持。敬请期待更多更新与优化。
加入我们
我们的代码仓库已移至 Github,而 Gitee 则仅作为国内镜像仓库,方便广大开发者获取和使用。若想提交 PR 或 ISSUE 请在 ThinkAdminDeveloper 仓库进行操作,如果在其他仓库操作或提交问题将无法处理!。
开放接口
接口文档:https://thinkadmin.apifox.cn
支付事件
PluginAccountBind注册用户绑定事件,回调参数function (array $data);PluginPaymentAudit注册支付审核事件,回调参数function (PluginPaymentRecord $payment);PluginPaymentRefuse注册支付拒审事件,回调参数function (PluginPaymentRecord $payment);PluginPaymentSuccess注册支付完成事件,回调参数function (PluginPaymentRecord $payment);PluginPaymentCancel注册支付取消事件,回调参数function (PluginPaymentRecord $payment);PluginPaymentConfirm注册订单确认事件,回调参数function (array $data);
安装插件
### 安装前建议尝试更新所有组件
composer update --optimize-autoloader
### 安装稳定版本 ( 插件仅支持在 ThinkAdmin v6.1 中使用 )
composer require zoujingli/think-plugs-payment --optimize-autoloader
### 安装测试版本( 插件仅支持在 ThinkAdmin v6.1 中使用 )
composer require zoujingli/think-plugs-payment dev-master --optimize-autoloader
卸载插件
### 注意,插件卸载不会删除数据表,需要手动删除
composer remove zoujingli/think-plugs-payment
业务功能特性
核心支付功能:
- 多端支付支持: 支持微信服务号、微信小程序、APP、网页等多终端支付场景
- 混合支付模式: 支持余额、积分、微信、支付宝等多种支付方式组合使用
- 凭证支付审核: 支持上传凭证的线下支付,包含待审核、已审核、已拒绝等状态管理
- 支付事件驱动: 通过支付事件(审核、完成、取消、确认)实现业务逻辑解耦
- 退款管理: 支持部分退款和全额退款,自动处理余额、积分的退回操作
- 支付配置管理: 可视化配置各种支付通道参数,支持动态启用/禁用支付方式
- 高精度金融计算: 全面采用 BC Math 高精度数学函数,确保金融计算的准确性,避免浮点数精度丢失问题
账户资金管理:
- 余额管理系统: 完整的余额充值、消费、锁定、解锁、作废等操作
- 积分管理系统: 积分获取、消耗、兑换比率配置、积分有效期管理
- 高精度计算: 使用 BC Math 高精度数学函数,确保金融计算的准确性
- 资金流水追踪: 完整的资金变动记录,支持来源追溯和审计
- 并发安全控制: 支持高并发场景下的余额和积分操作,避免超支问题
- 数据完整性保障: 通过数据库约束确保业务数据的一致性和有效性
技术特性:
- 支付接口抽象: 统一的支付接口标准,便于扩展新的支付方式
- 数据库约束优化: 添加金额非负约束、状态枚举约束,确保数据完整性
- 异常处理机制: 完善的异常捕获和日志记录,便于问题排查
- 事务一致性: 关键业务操作保证数据一致性,避免脏数据产生
- 向后兼容: 保持 API 稳定性,确保平滑升级
插件数据
本插件涉及数据表有:
- 插件-支付-地址:
plugin_payment_address - 插件-支付-余额:
plugin_payment_balance - 插件-支付-积分:
plugin_payment_integral - 插件-支付-配置:
plugin_payment_config - 插件-支付-行为:
plugin_payment_record - 插件-支付-退款:
plugin_payment_refund
版权说明
ThinkPlugsPayment 为 ThinkAdmin 会员插件。
未获得此插件授权时仅供参考学习不可商用,了解商用授权请阅读 《会员授权》。
版权所有 Copyright © 2014-2026 by ThinkAdmin (https://thinkadmin.top) All rights reserved。