程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
软件定制开发/软件按需定制 技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
微信支付 APIv3 退款卡在受理之后:PROCESSING 转 CLOSED、ABNORMAL、NOT_ENOUGH 怎么分
代码
微信支付 APIv3 退款卡在受理之后:PROCESSING 转 CLOSED、ABNORMAL、NOT_ENOUGH 怎么分
2026-10-23 09:01:40
申请退款返回 200 只代表受理,退款单可能几天后转 CLOSED 或 ABORMAL,钱退不出去。本文按状态机拆三种卡点:PROCESSING 超 7 天转 CLOSED 要换新 out_refund_no 重提(与接口失败必须用原单号的区别)、ABNORMAL 先退零钱失败后如何发起异常退款、NOT_ENOUGH 与分账订单出资/余额的关系,附 Go 判断片段与排查清单。
微信支付
APIv3
退款
退款异常
CLOSED
ABNORMAL
NOT_ENOUGH
支付对接
Vue Router 4 守卫做鉴权踩到的四个坑:无限重定向、刷新丢动态路由、redirect 开放跳转
编程
Vue Router 4 守卫做鉴权踩到的四个坑:无限重定向、刷新丢动态路由、redirect 开放跳转
2026-10-23 00:04:39
Vue Router 4 用导航守卫做鉴权最容易踩的四个坑:/login 未标 public 造成无限重定向、权限异步加载与 mount 顺序导致刷新被踢回登录页、addRoute 后需 return to.fullPath 重新解析、刷新丢动态路由。附守卫代码、router.isReady 启动顺序与开放重定向校验。
前端路由
Vue
Router
导航守卫
鉴权
动态路由
RDS
history 模式上线后深链接刷新 404:Nginx 回退、/api 被吞与 base 配错的排查
编程
history 模式上线后深链接刷新 404:Nginx 回退、/api 被吞与 base 配错的排查
2026-10-23 00:04:15
history 模式上线后深链接和刷新 404,分五处排查:Nginx try_files 的 $uri/ 目录索引陷阱、/api 被回退成 HTML 导致 Unexpected token '<'、Vite base 与 createWebHistory 只改一边、S3/OSS 错误文档配置、index.html 缓存引用旧 hash 资源。附症状对照表与上线前 curl 自检。
前端路由
Vue
Router
Nginx
history模式
SPA部署
订单状态机的状态语义与恢复路径:Closed 可恢复,Cancelled 只退款
编程
订单状态机的状态语义与恢复路径:Closed 可恢复,Cancelled 只退款
2026-10-23 00:03:59
把订单的「已关闭」和「已取消」合成一个终态,支付回调晚到就只能人工对账。这篇按 orderflow 的六状态枚举和 CanTransitionTo 迁移表,拆开两条恢复路径:Closed 先 QueryOrder 复核、校验金额,再走独立的 CASReopenPaid 逆向恢复并触发 OnReopened;Cancelled 保持不动,只以 (order_no, trade_no) 唯一键写退款 outbox。附 CAS 条件更新 SQL、OnPaid 失败停在 Paid 的 fallback 重扫,以及状态机适用边界。
订单状态机
状态机
支付回调
订单关单
CAS
幂等
Go
DISCARD 不是万能重置:PostgreSQL、Redis、MySQL 清理会话状态的边界与代价
编程
DISCARD 不是万能重置:PostgreSQL、Redis、MySQL 清理会话状态的边界与代价
2026-10-23 00:03:47
连接池归还连接时该跑哪条重置命令?拆开 PostgreSQL DISCARD ALL 的等价语句,指出 RESET ALL 回到会话启动值、不能在事务块内(25001)、DISCARD SEQUENCES 造成序列空洞、DISCARD PLANS 清空计划缓存的代价;对比 Redis 的 DISCARD 与 6.2 的 RESET、MySQL 的 COM_RESET_CONNECTION,并给 PgBouncer 池化模式下的取舍与上线检查清单。
DISCARD
PostgreSQL
Redis
MySQL
连接池
会话状态
微信支付调起报「支付验证签名失败」:paySign 的两种构造与 8 条排查顺序
编程
微信支付调起报「支付验证签名失败」:paySign 的两种构造与 8 条排查顺序
2026-10-23 00:03:45
小程序 wx.requestPayment 的 paySign 不是下单签名的复用:V2 按 ASCII 字典序拼串做 MD5/HMAC-SHA256 并转大写,V3 是 appid/timeStamp/nonceStr/package 四行定长串做 SHA256-RSA 再 Base64。文中给出两种签名的可复现构造、V2/V3 字段对照表,以及「支付验证签名失败」按分型逐项的 8 条排查顺序,含服务商 sp_appid/sub_appid 一致性与换行字节验证。
paySign
微信支付
小程序支付
签名验签
接口对接
支付调起
MF2 随 CLDR 47 转正:数据模型、MF1 语法对照与迁移验证
案例
MF2 随 CLDR 47 转正:数据模型、MF1 语法对照与迁移验证
2026-10-23 00:03:33
MF2 在 CLDR 47 转为 Stable,但 ICU4J/ICU4C 的 message2 仍是技术预览。本文拆开 MF2 的数据模型:声明、matcher 四条合法性约束、Syntax Error 与 Data Model Error 的分层,给出与 MF1 的四处硬差异对照(占位符、复数、转义、兜底)以及 bidi 默认策略对断言的副作用和迁移检查清单。
MessageFormat
MF2
i18n
国际化
ICU
CLDR
本地化
自动导入组件的代价:unplugin-vue-components 的配置项与三个典型故障
代码
自动导入组件的代价:unplugin-vue-components 的配置项与三个典型故障
2026-10-22 21:31:25
unplugin-vue-components 让模板里直接写组件名、不用 import 和注册,但真正的坑在配置面:globs 一写 dirs 就失效、components.d.ts 生成了却忘加进 tsconfig 的 include、组件名冲突被自动导入覆盖、懒加载路由下共享组件被重复打进多个 chunk。逐项给出配置写法与排查顺序,并说明哪些项目不该用。
Vue3
Vite
自动导入
工程化
TypeScript
Vue 3 里 1 万个输入框的更新耗时:拆分组件前后的对照实测
编程
Vue 3 里 1 万个输入框的更新耗时:拆分组件前后的对照实测
2026-10-22 21:31:03
用一个 1 万字段的表单做对照:单组件里改一个输入框会触发整组件的全量 patch,把字段拆成子组件、用 provide/inject 传数据后,父组件完全不重渲染。文中给出两份可直接跑的组件代码、计时方式,以及这套拆法的代价(隐式依赖、实例变多、类型要自己约束)和不该拆的场景。
Vue3
性能优化
provide
inject
组件粒度
onUpdated
Go 1.27.2 的两个 CONNECT 连接错位问题:反向代理侧怎么排查和处置
编程
Go 1.27.2 的两个 CONNECT 连接错位问题:反向代理侧怎么排查和处置
2026-10-22 21:04:31
Go 1.27.2 修掉两个 CONNECT 连接错位:客户端 Transport 把带 body 的 CONNECT 发出去后又把连接放回空闲池,服务端返回 2xx 却没 hijack 时继续按 HTTP 读。说明触发条件、共享 Transport 下的跨用户响应投毒与请求走私、自查命令和缓解方式。
Go
net
http
反向代理
安全
Pinia 4.1.0:六个不报错、只是不生效的地方
编程
Pinia 4.1.0:六个不报错、只是不生效的地方
2026-10-22 21:04:31
Pinia 4.1.0 里六个不报错却不生效的点:对象语法 $patch 不触发 shallowRef、dispose 被替换的 store 才告警、HMR 占位对象状态、@pinia/testing 的 SSR 改为替换语义、ESM only 与 storeToRefs 的 nullish 跳过。附代码前后对比与迁移清单。
Vue
Pinia
状态管理
SSR
OpenSSH 10.6 升级笔记:压缩、用户名和证书日期这三处先动
编程
OpenSSH 10.6 升级笔记:压缩、用户名和证书日期这三处先动
2026-10-22 21:03:38
OpenSSH 10.6 关闭 LZ77 字典编码器以缓解多路复用压缩侧信道,Compression 效果随之变差;ssh 命令行用户名拒收 $ 与反斜杠;ssh-keygen 修正夏令时导致证书过期时间偏差。附验证命令、重签检查与升级顺序。
OpenSSH
运维
安全
升级
Caddy 2.11.6 → 2.11.7 升级笔记:16 KiB 请求头上限、1 分钟 idle 超时和它引出的三个回归
编程
Caddy 2.11.6 → 2.11.7 升级笔记:16 KiB 请求头上限、1 分钟 idle 超时和它引出的三个回归
2026-10-22 21:03:38
Caddy 2.11.6 把请求头默认限制收到 16 KiB、丢弃含点号的头、加了 1 分钟 idle 超时;2.11.7 修回 HTTP/2 反代 panic、POST+SSE 整 60 秒截断、静默 SSE 被重置。给出配置片段、431 与 60 秒截断的排查顺序,以及 RFC 10036 Incremental 头的用法。
Caddy
运维
反向代理
升级
PHP 8.6 的 Io\Poll:900 连接下吞吐 3.88 倍,不用再手搓三个引用数组
编程
PHP 8.6 的 Io\Poll:900 连接下吞吐 3.88 倍,不用再手搓三个引用数组
2026-10-22 21:03:21
PHP 8.6 新增 Io\Poll:用 Context/Event/StreamPollHandle 加 watcher 元数据取代三个引用数组。整理 stream_select 的状态与 1024 fd 上限问题、第三方基准(900 连接 3.88 倍吞吐)、注册 Write 的真实语义、TLS 流 unread_bytes 的修复,以及 8.6 还缺定时器与信号。
PHP
并发
IO多路复用
性能
PHP 8.6 流错误处理:错误变成值对象,但 `@` 仍然删不掉
编程
PHP 8.6 流错误处理:错误变成值对象,但 `@` 仍然删不掉
2026-10-22 21:03:21
PHP 8.6 把流错误变成按 context 配置的值对象:error_mode/error_store/stream_last_errors,code 是枚举。给出与 error_get_last 的前后对比、选项必须写在 stream wrapper 下的报错,以及关键坑——Silent 不替代 @,域名解析失败仍从网络层先出 warning。
PHP
错误处理
流
升级兼容
MySQL 9.7.4 收紧 EXCHANGE PARTITION:两边 CHECK 都要过,交换前先跑一条 SELECT 预检
编程
MySQL 9.7.4 收紧 EXCHANGE PARTITION:两边 CHECK 都要过,交换前先跑一条 SELECT 预检
2026-10-22 21:02:17
MySQL 9.7.4 之后 EXCHANGE PARTITION 会双向校验 CHECK 约束,生成列定义不一致直接拒绝,报 ERROR 3819。说明 WITHOUT VALIDATION 只跳过分区边界、不跳过 CHECK,并给出生成列比对、交换前 SELECT 预检与失败后的回退判断。
MySQL
分区表
DDL
约束校验
升级 Go 1.27 后 JSON 接口的行为变化:v1 默默接受的输入,v2 默认报错
编程
升级 Go 1.27 后 JSON 接口的行为变化:v1 默默接受的输入,v2 默认报错
2026-10-22 21:02:02
Go 1.27 把 encoding/json 换成了 v2 后端:非法 UTF-8、对象内重复键从「静默容错」变成报错。整理两类输入的表现差异、错误文案变化的排查方式、jsontext 流式校验、v1 语义 Options 与 GOEXPERIMENT=nojsonv2 兜底,以及 format/unknown/inline 等选项的移除与改名。
Go
encoding
json
JSON
升级兼容
网络恢复了,组却回不来:MySQL 9.7.4 修掉的 Group Replication 分区恢复死循环
编程
网络恢复了,组却回不来:MySQL 9.7.4 修掉的 Group Replication 分区恢复死循环
2026-10-22 21:02:02
网络分区恢复后 Group Replication 丢了 quorum,日志反复刷 MY-013781 且写入一直挂起。给出连接 delegation 卡住重连循环的原因、三条确认依据(错误日志、成员状态、事务队列)、9.7.4 的单次非阻塞修复,以及多网卡主机同 SQL 端口的成员识别坑。
MySQL
Group
Replication
复制
故障排查
PHP 8.6 RC3 修掉两个自己引入的回归:fiber 里的 warning 和快 4% 的 hrtime()
编程
PHP 8.6 RC3 修掉两个自己引入的回归:fiber 里的 warning 和快 4% 的 hrtime()
2026-10-22 20:03:12
PHP 8.6 RC3 有一半的修复是在收拾 8.6 自己引入的回归:没有 php.ini 时 fiber 以 error_reporting=0 启动,官方 Docker 镜像里 fiber 内 warning 全部消失;hrtime() 因改用 CLOCK_MONOTONIC_RAW 在 WSL2 上快约 4%,且在 Linux 5.3 之前不走 vDSO;array_map 的快速路径在 strict_types=1 下开始做类型检查。文中给出复现片段、实测数据与 RC 阶段该验证什么。
PHP
版本升级
运维
性能
回归测试
MySQL 9.7 社区版能开 hypergraph_optimizer 了:WL#17265 的改动、五个开关与验证方法
编程
MySQL 9.7 社区版能开 hypergraph_optimizer 了:WL#17265 的改动、五个开关与验证方法
2026-10-22 20:02:09
社区版 MySQL 一直能看到 optimizer_switch 里的 hypergraph_optimizer,却开不起来。WL#17265 把它编进默认构建但仍默认关闭。本文拆清两个 CMake 选项的区别、五种开启方式的作用域差异,以及编译关闭时 SET 报 3999、启动参数被接受却不生效、SET_VAR 只给 warning 这三种表现,并用 optimizer trace 证明是否真的用上了新优化器。
MySQL
数据库
优化器
执行计划
运维
投诉回调收不到、回复一直 400、complete 调早了:微信支付消费者投诉 2.0 服务端排障
代码
投诉回调收不到、回复一直 400、complete 调早了:微信支付消费者投诉 2.0 服务端排障
2026-10-22 09:02:14
投诉单在商户后台看得到、系统里却收不到,回复接口一直返回 400,complete 调早了被用户重复投诉——这三件事都出在微信支付消费者投诉 2.0 的服务端对接细节上。文中说明回调地址必须先调创建接口、通知解密后只有 complaint_id 与 action_type、5 秒应答与重投的幂等处理、response 接口四种 400 的成因(含文档 500/200 字符不一致),以及未收到回调时怎么用详情/列表接口补单。
微信支付
支付对接
接口排障
Go
客诉处理
用户被自动退款、后台已发货:Google Play 订阅的 acknowledge 三天窗口与 RTDN 去重
代码
用户被自动退款、后台已发货:Google Play 订阅的 acknowledge 三天窗口与 RTDN 去重
2026-10-22 09:01:32
Google Play 订阅上线后出现「用户被自动退款、后台已发货」和「同一订单重复发货」两类事故,根因分别是漏掉 acknowledge 三天窗口和 RTDN 不去重。文中拆开 RTDN 的 Pub/Sub 投递语义、订阅/一次性商品/预付费各自的确认时限、PENDING 状态怎么处理、拒绝订单为何要走 revoke 而不是等窗口过期,并给出 voidedpurchases.list 兜底与一份 Go 消费骨架和排查顺序。
Google
Play
支付对接
服务端
订单幂等
Android
TCC 库存 Cancel:空回滚、悬挂、幂等怎么用一张 tcc_fence_log 收口
编程
TCC 库存 Cancel:空回滚、悬挂、幂等怎么用一张 tcc_fence_log 收口
2026-10-22 00:05:24
TCC 里库存服务的 Cancel 写成无条件 UPDATE 会把库存凭空加出来:Try 可能没到或回滚了,TC 照样发 Cancel。这篇讲清空回滚、悬挂、幂等三个问题如何用一张 tcc_fence_log 收口:主键 (xid,branch_id) 做幂等、Try 插入 tried 撞主键就拒绝、Cancel 先 SELECT FOR UPDATE 再按状态分支、条件 UPDATE 影响行数为 0 怎么处理,以及 fence 写入必须与库存变更同本地事务、useTCCFence 默认 false 这类实际踩点。
库存回滚
TCC
分布式事务
Seata
幂等
空回滚
悬挂
PgBouncer 事务池下的 prepared statement:42P05、26000、08P01 与 1.21–1.24 的版本分界
编程
PgBouncer 事务池下的 prepared statement:42P05、26000、08P01 与 1.21–1.24 的版本分界
2026-10-22 00:05:01
事务池模式下 prepared statement 为什么会在三条 backend 之间串味:42P05 名字撞车、26000 语句不在这个后端、08P01 参数个数对不上,三种报错根因不同。补 PgBouncer 1.21/1.22/1.24 的版本分界、max_prepared_statements 默认 200 的 LRU 与内存代价、DEALLOCATE ALL 在 1.21 上的历史坑,以及 pgx、asyncpg、pgJDBC、postgres.js 各自关掉命名的方法。
事务池
PgBouncer
prepared-statement
PostgreSQL
连接池
max_prepared_statements
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
335
下一页
共 335 页
到第
页
确定