独角数卡自动售货系统拆解与部署指南
独角数卡自动售货系统拆解与部署指南
【免费下载链接】dujiaoka🦄独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速!🚀🚀🎉🎉项目地址: https://gitcode.com/gh_mirrors/du/dujiaoka
独角数卡是基于 Laravel 的开源自动售货系统,面向售卖卡密、网盘资源等数字商品的站长。它把商品管理、自动发货、多支付渠道集成装进一个 Laravel 应用,付款完成即自动发卡。以下拆解它的核心机制,并给出从环境准备到队列启动的完整落地流程。
项目能力全景
- 商品与卡密管理:商品、分组、卡密三套模型,支持卡密批量导入、库存联动,对应
app/Models/Goods.php、app/Models/Carmis.php - 订单全生命周期:创建、支付、发货、过期统一由
app/Service/OrderProcessService.php编排 - 多支付渠道:支付宝、微信、PayPal、Stripe、易支付等十余种渠道,每个渠道一个独立控制器,集中在
app/Http/Controllers/Pay/ - 营销与触达:优惠券、批发价两档优惠;成交后支持邮件及 Telegram、Bark、Server 酱等推送
- 后台运维:基于 dcat/laravel-admin 构建,提供商品、订单、销售与出款率统计面板
关键机制拆解
订单状态机:七个常量定义订单一生
订单状态在app/Models/Order.php中用常量集中定义,而不是散落在业务代码里:
class Order extends BaseModel { const STATUS_WAIT_PAY = 1; // 待支付 const STATUS_PENDING = 2; // 待处理(人工单) const STATUS_PROCESSING = 3; // 处理中 const STATUS_COMPLETED = 4; // 已完成 const STATUS_FAILURE = 5; // 失败 const STATUS_ABNORMAL = 6; // 异常(如卡密不足) const STATUS_EXPIRED = -1; // 过期 }这段代码在做什么:把一张订单可能出现的每一种落点都显式列出,getStatusMap()再把它翻译成后台可读文案。之所以用常量而非字符串枚举,是因为支付回调、过期任务、人工操作三处代码都要判断状态,统一常量可以避免"已完成"与"completed"这类拼写漂移。
支付网关路由:一条通配路由分发十余个渠道
routes/common/pay.php里的路由设计是理解支付模块的钥匙:
Route::get('pay-gateway/{handle}/{payway}/{orderSN}', 'PayController@redirectGateway'); Route::group(['prefix' => 'pay', 'namespace' => 'Pay'], function () { Route::get('alipay/{payway}/{orderSN}', 'AlipayController@gateway'); Route::post('alipay/notify_url', 'AlipayController@notifyUrl'); Route::get('wepay/{payway}/{orderSN}', 'WepayController@gateway'); Route::get('stripe/{payway}/{oid}', 'StripeController@gateway'); // ...paypal、coinbase、epusdt 等同构注册 });这段代码在做什么:买家不直接访问渠道控制器,而是先进入PayController@redirectGateway做订单合法性与零元单检查,再 302 跳转到handle指向的具体渠道。回调则统一走各控制器的notify_url。这样设计后,渠道差异被隔离在app/Http/Controllers/Pay/各自的控制器内,公共校验只写一次。
订单过期与发货:延迟队列加事务兜底
最关键的编排逻辑在app/Service/OrderProcessService.php:
// 下单即投递延迟任务:x 分钟未支付则过期 $expiredOrderDate = dujiaoka_config_get('order_expire_time', 5); OrderExpired::dispatch($order->order_sn) ->delay(Carbon::now()->addMinutes($expiredOrderDate)); // 支付回调 completedOrder:事务内先校验金额再发货 DB::beginTransaction(); if ($order->type == Order::AUTOMATIC_DELIVERY) { $completedOrder = $this->processAuto($order); // 取未售卡密、写回订单、发邮件 } else { $completedOrder = $this->processManual($order); // 置为待处理、通知站长 }这段代码在做什么:过期不靠定时扫描,而是下单时就给队列投递一个带延迟的任务,到点未支付才把订单置为过期;发货则在数据库事务里完成"金额比对—发卡—扣库存",失败整体回滚。两个动作都依赖队列 worker 常驻,这是后面部署步骤的由来。
独角数卡落地实操:从环境准备到服务启动
环境准备
项目基于 Laravel 6,要求 PHP 7.4 及以上(composer.json声明^7.2.5|^8.0),另需 Nginx、MySQL/MariaDB 与 Redis。仓库内 debian_manual.md 有一份完整的 Debian 手动 LNMP 教程可参考:
apt install php php-fpm php-mysql php-gd php-zip php-bcmath php-mbstring php-redis apt install nginx mariadb-server redis supervisor代码部署
克隆代码并安装依赖。.env不需要手工创建,首次访问 Web 安装页时框架会自动写入:
git clone https://gitcode.com/gh_mirrors/du/dujiaoka cd dujiaoka composer install --no-dev --optimize-autoloader数据库初始化
表结构由单个 SQL 文件提供,先导入库,再打开安装页填写库名、密码与网站 URL。Nginx 的 root 指向public/目录,并保留try_files ... /index.php回退规则:
mysql -u root -p < database/sql/install.sql服务启动
过期任务、邮件、推送全部挂在队列上,必须常驻消费:
cat > /etc/supervisor/conf.d/dujiaoka.conf <<'EOF' [program:dujiaoka-queue] command=php /var/www/dujiaoka/artisan queue:work autostart=true autorestart=true EOF supervisorctl reread && supervisorctl update && supervisorctl start dujiaoka-queue启动后进入生产配置:.env中将APP_DEBUG改为false,追加ADMIN_HTTPS=true。Docker 方式部署则直接使用仓库的 docker-compose.yml,注意挂载.env、install.lock与public/uploads三个持久化路径。
二次开发切入点
- 新增支付渠道:在
app/Http/Controllers/Pay/下新增控制器(继承PayController,实现gateway与notifyUrl),再在routes/common/pay.php注册一对路由,前端渠道列表即可复用现有渲染逻辑 - 改写发货逻辑:自动与人工两条链路分别落在
app/Service/OrderProcessService.php的processAuto与processManual,替换卡密选取规则或接入外部 API 都只动这两个方法 - 自定义后台面板:
app/Admin/Controllers/下每个控制器对应一个 Dcat Admin 页面,复制现有控制器的 grid 结构即可扩展新的管理页
工程化注意事项
- 生产环境关闭
APP_DEBUG,配置 HTTPS 并开启ADMIN_HTTPS=true queue:work由 supervisor 托管并设置自动重启,避免回调处理静默丢失- 支付回调务必校验签名与金额一致性(
completedOrder已内置bccomp校验,勿绕过) - 容器化部署时持久化
.env、install.lock、public/uploads,防止重建容器丢数据 - 为
orders.order_sn、orders.status等高频查询字段确认索引存在 - 定期备份数据库与
public/uploads,并验证恢复流程
写在最后
独角数卡把发卡站的重复劳动收敛进了商品、订单、支付三组模型,二次开发沿这三处展开即可。需留意该项目已停止更新,选型前先评估维护成本。
【免费下载链接】dujiaoka🦄独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速!🚀🚀🎉🎉项目地址: https://gitcode.com/gh_mirrors/du/dujiaoka
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考