ThinkPHP免签支付系统搭建与安全实践指南

简介:这是一套基于ThinkPHP8框架开发的个人免签收款系统源码,面向个体商户、小微开发者及PHP学习者,解决普通收款码无法自动回调通知、缺乏自主收款后台的痛点,适用于微信/支付宝个人码快速接入商城、知识付费、小程序后端等轻量级支付场景。压缩包共1376个文件,含467个PHP核心逻辑文件、471个PNG界面资源、156个JS交互脚本、84个CSS样式文件及Layui+PearAdmin后台UI组件,另含.env配置、composer依赖锁、.htaccess安全规则、SQL建表语句及手机监控.apk配套应用,整体22.03MB。已有331人学习下载,提供完整可运行环境(PHP 8.2+)、清晰目录结构、安装教程与Travis CI持续集成配置,开箱即用且支持二次定制,是理解免签支付回调机制与ThinkPHP8企业级后台开发的优质实践样本。

1. 免签支付系统不是“免审免管”,而是用 ThinkPHP 搭建合规可追溯的个人收款闭环

“全新版本码支付个人免签支付系统源码 ThinkPHP框架开发 全开源 亲测.zip”——这个标题在开发者圈里高频出现,但很多人点开后才发现:所谓“免签”,不是绕过监管的黑盒通道,而是指不依赖第三方支付平台 SDK 接入、不强制绑定商户资质认证的轻量级扫码收款方案。它本质是构建一个「前端展示二维码 + 后端接收异步通知 + 本地记录交易流水」的最小可行闭环,适用于个体经营者、小微服务场景(如社区维修、家教课时费、线下活动报名)中对资金到账时效性要求不高、但对操作自主性和数据私有性有明确诉求的用户。这类系统不处理银行卡直连、不触达清算层,所有资金仍经由微信/支付宝官方渠道完成,只是把“生成订单→唤起支付→监听结果→更新状态”这一链路由你自己的服务器控制。我曾帮某高校创业实验室部署过类似系统,他们需要给学生社团活动收押金,既不能让学生填银行卡信息,又得避免用个人收款码被限额封禁——最终就是靠 ThinkPHP 封装微信 JSAPI 支付 + 本地 SQLite 记账 + 管理后台手动核验的方式跑通了整套流程。关键不是“能不能跳过审核”,而是“怎么让每一笔钱都有据可查、可导出、可对账”。


2. 从源码包解压到首页可访问:ThinkPHP 6.1 环境下的最小启动路径

拿到.zip包后,别急着导入数据库或改配置。先确认它是否基于 ThinkPHP 6.x(当前主流稳定分支),因为 TP5 和 TP6 的目录结构、路由写法、中间件注册方式差异极大,硬套会直接 500。我们以最常遇到的 TP6.1 版本为例,走一遍从解压到首页渲染的完整链路。

2.1 解压与目录结构校验:识别真实框架版本和入口文件

解压后,首先进入根目录,执行:

ls -la

重点看是否存在以下特征文件:

  • think(TP6+ 的命令行入口,TP5 是thinkphp目录下)
  • app/目录下是否有controller/Index.php或controller/index/Index.php
  • config/app.php中'app_debug' => true是否默认开启(生产环境必须关)

提示:如果看到public/index.php里包含require __DIR__ . '/../vendor/autoload.php';,基本可断定是 Composer 管理的 TP6+;若只有thinkphp/目录且无vendor,大概率是 TP5 打包版,需切换 PHP 版本(TP5 最高兼容 PHP 7.4,TP6 要求 PHP 7.2+,推荐 8.0+)。

确认为 TP6 后,将整个项目目录放到 Web 服务器根路径(如 Nginx 的root /var/www/html/pay/),然后访问http://your-domain.com/public/。若看到 ThinkPHP 默认欢迎页,说明基础环境 OK;若报错No input file specified.,说明未正确配置public/为 Web 根目录——这是新手翻车第一高发点。

2.2 数据库初始化:用 migrations 替代手动 SQL 导入更可控

很多同类型源码包附带sql/目录下的.sql文件,但直接mysql -u root -p < pay.sql容易因字符集、引擎、字段类型不匹配失败。TP6 原生支持迁移(migration),更推荐用它:

