程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
软件定制开发/软件按需定制 技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
Stripe 沙箱退款永远成功:异步退款、拒付与卡级状态污染怎么复现
代码
Stripe 沙箱退款永远成功:异步退款、拒付与卡级状态污染怎么复现
2026-11-13 09:03:46
沙箱里用普通测试卡发起的退款立即成功、之后不再变化,线上却会出现 pending→succeeded 和 succeeded→failed。按退款、争议、Radar 拦截、卡级状态四条线,给出能复现这些行为的测试卡和代码要补的分支。
Stripe
支付测试
退款
风控
支付接口
USDT TRC20 出款:广播返回 true 但用户没到账,7 个坑与重试设计
代码
USDT TRC20 出款:广播返回 true 但用户没到账,7 个坑与重试设计
2026-11-13 09:02:31
TRC20 出款最典型的故障是广播超时后被当成失败重建,用户收到两笔。按构造、签名、广播、回执四步拆开,讲清 fee_limit 单位是 sun、BANDWITH_ERROR 与能量无关、DUP_TRANSACTION_ERROR 不代表上链、打包成功不等于执行成功,以及只重播同一份签名字节的幂等表设计。
USDT
TRC20
出款
波场
链上对账
支付接口
微信支付平台证书模式:/v3/certificates 返回的是 AES-256-GCM 密文,刷新时 clear() 会漏签
编程
微信支付平台证书模式:/v3/certificates 返回的是 AES-256-GCM 密文,刷新时 clear() 会漏签
2026-11-13 00:04:12
证书模式下 /v3/certificates 返回的 ciphertext 是 AES-256-GCM 密文而非 PEM,要按 associated_data=certificate 加 APIv3 密钥解出来。讲清首次为何只能用 CertificateDownloader.jar、解密四类报错分型、serial_no 别从 X509 反推、刷新间隔小于 12 小时、未知 serial 懒加载的单飞与冷却,以及刷新里 clear() 只留一张导致换证期漏签的实现 bug。
证书模式
微信支付
平台证书
APIv3
接口对接
验签
加密字段做等值查询:信标截断几位 HMAC、分几个区,以及存量数据补不回来
编程
加密字段做等值查询:信标截断几位 HMAC、分几个区,以及存量数据补不回来
2026-11-13 00:04:05
加密字段要支持等值查询,常见做法是截断 HMAC 生成信标与密文同存。这篇讲清三个参数的互相拉扯:截断位数、分区数、误报与查询扇出,附误报量级估算公式、看字段频率分布的 SQL、按分区扇出的 Go 示意代码,以及存量数据无法回填、偏斜与相关字段不适用等判据。
可搜索加密
信标
数据库加密
HMAC
字段级加密
加密字段
@dataProvider 在 PHPUnit 12 静默失效:测试照跑,报的是 0 passed
编程
@dataProvider 在 PHPUnit 12 静默失效:测试照跑,报的是 0 passed
2026-11-13 00:03:56
升级 PHPUnit 12 后 @dataProvider 注释被静默忽略,测试照跑却报 ArgumentCountError: 0 passed。按 provider 必须 public static、数据集个数与签名对齐、discovery 阶段不能碰 DB/网络三条规则逐条给报错原文与修法,附 autoload-dev 坑、迁移顺序和 12.x 后续硬弃用清单。
PHPUnit
PHP
单元测试
测试
数据提供者
自托管 zrok2 后客户端还在连 api-v1.zrok.io:默认值与 3022/1280 端口边界排障
编程
自托管 zrok2 后客户端还在连 api-v1.zrok.io:默认值与 3022/1280 端口边界排障
2026-11-13 00:03:48
自托管 zrok2 时最容易踩的两个坑:客户端 ZROK2_API_ENDPOINT 为空仍指向公共 api-v1.zrok.io,以及把 OpenZiti 的 3022(direct TLS)和 1280(mTLS)塞进 Caddy。给出默认值清单、端口接线、zrok2 status 核对方法、frontend Host 头与 host_match 的关系、zrok2-init 的观察顺序,以及公网 IPv4/CGNAT 这个绕不开的前提。
zrok
OpenZiti
内网穿透
自托管
反向隧道
Docker
aria2 自建 RPC 下载服务:先 curl 验通,再谈 AriaNg
编程
aria2 自建 RPC 下载服务:先 curl 验通,再谈 AriaNg
2026-11-13 00:03:25
AriaNg 连 aria2 一直「未连接」,多数不是密码错,而是 token: 前缀放错地方:JSON-RPC 里 params 首项必须是 "token:SECRET",而 AriaNg 输入框只填明文 secret。附 curl 直验 aria2.getVersion、rpc-listen-all 与 Docker 端口发布面(发布端口不受 ufw 过滤)、nginx 反代 /jsonrpc 的 Upgrade 与 basic auth 冲突、session 文件缺失导致不启动、用 system.listMethods 做免密钥健康检查。
aria2
下载工具
AriaNg
Docker
运维实战
用 @tanstack/ai-vue 接流式对话:SSE 端点、useChat 与工具审批
代码
用 @tanstack/ai-vue 接流式对话:SSE 端点、useChat 与工具审批
2026-11-12 21:32:08
用 @tanstack/ai-vue 在 Vue 3 里接流式 AI 对话:服务端 chat() + toServerSentEventsResponse 返回 SSE,客户端 useChat 必须传 threadId、connection 与 fetcher 二选一,返回值是只读 ref;toolDefinition 一份定义服务端客户端共用,needsApproval 通过 interrupts 审批,并给出什么情况下不值得引入这套 SDK。
Vue
TypeScript
大模型
SSE
开源项目
Pinia Colada 实战:query key、enabled 与缓存失效的坑
编程
Pinia Colada 实战:query key、enabled 与缓存失效的坑
2026-11-12 21:31:30
Pinia Colada 在 Vue 3 里做数据获取层的实操记录:query key 必须是函数、inject 在 query 函数里重拉时失效、store 里消费 query 会让它永生、enabled 暂停共享查询、分页用 placeholderData 保留旧数据、清缓存要先 cancel 再 remove、setQueryData 会强置 status=success。
Vue
Pinia
前端
缓存
TypeScript
MySQL 9.7 弃用 FLUSH PRIVILEGES:多数脚本里它本来就多余,顺手把 Connection Control 换成组件
编程
MySQL 9.7 弃用 FLUSH PRIVILEGES:多数脚本里它本来就多余,顺手把 Connection Control 换成组件
2026-11-12 21:06:19
MySQL 9.7 把 FLUSH PRIVILEGES 标为弃用,执行即产生 warning,FLUSH_PRIVILEGES 权限、mysqladmin flush-privileges/reload 也在弃用清单里。而这条语句在 GRANT/REVOKE 之后本来就是冗余的,真正受影响的是一堆初始化 SQL 和运维脚本。另附 Connection Control 从插件换成 component_connection_control 的替换顺序,以及失败登录计数表搬到 performance_schema 后的监控改法。
MySQL
数据库运维
权限管理
升级
Go 1.28 小 key 哈希从 AES 换成 wyhash:swissmap 转正后,旧 map 基准不再可比
编程
Go 1.28 小 key 哈希从 AES 换成 wyhash:swissmap 转正后,旧 map 基准不再可比
2026-11-12 21:04:33
Go 1.28 把 map 小 key 的哈希从 AES 换成 wyhash,阈值按微架构不同:Zen 4 是 8 字节、Apple M1 Max 是 16 字节,arm64 的延迟阈值还没做。同时 swissmap 成为唯一实现,mapaccess2 被内联进 mapaccess1,interface key 的哈希折入动态类型 typehash。文章说明为什么这意味着旧 map 基准不再可比、GOEXPERIMENT=swissmap 失效。
Go
运行时
哈希表
性能
nginx 1.31.0 拒收 h2/h3 里的 Connection、Keep-Alive:先排查前面那台 1.1 网关
综合
nginx 1.31.0 拒收 h2/h3 里的 Connection、Keep-Alive:先排查前面那台 1.1 网关
2026-11-12 21:04:23
nginx 1.31.0 按 RFC 9113 强制校验:HTTP/2、HTTP/3 请求里出现 Connection、Proxy-Connection、Keep-Alive、Transfer-Encoding、Upgrade,或 TE 不是 trailers,一律拒绝。以前这些字段只是被忽略,现在会直接挂。文中给出三类高危链路(自研 SDK 复用 1.1 头表、1.1 网关回源透传、h2 里发 Upgrade)、抓包复现与十步升级检查清单。
nginx
HTTP
2
运维
反向代理
Go 1.28 开发分支:复合字面量按目标类型省略,函数参数、append、switch 已支持
编程
Go 1.28 开发分支:复合字面量按目标类型省略,函数参数、append、switch 已支持
2026-11-12 21:03:06
Go 1.28 开发分支已经落地讨论十年的提案 #12854:复合字面量在目标类型可推断时可省略元素类型,覆盖 struct 字面量、函数参数、append、copy、delete、switch 和与有类型操作数的比较。文中列出已合入的 CL、仍走旧规则的边界(两侧都无类型的比较)、go 指令决定语言版本,以及用 -lang 对比验证的办法。
Go
语言提案
类型推断
编译器
Rolldown 1.3 把 preserveModules 文件名改回 Rollup 规则:data.json 变成 data.json.js
代码
Rolldown 1.3 把 preserveModules 文件名改回 Rollup 规则:data.json 变成 data.json.js
2026-11-12 21:01:56
Rolldown 1.3.0 是 minor 版本,但两处变更会让升级卡住:preserveModules 的文件名开始遵循 Rollup,data.json 变成 data.json.js、Comp.vue 变成 Comp.vue.js,把 exports 指向旧文件名的库要跟着改;CLI 的 --input 不能再和位置参数入口混用。另附 import attributes 实验开关、构建报告目录,以及为什么不应在 Vite 里用 overrides 强灌 1.3.0。
Rolldown
Vite
前端构建
打包工具
Go 1.27.4 / 1.26.11 修 12 个 CVE:先重建 net/http 服务,再处理 --sysroot 构建失败
编程
Go 1.27.4 / 1.26.11 修 12 个 CVE:先重建 net/http 服务,再处理 --sysroot 构建失败
2026-11-12 20:02:30
Go 1.27.4 与 1.26.11 一并修 12 个 CVE:11 个在 cgo 构建链,1 个是 net/http 里 MaxBytesReader 超限时写 Connection: close 的竞态崩溃。前者要换工具链、后者要重新构建并重部署。附 12 个 CVE 对照表、--sysroot 与 -target 被拒后交叉编译报 invalid flag 的两种修法及取舍、用 toolchain 行钉补丁版本,以及 govulncheck 查不到标准库点版本时如何确认。
Go
安全
CVE
cgo
构建
PHP 8.5.12 升级笔记:两个未授权 RCE 的缓解配置,以及几条会反噬的“土办法”
编程
PHP 8.5.12 升级笔记:两个未授权 RCE 的缓解配置,以及几条会反噬的“土办法”
2026-11-12 20:01:24
PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 修复两个 CVSS 9.2 的未授权 RCE(CVE-2026-109618 OOM 半初始化、CVE-2026-109619 残留全局状态)。给出 FPM pool php_admin_value 下发 memory_limit=-1、post_max_size 组合、session.upload_progress.enabled=0、fatal_error_backtraces=0 的可复制写法,说明为什么 RLIMIT_AS/RLIMIT_DATA 是反坑、ini_set() 与 .user.ini 无效,并附同批 8.5.11 的 FPM IPv6 ACL 绕过与 OpenSSL 回退 CN 等修复清单和升级后验证步骤。
PHP
安全
运维
PHP-FPM
CVE
只下交易账单永远对不上银行到账:微信资金账单里的手续费与逐笔余额
代码
只下交易账单永远对不上银行到账:微信资金账单里的手续费与逐笔余额
2026-11-12 09:02:51
对账时订单数对得上、金额却总差一截,差额正好等于当天手续费——因为只下了交易账单。这篇讲微信资金账单 /v3/bill/fundflowbill 与 tradebill 的口径差:一笔支付在资金账单里是「交易收入 + 手续费支出」两行,充值/提现/分账/代金券只在资金账单里;三个账户(BASIC/OPERATION/FEES)要分别下、分别校验。附 Go 解析片段:每行字段前的反引号怎么剥、汇总行怎么识别、用账户结余做逐笔连续性校验,以及记账时间不等于退款成功时间、3 QPS、次日 10 点后取、只保留近三个月这些边界。
微信支付
对账
资金账单
Go
CSV
MySQL 报 ERROR 1461(max_prepared_stmt_count 16382):先看 Com_stmt_close 是不是 0
案例
MySQL 报 ERROR 1461(max_prepared_stmt_count 16382):先看 Com_stmt_close 是不是 0
2026-11-12 00:04:59
MySQL 抛 ERROR 1461「Can't create more than max_prepared_stmt_count statements (current value: 16382)」时,用 Com_stmt_prepare/Com_stmt_close 的差值判断是语句泄漏还是配额不够;说清全局配额与每连接缓存的乘法关系、PDO 与 Connector/J 的默认模式,以及 performance_schema 定位持有语句最多的连接。
预处理语句
MySQL
prepared
statement
数据库排障
nf_conntrack: table full 排障:count/max 看不出丢包,判据在 drop 列与 hashsize
编程
nf_conntrack: table full 排障:count/max 看不出丢包,判据在 drop 列与 hashsize
2026-11-12 00:04:36
应用侧只报 i/o timeout、connection refused,真正线索是 dmesg 里的 nf_conntrack: table full, dropping packet。这篇讲清判据:先看 /proc/net/stat/nf_conntrack 的 drop、early_drop、insert_failed 累计列,而不是盯 count/max 使用率;再讲 max 默认等于 buckets、只加 max 不加 hashsize 只加长链、buckets 只在初始 netns 可写、容器每 netns 独立表导致宿主机看不出、sysctl -p 在模块未加载时静默失败,以及止血与找源的顺序。
运维排障
nf_conntrack
netfilter
网络排障
Linux运维
验签总差在 `%21` 和 `!` 之间:空格、`~`、`!` 在三套 URL 编码规则里的分歧
编程
验签总差在 `%21` 和 `!` 之间:空格、`~`、`!` 在三套 URL 编码规则里的分歧
2026-11-12 00:04:04
同一串参数值在 PHP urlencode、rawurlencode、Go QueryEscape、PathEscape、JS encodeURIComponent 下输出不同:空格是 + 还是 %20、~ 是 %7E 还是原样、! 编不编码。附五函数输出对照、Go 源码里的 encodePathSegment 分支,以及签名验签不一致时的逐层排查顺序。
URL编码
PHP
Go
JavaScript
签名
接口对接
同一用户并发请求排队、CPU 却不高:PHP 会话锁的持有边界与后端默认值
编程
同一用户并发请求排队、CPU 却不高:PHP 会话锁的持有边界与后端默认值
2026-11-12 00:03:49
PHP 默认 files 会话在 session_start() 时对会话文件取 flock 排他锁,同一 session 的并发请求被串行化:FPM worker 打满但 CPU 不高、慢日志时间花在 session_start()。给出现象判据、strace/lsof 证据链、session_write_close 与 read_and_close 的持锁边界,以及 memcached 默认加锁、phpredis 默认不加锁的差异和 Redis 会话的三个配置约束。
会话状态
PHP
Session
并发
Redis
Web
微信支付退款 ABNORMAL:钱已从基本户扣出,停在退款中间账户
编程
微信支付退款 ABNORMAL:钱已从基本户扣出,停在退款中间账户
2026-11-12 00:03:35
微信支付退款单状态 ABNORMAL 不是退款失败:资金已从基本户扣出、停在退款中间账户。分清申请阶段 403 USER_ACCOUNT_ABNORMAL、终态 CLOSED 与 ABNORMAL 三种「退款异常」,给出 apply-abnormal-refund 的路径、原退款单号规则、type 两种处理的取舍与 Go 侧状态分流。
退款异常
微信支付
支付接口
ABNORMAL
接口对接
GoBackup:一个 Go 二进制,把数据库和目录按 cron 备份到 20+ 种存储
编程
GoBackup:一个 Go 二进制,把数据库和目录按 cron 备份到 20+ 种存储
2026-11-11 21:34:14
GoBackup 是 Go 写的单二进制备份工具,一份 YAML 把 MySQL/PG/Redis 和目录按 cron 推到 S3/OSS/SCP 等 20 多种存储。这篇记配置结构、keep 回收、加密与热重载命令,以及它不负责恢复这件事。
GoBackup
备份
MySQL
PostgreSQL
YAML
lazysql:用 Vim 键位在终端连库,跑完 SELECT 就回代码
编程
lazysql:用 Vim 键位在终端连库,跑完 SELECT 就回代码
2026-11-11 21:33:01
lazysql 是 Go 写的终端数据库客户端,Vim 键位 + 三栏 TUI,支持 MySQL/PG/SQLite/MSSQL/ClickHouse。这篇记录安装、连接串与 TOML 配置写法,以及 ReadOnly 只读开关为什么要给生产库打开。
lazysql
Go
MySQL
PostgreSQL
终端工具
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
352
下一页
共 352 页
到第
页
确定