<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>《互联网产品的客户端架构·交易、增长与平台化》 · 已发布章节索引（45 篇） on PlumePHP</title><link>https://plumephp.com/posts/books/%E4%BA%92%E8%81%94%E7%BD%91%E4%BA%A7%E5%93%81%E7%9A%84%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%9E%B6%E6%9E%84%E4%BA%A4%E6%98%93%E5%A2%9E%E9%95%BF%E4%B8%8E%E5%B9%B3%E5%8F%B0%E5%8C%96/</link><description>Recent content in 《互联网产品的客户端架构·交易、增长与平台化》 · 已发布章节索引（45 篇） on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 27 Oct 2026 23:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/posts/books/%E4%BA%92%E8%81%94%E7%BD%91%E4%BA%A7%E5%93%81%E7%9A%84%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%9E%B6%E6%9E%84%E4%BA%A4%E6%98%93%E5%A2%9E%E9%95%BF%E4%B8%8E%E5%B9%B3%E5%8F%B0%E5%8C%96/index.xml" rel="self" type="application/rss+xml"/><item><title>《互联网产品的客户端架构·交易、增长与平台化》附录 C 交易端评审清单</title><link>https://plumephp.com/inet-client-trade-appendix-c-review-checklist/</link><pubDate>Tue, 27 Oct 2026 23:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-appendix-c-review-checklist/</guid><description>可以带进评审会的交易端清单：按所有权、状态机、金额、幂等与重复、失败路径、优惠与会员、增长与实验、埋点与观测、安全与隐私、发布与回滚十组问题逐项提问，每组给出通过标准与常见缺陷，另附「未验证」栏、评审记录模板、快速版十问与不通过判据，供方案评审与上线前评审直接使用。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》附录 B 交易问题排查手册</title><link>https://plumephp.com/inet-client-trade-appendix-b-troubleshooting/</link><pubDate>Tue, 27 Oct 2026 22:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-appendix-b-troubleshooting/</guid><description>按症状组织的交易端排查手册：支付成功但订单未变、重复扣款、金额不一致、券不可用、库存显示有货却下单失败、退款不到账、会员权益不生效、漏斗数据对不上，每一类给出定性顺序、必查字段、常见原因排序、证据留存方法与升级人工的判据，并附最小信息集与时间线还原方法。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》附录 A 状态与金额速查</title><link>https://plumephp.com/inet-client-trade-appendix-a-states-and-money/</link><pubDate>Tue, 27 Oct 2026 21:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-appendix-a-states-and-money/</guid><description>把交易端最容易混淆的状态与金额字段收在一张表里：订单、支付、退款三套状态机各自的取值、迁移与终态，金额从商品价到应付、实付再到退款的分段口径与字段命名，状态之间的禁止组合，以及展示文案、按钮可用性和事件时序的对照，供评审、联调与线上排查时随手查用。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》13.3 质量场景与风险清单：进入卷四</title><link>https://plumephp.com/inet-client-trade-13-3-quality-risks-v4/</link><pubDate>Tue, 27 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-13-3-quality-risks-v4/</guid><description>收口不是把前十二章再讲一遍，而是把每条约束改写成可执行断言、证据要求与风险等级。本节给出 16 条覆盖第 1 到 12 章的质量场景，用台账函数检查断言、证据、章节覆盖与卷四移交项，并用发布门禁区分高风险阻断与中风险警告，最后说明多端、规模化与平台化为什么留给卷四。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》13.2 故障注入：重复提交、支付超时、回调乱序</title><link>https://plumephp.com/inet-client-trade-13-2-fault-injection/</link><pubDate>Tue, 27 Oct 2026 10:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-13-2-fault-injection/</guid><description>正常主线只能证明系统会走路，故障注入才能证明它不会在摔倒时抓错东西。本节在进程内注入重复提交、支付超时、回调先成功后失败、重复通知与乱序通知，用假时钟推进查询，断言只产生一笔订单、支付状态不被弱事件改写、未确认支付绝不退款，并复盘一次三类故障叠加的事故。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》13.1 端到端：选品、下单、支付、退款</title><link>https://plumephp.com/inet-client-trade-13-1-e2e-scenario/</link><pubDate>Tue, 27 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-13-1-e2e-scenario/</guid><description>前十二章分别验证了金额、库存、幂等、支付与退款，但真实事故往往发生在模块交界处。本节用五个窄端口把选品、加购、下单、支付、退款串成一条可断言主线，假实现放在测试侧，断言金额一致、只有一笔订单、未确认支付不退款，并复盘一次「每段都绿、整条链路金额对不上」的问题。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》12.3 漏斗与归因的端上边界</title><link>https://plumephp.com/inet-client-trade-12-3-funnel-boundary/</link><pubDate>Mon, 26 Oct 2026 20:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-12-3-funnel-boundary/</guid><description>端上漏斗只能回答「用户在我这里走到哪一步」，不能替服务端宣布支付或退款成功。本节定义步骤、同会话同订单、归因窗口三个口径，把能算与不能算的指标写成边界表，并给出一个按会话串联、跨会话断开、服务端事件单独计数的可运行漏斗模块，并说明对账时如何解释差异。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》12.2 上报队列、离线缓存与去重</title><link>https://plumephp.com/inet-client-trade-12-2-report-queue/</link><pubDate>Mon, 26 Oct 2026 19:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-12-2-report-queue/</guid><description>上报队列不是「失败重发」四个字。本节给出一个内存加注入存储的端上队列：批量取件、指数退避、容量上限与三种丢弃策略、崩溃后重排未确认事件，以及按 eventId 的幂等去重；测试用假时钟与内存存储推进重试，不碰真实网络，也不依赖任何第三方库。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》12.1 埋点模型与事件契约</title><link>https://plumephp.com/inet-client-trade-12-1-event-contract/</link><pubDate>Mon, 26 Oct 2026 15:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-12-1-event-contract/</guid><description>交易埋点最容易在「同名事件两个口径」上失真。本节把曝光、点击、加购、下单、支付、退款六类事件写成带 schema 版本的契约，用必填字段、命名规范与 orderId/traceId 串联把端上采集约束住，并给出可运行的校验、链路串联与 schema 差异检测模块。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》11.3 工单会话的离线与恢复</title><link>https://plumephp.com/inet-client-trade-11-3-ticket-offline/</link><pubDate>Mon, 26 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-11-3-ticket-offline/</guid><description>客服工单最容易被低估的是「用户关掉 App 之后」。消息发没发出去、重连后会不会重复、会话关闭后历史还在不在，决定了用户是否信任这个入口。本节用注入存储与假时钟实现本地缓存、离线队列、按序号补拉与去重，并复盘一次重连后消息翻倍的完整排查过程。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》11.2 售后申请的状态与证据</title><link>https://plumephp.com/inet-client-trade-11-2-aftersale-evidence/</link><pubDate>Mon, 26 Oct 2026 10:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-11-2-aftersale-evidence/</guid><description>售后申请最常见的两个问题，是证据不齐导致来回补材料，和重复提交产生多张售后单。本节把申请、审核、通过或驳回、完成写成带角色约束的状态机，按原因定义必要与可选证据，用草稿标识与订单行双重判重，并复盘一次重复申请引发退款叠加的完整修复过程与回归结果。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》11.1 客服入口与上下文携带</title><link>https://plumephp.com/inet-client-trade-11-1-support-context/</link><pubDate>Mon, 26 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-11-1-support-context/</guid><description>用户在订单页点客服，却还要第三次报订单号；问题不在客服系统，而在入口没有携带最小上下文。本节把订单号、支付单、页面来源与最近错误码写成可校验的上下文对象，用入口白名单控制字段，用脱敏函数挡住手机号与邮箱，并复盘一次多标签页上下文串单的典型问题。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》10.3 实验污染与互斥</title><link>https://plumephp.com/inet-client-trade-10-3-experiment-interference/</link><pubDate>Sun, 25 Oct 2026 20:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-10-3-experiment-interference/</guid><description>同一账号在两台手机、两个客户端版本上进入不同实验分组，是实验系统最难发现的一类污染。本节定义跨端漂移、跨版本残留、互斥组重叠、长时间未刷新与重置回流等信号，给出解析当前分组、清理旧记录和重置后防回流的纯函数模型，并复盘一次双端哈希输入不一致的典型问题。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》10.2 实验配置的本地缓存与回退</title><link>https://plumephp.com/inet-client-trade-10-2-config-cache/</link><pubDate>Sun, 25 Oct 2026 19:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-10-2-config-cache/</guid><description>实验开关、活动文案和入口配置都走远端下发，但拉取失败、版本回退、冷启动无配置才是客户端真正要处理的场景。本节把版本、ETag、有效期、默认值与交易字段隔离写成可测试的配置仓库，给出失败回退路径，并复盘一次旧版本覆盖新配置、导致活动入口消失的事故。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》10.1 实验分流与曝光口径</title><link>https://plumephp.com/inet-client-trade-10-1-experiment-split/</link><pubDate>Sun, 25 Oct 2026 15:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-10-1-experiment-split/</guid><description>结算页改版上线后先涨后跌，问题往往不在实验结论，而在分流与曝光口径。本节用哈希加盐实现稳定分流、用分层隔离并行实验、把渲染、可见、点击三种曝光分开，并给出只上报一次的曝光日志与灰度开关模型，代码可直接运行，最后复盘一次按会话分流的典型误判。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》9.3 拉新活动页的降级</title><link>https://plumephp.com/inet-client-trade-09-3-campaign-degrade/</link><pubDate>Sun, 25 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-09-3-campaign-degrade/</guid><description>活动页的失败方式比商品页多得多：配置拉不到、活动未开始、已经结束、名额耗尽、运营暂停。本节把这些情况分成「配置问题」与「业务状态」，给出缓存容忍、版本回退保护、降级目标页与降级后分享参数的规则，并附一个用假时钟与可控配置源验证的 L2 模型。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》9.2 邀请关系与绑定时机</title><link>https://plumephp.com/inet-client-trade-09-2-invite-binding/</link><pubDate>Sun, 25 Oct 2026 10:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-09-2-invite-binding/</guid><description>邀请关系是一本「谁欠谁奖励」的账，绑定时机早一步会被刷、晚一步会被截胡。本节比较点击、注册、首单三个绑定时机，拆开唯一性、可撤销与自己邀请自己的四类伪装，并给出一个把绑定判定、撤销与失败重试写成纯函数、可在本地用 24 条用例验证的可运行模型。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》9.1 分享卡片的参数与归因</title><link>https://plumephp.com/inet-client-trade-09-1-share-attribution/</link><pubDate>Sun, 25 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-09-1-share-attribution/</guid><description>分享链接不是拼几个查询参数，而是一份要穿过渠道、安装包和归因窗口的承诺。本节拆开渠道码、活动 id、邀请人、商品与时间戳的生成与校验，说明分享卡片和落地页不一致时以谁为准、参数丢失后如何兜底，并给出一个可运行、可测试的 L1 分享参数与归因模型。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》8.3 权益降级与到期提醒</title><link>https://plumephp.com/inet-client-trade-08-3-benefit-downgrade/</link><pubDate>Sat, 24 Oct 2026 20:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-08-3-benefit-downgrade/</guid><description>会员到期不是一瞬间的 UI 状态：权益会逐条失效，提醒要按节奏升级，已支付订单还要保住下单时的会员价。本节把降级拆成权益比较、提醒阶段与订单价格快照三层，说明为什么已支付订单永久锁价、待支付订单只保留到支付截止时间，并给出一个可测试的 TypeScript 模型。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》8.2 积分的加减与过期</title><link>https://plumephp.com/inet-client-trade-08-2-points-ledger/</link><pubDate>Sat, 24 Oct 2026 19:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-08-2-points-ledger/</guid><description>积分不是端上可以随便加减的余额，而是一本由发放、抵扣、退回、过期四类流水组成的账。本节说明为什么余额必须从流水重放、过期批次为什么要先到期先出、抵扣失败为什么用退回流水而不是删除，以及多端账本如何按 id 合并，并给出一个可测试的 TypeScript 账本模型。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》8.1 会员状态与权益展示</title><link>https://plumephp.com/inet-client-trade-08-1-membership-display/</link><pubDate>Sat, 24 Oct 2026 15:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-08-1-membership-display/</guid><description>会员页最容易把等级、有效期与权益状态混成一个字段：用户看到五条权益，实际只有两条可用。本节把会员快照、权益状态与会员价拆开，说明「可领取」为什么不等于「已拥有」、会员价为什么必须由服务端给出并在结算时重算，并给出一个可测试的 TypeScript 展示模型与到期提醒口径。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》7.3 优惠展示的诚实性</title><link>https://plumephp.com/inet-client-trade-07-3-discount-honesty/</link><pubDate>Sat, 24 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-07-3-discount-honesty/</guid><description>划线价、券后价与「预计省 X 元」不是三个装饰数字，而是三句可以被核验的事实陈述。本节给出划线价的展示条件、券后价与优惠金额的计算口径、不可用原因的具体文案，以及失效券保留但不给动作的展示方式，避免用不存在的原价制造假优惠。价格区因此可以按固定顺序渲染。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》7.2 叠加规则与端上预演</title><link>https://plumephp.com/inet-client-trade-07-2-stack-rules/</link><pubDate>Sat, 24 Oct 2026 10:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-07-2-stack-rules/</guid><description>会员价、活动、优惠券与积分同时出现时，叠加顺序、互斥组与舍入规则决定了用户最终付多少钱。本节把顺序固定为会员、活动、券、积分，用组声明处理互斥，用整数分逐级计算，并给出端上预演与服务端结果不一致时的对账与二次确认策略。所有金额保持整数分，叠加结果可逐项对账。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》7.1 优惠券的可用性判定</title><link>https://plumephp.com/inet-client-trade-07-1-coupon-eligibility/</link><pubDate>Sat, 24 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-07-1-coupon-eligibility/</guid><description>优惠券的「可用」不是布尔值，而是门槛、范围、有效期、领取状态与互斥关系共同裁决的结果。本节把判定顺序写成可测试的纯函数，用服务端时钟避免设备时间漂移，端上只做预筛与提示，并复盘一次因设备时间与范围并集导致的券失效事故。并给出可运行的 TypeScript 纯函数与测试。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》6.3 退款与售后状态</title><link>https://plumephp.com/inet-client-trade-06-3-refund-state/</link><pubDate>Fri, 23 Oct 2026 20:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-06-3-refund-state/</guid><description>退款不是把订单状态改成已退款，而是挂在原支付单上的一组退款单：整单退与部分退、审核中与退款中、金额分摊与到账时间都各有口径。本节用四种状态、可退额度与最大余数分摊，给出一个可测试的 TypeScript 退款模型，并说明端上展示与渠道到账时间的差异。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》6.2 支付对账的数据口径</title><link>https://plumephp.com/inet-client-trade-06-2-reconciliation/</link><pubDate>Fri, 23 Oct 2026 19:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-06-2-reconciliation/</guid><description>端上无法直接看渠道账单，只能把订单状态、支付单状态与渠道流水号三路信号按 orderId、payId、channelTxnId 对齐，再把差异分成漏单、重复、金额不符与状态不一致。本节给出一个纯函数分类器与带触发时机的待确认队列，并附真实测试输出。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》6.1 端上如何避免重复支付</title><link>https://plumephp.com/inet-client-trade-06-1-avoid-double-pay/</link><pubDate>Fri, 23 Oct 2026 15:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-06-1-avoid-double-pay/</guid><description>重复支付通常来自重复点击、重复回跳与重复轮询三个入口，而不是用户手抖。本节用支付单号去重、显式的进行中状态与超时后先查询的策略，把同一订单的多次支付尝试收敛到一张支付单上，并给出可用假时钟验证的 TypeScript 防护模块与真实测试输出。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》5.3 回调、轮询与端上确认的时序竞争</title><link>https://plumephp.com/inet-client-trade-05-3-callback-race/</link><pubDate>Fri, 23 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-05-3-callback-race/</guid><description>同一笔支付的结果会从回调、服务端推送、轮询和回跳四个方向同时到达，端上收到的顺序与事实发生的顺序无关。本节把事件写成带服务端序号的不可变记录，用去重、序号比较、来源强弱与成功吸收五条规则裁决竞争，并给出可在进程内确定性验证的 TypeScript 实现与真实测试输出。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》5.2 支付结果不确定时的状态机</title><link>https://plumephp.com/inet-client-trade-05-2-unknown-result/</link><pubDate>Fri, 23 Oct 2026 10:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-05-2-unknown-result/</guid><description>支付结果不是成功与失败两态：超时、回跳丢失与查询未决都会落入 unknown。本节用一个五态状态机表达 pending、unknown、succeeded、failed、cancelled，规定 unknown 的进入与退出、查询结果的序号与同序号优先级、成功吸收与重试条件，并附可运行的 TypeScript 模块与真实测试输出。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》5.1 支付渠道的端上编排：拉起、轮询与回跳</title><link>https://plumephp.com/inet-client-trade-05-1-pay-orchestration/</link><pubDate>Fri, 23 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-05-1-pay-orchestration/</guid><description>支付编排不是把用户送去渠道就结束：拉起成功只说明参数被接收，回跳参数只是一句口信，真正结果必须由服务端查询确认。本节把支付单号、幂等键、回跳解析、指数退避轮询与页面可见性处理写成一个可假时钟验证的 TypeScript 模块，并复盘一次把回跳当成功导致的重复扣款。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》4.3 待支付超时与取消</title><link>https://plumephp.com/inet-client-trade-04-3-payment-timeout/</link><pubDate>Thu, 22 Oct 2026 20:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-04-3-payment-timeout/</guid><description>待支付倒计时不该由本地时长递减，而要以服务端 expiresAt 为准，并用服务端时间校正本地时钟。本节讨论切后台、改系统时间、临期取消与支付回调竞争，给出一个可用假时钟验证的 TypeScript 倒计时模块、竞争裁决函数与真实测试运行输出。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》4.2 订单状态机与端上映射</title><link>https://plumephp.com/inet-client-trade-04-2-order-state-machine/</link><pubDate>Thu, 22 Oct 2026 19:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-04-2-order-state-machine/</guid><description>服务端订单状态有八种，端上却要面对按钮、倒计时、浮层与列表刷新四类副作用。本节把状态映射写成纯函数，用未知状态的前向兼容、取消与支付的竞争分支、迁移副作用的去重，说明端上如何只做翻译而不发明状态，并附一组 L1 纯函数测试与完整真实运行输出。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》4.1 提交防重：幂等键与按钮状态</title><link>https://plumephp.com/inet-client-trade-04-1-submit-idempotency/</link><pubDate>Thu, 22 Oct 2026 15:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-04-1-submit-idempotency/</guid><description>下单提交超时后，端上把「未知」当成「失败」就会诱导用户重复下单。本节用进入确认页生成的幂等键、五个内部状态与三种按钮出口，把双击、重试和返回重进收敛到同一个键上，并给出一个可用假时钟验证的 TypeScript 提交控制器与真实测试运行输出。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》3.3 失效商品、限购与勾选状态</title><link>https://plumephp.com/inet-client-trade-03-3-selection-limit/</link><pubDate>Thu, 22 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-03-3-selection-limit/</guid><description>购物车的全选、半选、失效商品与限购，最终都会落到一个数字上：结算金额。本节把勾选状态建模成可售行的三态汇总，明确失效项不可选、限购按上限截断、服务端拒绝后只回退被拒绝的行，并用可运行代码验证勾选与金额联动，附真实测试输出、一次典型复盘与边界清单。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》3.2 价格明细的端上重算边界</title><link>https://plumephp.com/inet-client-trade-03-2-price-recalc-boundary/</link><pubDate>Thu, 22 Oct 2026 10:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-03-2-price-recalc-boundary/</guid><description>价格明细不是五个孤立的数字，而是一份必须同版本的结算快照。本节拆开商品小计、优惠、运费、税费与实付五段，说明端上只能做展示层分摊与预演、不能产出最终金额，用最大余数法把优惠分摊到整数分，并用版本号拒绝过期明细，附可运行代码、测试输出与复盘推演。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》3.1 购物车归属：本地车、服务端车与合并</title><link>https://plumephp.com/inet-client-trade-03-1-cart-ownership/</link><pubDate>Thu, 22 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-03-1-cart-ownership/</guid><description>游客购物车与服务端购物车合并，是交易端最容易被低估的一次状态冲突。本节把同 SKU 的数量策略、下架与删除的处理、时间戳与多端并发写成可测试的纯函数，验证合并顺序、上限截断与本地未同步修改的保留，并复盘一次登录合并把失效商品带进结算的事故。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》2.3 库存展示：可售不等于有货</title><link>https://plumephp.com/inet-client-trade-02-3-stock-truth/</link><pubDate>Wed, 21 Oct 2026 20:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-02-3-stock-truth/</guid><description>库存展示的核心不是「有货/无货」两个状态，而是可售、锁定、预售、区域限制与数据降级五件事。本节把端上的库存判断写成纯函数，明确它只能决定「是否允许尝试」、不能承诺有货，说明取不到库存时如何安全降级，并复盘一次把区域不可售误显示成售罄的展示问题。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》2.2 SKU 选择与规格约束</title><link>https://plumephp.com/inet-client-trade-02-2-sku-constraints/</link><pubDate>Wed, 21 Oct 2026 19:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-02-2-sku-constraints/</guid><description>规格选择看起来只是几个按钮，实际是一组组合约束：哪些组合存在、哪些组合缺货、切换一个维度后哪些已选值必须失效。本节把规格目录、可选值、默认选中、价格库存联动与提交前校验写成可测试的纯函数，并复盘一次「切换颜色后仍带着旧尺码下单」的典型问题。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》2.1 商详页的三份数据：价格、库存与时效</title><link>https://plumephp.com/inet-client-trade-02-1-product-three-sources/</link><pubDate>Wed, 21 Oct 2026 15:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-02-1-product-three-sources/</guid><description>商详页的价格、库存、时效常来自三个接口、三种新鲜度，端上拼页面时很容易拼出一个「不存在的商品」。本节用字段级来源标记、年龄标注、版本一致性与库存时效校验，给出一个可运行的合并视图与下单闸门，并复盘一次价格和库存来自不同快照的典型接口与展示问题。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》1.3 lab 的三条验证线：纯计算、进程内下单、真实回调</title><link>https://plumephp.com/inet-client-trade-01-3-lab-three-tiers/</link><pubDate>Wed, 21 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-01-3-lab-three-tiers/</guid><description>交易端的测试最容易「全绿但线上出错」，因为很多问题只在进程边界与真实回调里出现。本节把 trade-lab 的验证分成 L1 纯计算、L2 进程内下单、L3 真实支付回调三级，给出每级的判定条件、命令与证据要求，并用一个可运行的分类函数把「这条逻辑该在哪一级验证」变成可执行的规则。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》1.2 trade-lab 的第一条约束：金额与订单状态归谁所有</title><link>https://plumephp.com/inet-client-trade-01-2-money-order-ownership/</link><pubDate>Wed, 21 Oct 2026 10:30:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-01-2-money-order-ownership/</guid><description>交易端的第一条约束不是选框架，而是给每个字段标注所有者：金额、库存、订单状态与支付结果归服务端，勾选与草稿归端上。本节把这条约束写成一个可测试的所有权模型，用 amountView 处理过期与预览、用 reconcileOrder 让服务端覆盖本地并记录差异，并复盘一次端上预演价覆盖服务端金额的事故。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》1.1 交易端的四条链路：浏览、下单、支付、售后</title><link>https://plumephp.com/inet-client-trade-01-1-four-chains/</link><pubDate>Wed, 21 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-01-1-four-chains/</guid><description>交易端不是「商品页加一个购买按钮」，而是浏览、下单、支付、售后四条失败边界完全不同的链路。本节逐条说明每条链路需要哪些数据、哪些字段必须由服务端裁决、失败时用户能退到哪里，并给出一个把四条链路的依赖写成常量与校验函数的 TypeScript 模型，作为 trade-lab 的起点。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》目录与学习路径</title><link>https://plumephp.com/inet-client-trade-toc/</link><pubDate>Tue, 20 Oct 2026 08:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-toc/</guid><description>卷三《交易、增长与平台化》的完整目录与学习路径：13 章 39 节，从交易端四条链路与 trade-lab 开始，依次覆盖商品库存、购物车、下单、支付、对账、优惠、会员、增长、实验、客服、埋点，最后以端到端收口；附章节依赖、三条阅读路径与读完应能回答的六个问题。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》前言</title><link>https://plumephp.com/inet-client-trade-preface/</link><pubDate>Tue, 20 Oct 2026 07:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-preface/</guid><description>卷三前言：交代四卷分工与本卷十三章的结构、写作顺序、贯穿案例「回声」的轻交易、trade-lab 的目录与三级可运行性、代码与命名约定、错误处理口径、读者对象与自检方法；附三个动手练习与勘误反馈渠道，说明为什么用 Node 26 与零第三方依赖。</description></item><item><title>《互联网产品的客户端架构·交易、增长与平台化》序：从会动到可信</title><link>https://plumephp.com/inet-client-trade-foreword/</link><pubDate>Tue, 20 Oct 2026 06:00:00 +0800</pubDate><guid>https://plumephp.com/inet-client-trade-foreword/</guid><description>卷三的序：从卷一的结构、卷二的流动，走到交易端的「可信」。交代为什么交易不能沿用内容的容错策略，四条核心判断、判断之间的互相约束、贯穿案例「回声」的轻交易场景与一笔订单的完整路径，以及本卷边界、与十三章的关系和为什么把「不确定」当成一等状态。</description></item></channel></rss>