# 进入项目根目录 cd /var/www/html/pay # 初始化迁移文件(若源码已含 migrations 目录则跳过) php think migrate:create InitPayTables # 编辑刚生成的 migration 文件(路径类似 app/database/migrate/20230501000000_init_pay_tables.php) # 在 up() 方法中写入建表逻辑,例如: public function up(MigrationBuilder $migration) { $migration->create('pay_orders', function (CreateTable $table) { $table->id(); $table->string('out_trade_no', 64)->comment('商户订单号'); $table->string('trade_no', 128)->nullable()->comment('微信/支付宝交易号'); $table->decimal('amount', 10, 2)->comment('金额(元)'); $table->string('status', 20)->default('unpaid')->comment('状态:unpaid/paid/closed'); $table->datetime('paid_at')->nullable()->comment('支付时间'); $table->timestamps(); }); } # 执行迁移 php think migrate:run

这样做的好处是:迁移可回滚(php think migrate:rollback)、可版本化管理、能自动适配不同 MySQL 版本的语法差异。我见过太多人因sql文件里用了JSON类型(MySQL 5.7+ 才支持)而在低版本上卡死,用 migration 就天然规避了。

2.3 支付渠道配置:微信 JSAPI 与支付宝 PC 网站支付的双轨接入要点

该类系统通常同时支持微信扫码(面向手机用户)和支付宝 PC 网站支付(面向电脑端)。配置不在config/app.php,而是在config/pay.php或app/config/pay.php。核心参数如下表:

