独角数卡部署要几步?5分钟免费搭好开源自动发卡系统的完整指南
【免费下载链接】dujiaoka🦄独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速!🚀🚀🎉🎉项目地址: https://gitcode.com/gh_mirrors/du/dujiaoka
独角数卡(dujiaoka)是一款 MIT 协议的开源售货系统,内置商品管理、卡密库存、优惠券、多支付渠道对接与自动发货能力,配合 Laravel 队列完成邮件通知和订单超时处理,帮你把"卖卡密、卖数字商品"这件事变成一套全自动流水。下面按你从接触项目到上线运营的真实顺序来讲:先判断它是否适合你,再给出一条最短的本地跑通路径,然后讲解铺、配支付、看订单机制,最后聊定制和生产环境要注意的坑。
先对号入座:这套开源卡密售卖系统能替你做掉哪些事
如果你卖的是兑换码、影视会员、软件序列号这类"一单对应一串卡密"的虚拟商品,它基本就是为你准备的。核心解决的痛点有四类:
- 不用人工发货:买家付款成功后,系统自动从库存挑出未售卡密写进订单详情并邮件送达,全程无人值守
- 多支付渠道集中管理:支付宝、微信、PayPal、Stripe、USDT 等渠道的商户参数都收在后台,前端只展示你启用的那些
- 订单全程留痕:待支付、待处理、已完成、失败、异常等状态都有明确定义,买家可用订单号 + 查询密码自助查单
- 营销活动开箱即用:优惠券、批量批发价都是内置字段,不用自己改数据库
它也有明确的边界:核心面向"虚拟商品自动交付",实物商品的物流、售后流程需要你自己扩展。如果你是团队电商、需要 ERP 级别的供应链,那它不是合适的底座;但个人站长、小工作室用它把月流水从"手动复制粘贴卡密"解放出来,是它最典型的使用姿势。
独角数卡安装教程:从拉取代码到能访问的最短路径
环境要求很宽松:PHP 7.2.5~8.0(README 推荐 7.4)、MySQL 5.7+、Redis,Web 服务器用 Nginx 或 Apache。最短路径如下:
👉 第一步,拉代码装依赖:
git clone https://gitcode.com/gh_mirrors/du/dujiaoka cd dujiaoka composer install --no-dev --optimize-autoloader👉 第二步,数据库建库建表。这里有个和多数 Laravel 项目不同的细节:它不走php artisan migrate,而是把建表语句放在 database/sql/install.sql,由网页安装器直接导入。把站点根目录指向public/,访问你的域名即可进入安装页,依次填 MySQL 和 Redis 的连接信息——安装器会自动测试连通性、把 .env.example 里的占位符替换成你填的值写入.env、导入 SQL,并生成install.lock防止二次安装。
👉 第三步,把几项运行参数调到生产取向。.env里与日常运行最相关的行:
DB_DATABASE=dujiaoka REDIS_HOST=127.0.0.1 CACHE_DRIVER=redis QUEUE_CONNECTION=redis ADMIN_ROUTE_PREFIX=admin白话解释:
CACHE_DRIVER和QUEUE_CONNECTION决定缓存与异步任务走 Redis 而非文件;ADMIN_ROUTE_PREFIX是后台登录路径,建议改成不易猜到的值。
本地偷懒方案:仓库自带 docker-compose.yml,基于webdevops/php-nginx:7.4镜像,docker compose up后 80 端口直接可访问,.env以卷映射出来,适合先跑通再谈生产。Debian 系的手动 LNMP 流程在仓库的 debian_manual.md 里有完整记录,包括 PHP 扩展清单和disable_functions需要放行的函数。
上架第一个商品:卡密、批发价与优惠券怎么配
后台基于 Dcat Admin 构建,登录后台地址/ADMIN_ROUTE_PREFIX之后,铺货动作按这个顺序走:
- 商品分组:先在分组模块建好分类(如"视频会员"、"软件激活"),商品挂在分组下,前端首页按分组展示
- 创建商品:关键选项是交付方式——"自动发货"还是"手动处理"。自动发货商品的库存不需要手填,app/Models/Goods.php 里的读取器会直接用未售出卡密数当库存;手动处理商品则填一个库存数用于限购控制
- 导入卡密:进入卡密模块对商品做批量导入,文本每行一条即可。后续发货就是从这批记录里挑"未售出"状态的
- 设价与优惠:单价之外,
wholesale_price_cnf字段支持按数量档位设批发价(如买 3 件单价 8 折),优惠券则单独创建后关联到商品,有使用次数和有效期约束
💡 一个容易被忽略的设置:订单超时时间。买家下单后若未付款,系统会按后台配置的分钟数(默认 5 分钟)让订单自动过期,这个逻辑在 app/Service/OrderProcessService.php 里通过延迟队列任务实现,配置在系统设置中调整。
独角数卡支付配置:三步把收款渠道接上
支付渠道在 app/Http/Controllers/Pay/ 下以"一个渠道一个控制器"的方式实现,内置渠道覆盖支付宝、微信、码支付、PayJS、易支付、PayPal、V免签、Stripe、Coinbase、epusdt(USDT)、TokenPay 等,路由统一注册在 routes/common/pay.php。接入一个新渠道的完整动作只有三步:
- 后台新增渠道:在支付管理页选一个内置渠道类型,填入商户参数(应用 ID、商户号、私钥等)。不同渠道需要的字段不同,比如支付宝需要
app_id和密钥对,统一存入pay_gateways表 - 验证并启用:保存后前端结算页就会多出这个支付选项,用小额真实订单走一遍支付与回调
- 确认回调可达:每个渠道都有独立的
notify_url异步通知地址,服务器必须能被渠道方访问到,且站点开了 HTTPS 时后台.env里要把ADMIN_HTTPS设为true,否则会出现签名或登录异常
⚡ 回调是发货的触发器——渠道方确认扣款后 POST 到你的notify_url,控制器验签通过才会调completedOrder()走发货,所以"付款了但没发货"十有八九是回调地址不通或验签失败,先查这两处。
跟着一张订单走:下单、支付与自动发货的幕后流程
把前面几节串起来,一张自动发货订单的完整生命周期是这样跑的:
| 阶段 | 发生什么 | 状态值 |
|---|---|---|
| 下单 | 生成 16 位订单号,按单价×数量、批发价、优惠券算出实付金额;优惠券立即标记已用 | 待支付(1) |
| 等待付款 | 延迟任务到期后,未支付订单被标记过期,占用的优惠券回退 | 过期(-1) |
| 支付回调 | 校验金额一致后进入发货事务,金额对不上直接拒绝 | — |
| 自动发货 | 按购买数量挑出未售卡密,写入订单详情,卡密标记已售出,邮件发给买家 | 已完成(4) |
| 手动发货 | 订单转为待处理并邮件提醒站长,人工补货后再标记完成 | 待处理(2) |
发货的核心逻辑集中在processAuto()里,精华就这几行:
$carmis = $this->carmisService->withGoodsByAmountAndStatusUnsold($order->goods_id, $order->buy_amount); $order->info = implode(PHP_EOL, $carmisInfo); // 卡密逐行写入订单详情 $order->status = Order::STATUS_COMPLETED; $this->carmisService->soldByIDS($ids); // 卡密置为已售出 MailSend::dispatch($order->email, ...); // 队列异步发邮件注意三个健壮性设计:整个发货包在数据库事务里,卡密数不够会把订单标成"异常"而不是扣错库存;金额用bccomp高精度比对,防浮点误差;邮件、订单推送(Server酱、Telegram、Bark、企业微信)和第三方回调(ApiHook)全部丢进队列,由app/Jobs/下的任务异步执行,主流程不被拖慢。
独角数卡二次开发:改订单逻辑、换界面、加渠道
想动它的代码,先认准三个下手位置,基本能覆盖 90% 的定制需求:
- 订单逻辑:所有下单、发货、过期行为都收敛在 app/Service/OrderProcessService.php,它是普通类而非单例绑定,可以按 Laravel 的方式替换绑定,注入一个继承它的子类覆盖
processAuto()等方法,原逻辑一行不用删 - 支付扩展:新渠道照抄一个现有控制器的骨架即可——实现
gateway()拉起支付、notifyUrl()接收回调并调completedOrder(),再到 routes/common/pay.php 注册两条路由,前端支付选项随之生效 - 界面定制:前台模板有三套(unicorn、luna、hyper),静态资源分别在
public/assets/下对应目录,后台换皮则走 Dcat Admin 的主题机制;下单前的风控可在DujiaoBoot、PayGateWay等中间件里挂钩子,极验验证已有现成实现可参考
改完记得:订单更新会触发
OrderUpdated事件、商品删除触发GoodsDeleted事件,如果你的逻辑要随业务动作联动,挂在事件/监听器上比硬塞进控制器更干净。
上线前必看:队列、安全与备份三件事
生产环境最常见的翻车点,独角数卡这里恰好都能提前堵上:
🔒队列必须常驻——邮件、订单过期、推送都靠queue:work消费,建议用 Supervisor 守护,核心配置:
[program:laravel-worker] command=php /var/www/dujiaoka/artisan queue:work autostart=true autorestart=true✅安装收口:.env里APP_DEBUG置为false;install.lock存在后安装页不可再访问,迁移服务器时记得一并带过去;后台路径用ADMIN_ROUTE_PREFIX改掉默认的admin,再配合 HTTPS 全站启用
📮邮件与备份:SMTP 配好才能收到发货和待处理提醒;orders、goods、carmis三张表是店铺全部家当,按日做数据库备份并演练一次恢复,再配合 Redis 持久化,基本可以安心跑量
性能层面,热点数据(商品详情、系统配置)已经走缓存驱动,队列异步化也省掉了请求内等待,通常单台小规格机器配合 OPcache 就能支撑中小站点的流量,瓶颈一般先出现在数据库,给orders.order_sn、email这类查询字段留好索引即可。
写在最后
从 clone 到首单自动发货,独角数卡的完整路径大概就是:装环境 → 网页安装 → 传卡密 → 配支付,一天之内完全能跑起来。后续想深挖安装细节、支付渠道对接或二次开发,建议以仓库内的debian_manual.md和后台系统设置页为入口对照着看,遇到版本相关的问题也可以先到社区里搜一下,大概率前人踩过同样的坑。
【免费下载链接】dujiaoka🦄独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速!🚀🚀🎉🎉项目地址: https://gitcode.com/gh_mirrors/du/dujiaoka
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考