参数名微信 JSAPI 示例值支付宝 PC 示例值说明
driver'wechat''alipay'驱动标识,决定调用哪个 SDK
app_idwx1234567890abcdef2023000123456789平台分配的 AppID,非公众号原始 ID
mch_id1900000100—微信商户号,支付宝无此字段
keyabcd1234efgh5678ijkl9012mnop3456MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...微信 API 密钥(32位)或支付宝应用私钥(PKCS#1 PEM)
notify_urlhttps://pay.your-domain.com/api/notify/wechathttps://pay.your-domain.com/api/notify/alipay异步回调地址,必须公网可访问、HTTPS、且在微信/支付宝后台白名单中

注意:支付宝的key不是“应用公钥”,而是你用 OpenSSL 生成的应用私钥(-----BEGIN RSA PRIVATE KEY-----开头),微信的key是你在商户平台设置的 32 位纯字母数字密钥。填反会导致签名始终失败,但错误日志里只显示invalid sign,非常玄学。

验证配置是否生效,可临时在控制器里写个测试方法:

// app/controller/Test.php <?php declare (strict_types = 1); namespace app\controller; use think\Controller; use think\facade\Db; class Test extends Controller { public function index() { // 测试数据库连接 $count = Db::name('pay_orders')->count(); // 测试微信 SDK 实例化(需先安装 yansongda/pay) try { $wechat = \Yansongda\Pay\Pay::wechat(config('pay.wechat')); return json(['db_count' => $count, 'wechat_ready' => true]); } catch (\Exception $e) { return json(['error' => $e->getMessage()]); } } }

访问/test,若返回wechat_ready: true,说明支付 SDK 已加载成功。


3. 支付回调接口的安全加固:为什么 90% 的“亲测可用”源码在这里翻车

支付回调(notify)是整个系统的命门。微信/支付宝会向你的notify_url发送 POST 请求,携带加密签名。如果没做严格校验,攻击者可伪造请求,把“未付款”订单改成“已付款”,直接导致资损。这也是所谓“亲测可用”源码包最常被忽略的致命漏洞。

3.1 回调验签的三重过滤:IP 白名单 + 签名验证 + 订单幂等性

标准流程必须包含以下三步,缺一不可:

  1. IP 白名单校验(微信):微信回调只从固定 IP 段发起(如182.131.10.1/32),需在回调入口处拦截非白名单 IP:
// app/controller/Api/Notify.php public function wechat() { $ip = request()->ip(); $weixin_ips = [ '182.131.10.1', '182.131.10.2', '182.131.10.3', '140.207.67.1', '140.207.67.2' ]; if (!in_array($ip, $weixin_ips)) { Log::error("WeChat notify from illegal IP: {$ip}"); return 'FAIL'; // 必须返回 FAIL 字符串,不能是 JSON } // 后续验签... }
  1. 签名验证(核心):不能只比对sign字段,必须用官方 SDK 的verify()方法:
use Yansongda\Pay\Pay; $wechat = Pay::wechat(config('pay.wechat')); $data = $wechat->verify(); // 自动解析 POST 数据、验签、返回解密后的数组 if ($data && $data['return_code'] === 'SUCCESS' && $data['result_code'] === 'SUCCESS') { // 验签通过,进入业务逻辑 } else { return 'FAIL'; }
  1. 订单幂等性校验(防重放):同一out_trade_no只能成功处理一次:
$order = Db::name('pay_orders') ->where('out_trade_no', $data['out_trade_no']) ->find(); if (!$order) { Log::error("Order not found: {$data['out_trade_no']}"); return 'FAIL'; } if ($order['status'] === 'paid') { Log::info("Order already paid: {$data['out_trade_no']}"); return 'SUCCESS'; // 已支付,直接返回 SUCCESS } // 更新订单状态 Db::name('pay_orders')->where('id', $order['id'])->update([ 'trade_no' => $data['transaction_id'], 'status' => 'paid', 'paid_at' => date('Y-m-d H:i:s'), ]);

提示:很多源码包的回调逻辑直接写成if($_POST['result_code']=='SUCCESS'){ update status; },完全没做 IP 过滤和签名验证,等于把钱箱钥匙挂在门口。

3.2 日志埋点:回调失败时必须记录原始 POST 数据

当验签失败或订单不存在时,仅返回FAIL是不够的。必须记录原始请求体,用于后续排查:

file_put_contents( RUNTIME_PATH . 'log/notify_raw_' . date('Ymd') . '.log', '[' . date('Y-m-d H:i:s') . "] IP: " . request()->ip() . " DATA: " . json_encode($_POST, JSON_UNESCAPED_UNICODE) . "\n", FILE_APPEND );

否则一旦出问题,你连微信到底发了什么都不知道,只能干瞪眼。


4. 常见问题排查:5 条血泪经验总结出的必踩坑清单

这类系统上线后,80% 的问题集中在环境、配置、网络三方面。以下是我在多个模拟项目 X 中反复验证过的典型故障点,按现象→原因→解决结构整理:

4.1 现象:首页空白,Nginx 报 500 错误,错误日志显示PHP Parse error: syntax error, unexpected token "enum"

原因:源码使用了 PHP 8.1+ 的enum语法,但服务器 PHP 版本为 7.4 或 8.0。ThinkPHP 6.1 要求 PHP ≥ 7.2,但部分扩展代码可能依赖高版本特性。
解决:执行php -v确认版本,若低于 8.1,需升级 PHP 或替换掉enum定义(如改为class Status { const UNPAID = 'unpaid'; })。

4.2 现象:生成二维码后微信提示“该链接无法访问”,但浏览器能正常打开

原因:微信 JSAPI 支付要求redirect_uri必须在公众号后台「JS 接口安全域名」中备案,且协议、域名、端口、路径必须完全一致(https://pay.your-domain.com/pay?order=123和https://pay.your-domain.com/pay/?order=123视为不同)。
解决:登录微信公众号平台 → 「公众号设置」→ 「功能设置」→ 「JS 接口安全域名」,添加pay.your-domain.com(不带 http/https,不带路径)。

4.3 现象:支付宝回调一直返回验签失败,但用支付宝沙箱工具测试签名却通过

原因:支付宝回调参数中sign_type字段值为RSA2,但源码中config/pay.php里配置的sign_type是RSA,SDK 内部用错算法验签。
解决:检查config/pay.php中支付宝配置项,确保'sign_type' => 'RSA2',且私钥是用RSA2方式生成的(OpenSSL 命令中加-sha256参数)。

4.4 现象:订单状态始终为unpaid,数据库无任何更新,但微信后台显示已支付成功

原因:notify_url地址未在微信商户平台「API 安全」中配置,或配置了 HTTP 地址但实际是 HTTPS 站点(微信强制要求 HTTPS 回调)。
解决:登录微信商户平台 → 「产品中心」→ 「开发配置」→ 「API 安全」→ 「回调URL」,填写https://pay.your-domain.com/api/notify/wechat,并确保 SSL 证书有效。

4.5 现象:后台订单列表分页失效,点击第2页返回空数据

原因:源码使用了 ThinkPHP 的paginate()方法,但未在数据库查询中指定主键字段,TP6 默认用id,若你的订单表主键是order_id或oid,则分页 SQL 会拼错。
解决:在分页查询处显式指定主键:Db::name('pay_orders')->field('*')->order('id desc')->paginate(10, false, ['query' => request()->param(), 'page' => input('page/d', 1), 'primary_key' => 'id']);


5. 生产环境加固与审计就绪:让系统真正“可交付”的 3 个硬动作

跑通功能只是起点,要让这套系统能真正交到客户手上、经得起内部审计或第三方检查,必须完成以下三件事。它们不炫技,但每一件都直击交付红线。

5.1 关闭调试模式并移除敏感信息输出

config/app.php中必须确保:

'app_debug' => false, 'show_error_msg' => false, 'log' => [ 'level' => ['error', 'notice'], // 禁用 debug/info 日志 ],

更重要的是,检查所有控制器、模型中是否残留dump()、print_r()、var_dump()。这些在开发期方便,上线后就是信息泄露口。我曾在一个模拟项目 X 的订单创建逻辑里发现一行Log::info('Debug data: ' . json_encode($params));,里面包含了用户手机号和身份证号前 6 位——这种低级错误必须人工逐行扫。

5.2 数据库凭证与支付密钥的环境隔离

绝对禁止在config/pay.php或config/database.php中硬编码密码。正确做法是使用.env文件:

# .env DB_HOST=127.0.0.1 DB_PORT=3306 DB_NAME=pay_db DB_USER=pay_user DB_PASS=StrongPass123! WECHAT_APP_ID=wx1234567890abcdef WECHAT_MCH_ID=1900000100 WECHAT_KEY=abcd1234efgh5678ijkl9012mnop3456

然后在config/database.php中读取:

'hostname' => env('DB_HOST', '127.0.0.1'), 'database' => env('DB_NAME', ''), 'username' => env('DB_USER', ''), 'password' => env('DB_PASS', ''),

部署时,.env文件不进 Git,由运维单独配置。这招能避免密钥随代码泄露,也是等保 2.0 基础要求。

5.3 交易流水导出与对账单生成:用 Excel 替代截图的合规习惯

客户最常提的需求不是“多酷炫”,而是“怎么跟微信账单对得上”。系统必须提供按日期范围导出 CSV/Excel 的能力。ThinkPHP 6 配合phpoffice/phpspreadsheet库可轻松实现:

use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; public function exportOrders() { $start = input('start', date('Y-m-d', strtotime('-7 days'))); $end = input('end', date('Y-m-d')); $orders = Db::name('pay_orders') ->whereBetweenTime('paid_at', $start, $end) ->select(); $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->fromArray([ ['订单号', '支付渠道', '金额(元)', '支付时间', '状态'], ]); $row = 2; foreach ($orders as $o) { $sheet->fromArray([ [$o['out_trade_no'], $o['channel'], $o['amount'], $o['paid_at'], $o['status']], ], null, 'A' . $row); $row++; } header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="orders_' . $start . '_' . $end . '.xlsx"'); $writer = new Xlsx($spreadsheet); $writer->save('php://output'); }

导出的 Excel 表头必须与微信商户平台「交易中心」→ 「下载账单」的字段一一对应(如out_trade_no对应「商户订单号」,transaction_id对应「微信支付订单号」),这样财务才能用 Excel 的 VLOOKUP 函数自动勾稽,而不是靠肉眼比对截图——这才是真·降本增效。

最后说句实在话:这类系统的价值,从来不在“免签”二字,而在于把原本散落在微信聊天记录、支付宝账单截图、手写记账本里的零散交易,收束到一个你完全掌控的数据库里。它不帮你规避监管,但它让你在监管框架内,把每一笔钱的来龙去脉,记得清、查得到、说得明。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

Transformer单轮对话机器人源码解析与训练调优实战

Transformer单轮对话机器人源码解析与训练调优实战

简介&#xff1a;这是一套基于Transformer架构的单轮对话聊天机器人完整项目&#xff0c;面向Python开发者、NLP初学者以及需要完成毕业设计或课程设计的在校学生。资源内含可直接运行的Python源码、已训练好的词表与小规模模型文件&#xff0c;并配套详细项目使用说明&#xf…

2026/10/20 11:32:30 阅读更多 →
智能客服两大核心模块:问题解答与投诉处理的落地实践

智能客服两大核心模块:问题解答与投诉处理的落地实践

做智能客服项目这几年&#xff0c;我最大的感受是&#xff1a;“问题解答”和“投诉处理”这两个模块&#xff0c;看着简单&#xff0c;真正做得好的项目没几个。很多团队把精力全花在对话界面上&#xff0c;结果系统上线之后&#xff0c;用户问一句常规问题答非所问&#xff0…

2026/10/20 11:32:30 阅读更多 →
PaddleOCR打包EXE离线部署:CPU/GPU自动切换与模型热更新

PaddleOCR打包EXE离线部署:CPU/GPU自动切换与模型热更新

简介&#xff1a;本资源是一个基于PaddleOCR构建的离线文字识别工具打包成品&#xff0c;面向无Python运行环境的终端用户及希望快速部署OCR能力的开发者。它解决了在受限系统&#xff08;如客户机、内网办公机&#xff09;中无法安装依赖、调用模型的痛点&#xff0c;仅需双击…

2026/10/20 11:31:29 阅读更多 →

最新新闻

teledart 机器人鸿蒙化适配:从云端到边缘节点的迁移实践

teledart 机器人鸿蒙化适配:从云端到边缘节点的迁移实践

前阵子我们团队把一套基于 teledart 的 Telegram 机器人自动化系统&#xff0c;从云端服务器整体迁移到了鸿蒙设备上。这套系统原本承担告警推送、定时巡检、远程指令执行这些运维工作&#xff0c;迁移的原因也很直接&#xff1a;希望让机器人能力真正落到边缘设备&#xff0c;…

2026/10/20 12:19:11 阅读更多 →
Smarty与Twig的SSTI利用原理及Cookie会话稳定性攻防解析

Smarty与Twig的SSTI利用原理及Cookie会话稳定性攻防解析

1. 项目概述&#xff1a;一次真实的Web安全实战复盘&#xff0c;从模板引擎漏洞到会话稳定性的底层逻辑你有没有遇到过这样的情况&#xff1a;明明已经拿到目标网站的源码片段&#xff0c;也确认了后端用了Smarty或Twig这类主流PHP模板引擎&#xff0c;但就是卡在“怎么让代码执…

2026/10/20 12:19:11 阅读更多 →
AI检测率太高?从原理到工具实测的降AI率完整指南

AI检测率太高?从原理到工具实测的降AI率完整指南

AI检测率这件事&#xff0c;最近把本科生折腾得不轻。交上去的论文或报告&#xff0c;明明是自己一个字一个字敲的&#xff0c;查一遍AI率却提示偏高&#xff1b;反过来&#xff0c;有些段落确实借助了AI辅助&#xff0c;又怕被严格一点的分辨器一眼识别出来。这篇指南写给正在…

2026/10/20 12:19:11 阅读更多 →
SM202 PROFIBUS-DP主站通讯配置与现场故障排查实战

SM202 PROFIBUS-DP主站通讯配置与现场故障排查实战

1. 为什么聊SM202&#xff1a;一次现场通讯故障的复盘但凡做过DCS与现场智能设备联调的人&#xff0c;大概率都遇到过这种场景&#xff1a;现场仪表、变频器或者阀门定位器死活通讯不上&#xff0c;手操器排查了半天&#xff0c;最后发现不是仪表问题&#xff0c;而是主站侧压根…

2026/10/20 12:19:11 阅读更多 →
DeepSeek API入门:Python调用大模型实现文本生成与情感分析

DeepSeek API入门:Python调用大模型实现文本生成与情感分析

简介&#xff1a;面向自然语言处理领域的开发者&#xff0c;这份围绕DeepSeek API从入门到精通的PDF技术资料&#xff0c;从账号注册、获取API Key到依赖库安装、请求参数配置、请求构建与返回数据处理&#xff0c;覆盖API调用的完整链路&#xff0c;给出明确可循的操作指引。文…

2026/10/20 12:19:11 阅读更多 →
基于卷积神经网络的人体动作跟踪研究:从数据到时序建模的实战路径

基于卷积神经网络的人体动作跟踪研究:从数据到时序建模的实战路径

1. 先搞清楚研究对象&#xff1a;动作跟踪比动作识别多了什么如果有人拿着"基于卷积神经网络的人体动作跟踪研究"这个题目来找我聊&#xff0c;我通常第一句话不是问用了哪个网络&#xff0c;而是先反问一句&#xff1a;你这里的"跟踪"&#xff0c;到底想跟…

2026/10/20 12:18:10 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →