优惠码泄露:怎样保护伙伴的专属码
伙伴优惠码如何流到折扣站和浏览器插件、哪些数据信号说明码泄露了,以及用 Stripe 限制和归因规则把损失控制住。
优惠码泄露,指的是某位伙伴的专属优惠码流到了优惠码聚合站或浏览器插件里,从没看过这位伙伴内容的买家在结账时用上了它,这笔成交却记在了伙伴名下。以一个每月 $49 的套餐为例,优惠码给前三个月 8 折,佣金是每张发票的 20%、持续 12 个月;如果买家本来就会按原价购买,那么在每月 5% 流失率下,每一次泄露兑换大约让你损失 $112:约 $28 是折扣,约 $84 是佣金。你没法阻止优惠码被复制,但可以让泄露被看见、让它变便宜。专属码、兑换上限、过期时间、仅限首单,再加上一条写清楚的"码和点击谁优先"的规则,能把损失控制在你事先定好的数字以内。
什么是优惠码泄露?
伙伴优惠码本来应该跟着伙伴的内容走:播客主持人口播,YouTuber 写在视频简介里,通讯作者印在测评下方。泄露就是码脱离了内容独自传播。买家在伙伴从未发布过的地方看到这个码,用了它,成交却归到了一个什么也没做的伙伴名下。
泄露通常不是伙伴在作弊。大多数时候,码是按约定正常分享出去的,然后被别人捡走了。这一点决定了你该怎么处理:和码被泄露的伙伴第一次沟通,重点应该是把码修好,而不是指责对方。
四条常见的泄露路径
- 优惠码聚合站。它们从公开页面、用户投稿和自己的测试购买中收集优惠码,然后去抢"品牌名 + coupon code"这类搜索词的排名。本来已经在你定价页的买家顺手一搜,找到码再回来下单。
- 浏览器优惠插件。结账时它们识别到折扣输入框,就从自己的数据库里挨个试码,买家通常只需要点一下按钮。一个码只要成功过一次,往往就会一直留在数据库里。
- 薅羊毛社区和论坛。有人在你所在品类的讨论帖里留一句"这个码还能用",这条帖子可能连续几个月都在带来兑换。
- 客户转给同事。买家把码转发给团队里的同事。这是最温和的一种,而且常常是真正的增量,因为同事没有这个码可能就不会买。
浏览器插件已经受到平台规则约束。Google 在 2025 年 3 月更新了 Chrome 应用商店的联盟广告政策,并从 2025 年 6 月 10 日起执行:插件只能在用户主动操作之后添加联盟链接、代码或 cookie,必须披露联盟计划,而且联盟链接必须和用户当时得到的直接好处绑定;一个找优惠码的插件,如果没有找到任何优惠,就不能插入联盟链接 [3]。不过这条政策管的是插件自己的联盟链接,并不能阻止插件把你伙伴的优惠码填进结账框——而这正是本文讨论的泄露。
泄露的优惠码是怎样抢走归因的
优惠码对伙伴计划有价值,恰恰因为它不需要点击就能归因。听众在播客里听到一个码,一周后手动输入,即使从没点过任何链接,这笔成交也会记给主持人。同一个特性也让泄露变得昂贵:无论买家在哪里看到这个码,它都会归因,所以一个泄露的码会悄悄把自然流量和付费搜索带来的买家,变成"伙伴带来的成交"。
它还可能从另一位伙伴那里抢走成交。假设一位买家读了某位博主的对比文章,点了博主的链接,拿到了推荐 cookie;结账时插件却自动填上了某位播客主的泄露码。如果你的规则是"码优先于 cookie",佣金就归了播客主,真正干活的博主一分也拿不到。伙伴们对比点击数和到账成交时很快就会发现这种情况,这是失去内容型伙伴信任最快的方式之一。
一次泄露兑换要花多少钱
看一个示例计划:每月 $49 的套餐,伙伴码前三个月 8 折(在 Stripe 里是一张 duration 为 repeating、持续 3 个月的 coupon [1]),佣金是每张已付发票的 20%、持续 12 个月,按客户实际支付金额计算。假设这位买家即使没有码也会按原价订阅。
不考虑流失时算法很直接。折扣是 3 × ($49 × 20%) = 3 × $9.80 = $29.40。三张打折发票的佣金是 3 × ($39.20 × 20%) = 3 × $7.84 = $23.52,九张原价发票的佣金是 9 × $9.80 = $88.20。泄露总成本:$29.40 + $23.52 + $88.20 = $141.12。如果每月流失率是 5%,客户预计支付打折发票 1 + 0.95 + 0.95² = 2.85 张、原价发票约 6.34 张,成本降到 2.85 × $9.80 + 2.85 × $7.84 + 6.34 × $9.80 ≈ $27.95 + $22.36 + $62.13 = $112.45。
| 每月泄露兑换次数 | 0% 流失时成本 | 5% 流失时成本 | 如果码设了 50 次上限 |
|---|---|---|---|
| 10 | $1,411 | $1,125 | $1,125(未触及上限) |
| 40 | $5,645 | $4,498 | $4,498(未触及上限) |
| 100 | $14,112 | $11,245 | $5,623(到 50 次即停) |
最后一列就是本文的重点。你发现不了的泄露,损失没有上限;设了上限的码即使泄露,最大损失也是已知的,而且这个数字是你在创建码的时候定的,不是事后才知道的。
怎样发现优惠码泄露
泄露本身你很少能直接看到,你看到的是它在归因数据里留下的影子。下面每个信号都是拿伙伴和他自己的历史比,因为伙伴之间差别很大:播客主的成交天然大多是"只有码、没有点击",而对比测评博主的成交大多来自链接点击。
| 信号 | 正常情况 | 泄露时的样子 | 先查什么 |
|---|---|---|---|
| 仅码占比:推荐期内没有点击过该伙伴链接、却记在该伙伴名下的客户占比 | 对这位伙伴来说稳定,无论高低 | 一个月内急升,比如从 20% 变成 70% | 搜索"品牌名 coupon""品牌名 promo code",看码有没有出现 |
| 每周兑换次数与该伙伴过去 8 周均值相比 | 新内容发布后上升,然后回落 | 没有新内容却超过均值 3 倍以上 | 问伙伴这周发了什么 |
| 点击过其他伙伴链接的买家使用了这个码 | 很少见 | 反复出现,尤其是点过对比或测评内容的买家 | 查哪些伙伴因为这个码丢了成交 |
| 兑换量远超伙伴的受众规模 | 在其渠道合理覆盖范围内 | 一个小创作者的码,兑换次数比其播放量能解释的多得多 | 把兑换次数和近期播放或打开数对比 |
| 兑换的时间分布 | 集中在节目、视频或邮件发布之后 | 不管有没有发布,每天都平稳地来几单 | 把发布日期叠加到兑换日期上看 |
"每天平稳地来几单"值得特别强调。真实的伙伴内容会产生先冲高再回落的曲线:节目上线,一两周内码陆续进来,然后慢慢变少。聚合站和插件带来的流量不在乎发布日期。一位每月只发两次内容的创作者,他的码却每天固定有三四次兑换、天天如此,几乎可以肯定是在别处被人找到了。
Stripe 会记录每个促销码被使用的次数(API 里的 times_redeemed 字段),所以不需要额外工具也能盯住原始数字 [2]。归因数据补上的是上下文:这些兑换有没有伴随点击。
哪些 Stripe 促销码设置能保护伙伴码?
Stripe 把折扣本身(coupon)和面向客户的字符串(promotion code,促销码)分开。多个促销码可以指向同一张 coupon,而促销码有自己的一组控制项:限定某位客户、仅限首单、最低订单金额、过期时间和兑换次数上限 [1]。每一项都会缩小泄露码能被谁用上的范围。
| 设置 | 作用 | 如何限制泄露 | 代价 |
|---|---|---|---|
| 促销码的 max_redemptions | 限制总兑换次数,不能超过 coupon 自身的上限 [2] | 给成本封顶;达到上限后码永久失效 | 老实又受欢迎的伙伴也会碰到上限,要提前准备替换码 |
| 促销码的 expires_at | 到某个时间点后码失效,不能晚于 coupon 的 redeem_by [1] | 旧码不再在聚合站上流通 | 长青内容(老视频)里的码会失效,需要更新简介 |
| restrictions.first_time_transaction | 只有没有任何历史交易的客户才能兑换 [1] | 老客户和回流的试用用户不能在续费或升级时用泄露码 | 对多数计划没有代价,伙伴佣金本来就针对新客户 |
| restrictions.minimum_amount | 要求最低金额,只在首笔付款时检查 [1] | 如果泄露集中在最便宜的套餐,可以把码挡在外面 | 给真正的小额买家增加了门槛 |
| 促销码的 customer | 只有指定的一位客户能兑换 [1] | 适合销售发出的码,不适合公开的伙伴码 | 不能用于面向受众的码 |
| active = false | 归档促销码而不删除 coupon [1] | 可以立刻停用泄露的码并发一个新的 | 已经印出去的旧码失效,要先告诉伙伴 |
| coupon 的 duration:once、repeating、forever | 折扣作用于多少张发票 [1] | 折扣期越短,每次泄露兑换越便宜 | 对伙伴真实受众的吸引力变弱 |
Stripe 文档里有两个细节在实际操作中很重要。第一,促销码达到 max_redemptions 或 expires_at 后会永久失效、不能重新启用,所以设上限的同时就要规划好接替的码 [1]。第二,处于启用状态的码字符串必须唯一,但你可以先归档一个码,再用同样的字符串新建一个促销码 [1]。这就是在不改变伙伴受众记住的那个词的前提下"重置"泄露码的方法:归档 SAM20,再新建一个带新上限、新过期时间的 SAM20。
还要确认你的结账流程真的按你以为的方式接受优惠码。在 Stripe Checkout 里,只有当会话开启了 allow_promotion_codes 时才会出现输入码的框 [4]。如果你直接把折扣传给会话,买家根本不用输入码,也就没有东西可泄露——销售谈下来的折扣就应该这样设置。
专属码、一次性码和限量码怎么选
最有效的保护,是给每种用途选对码的形态。一共三种,大多数计划三种都需要。
- 面向受众的专属码,每位伙伴一个(SAM20)。播客、视频和印刷品离不开它,因为受众得记住一个词。一定要加上限和过期时间,并按固定周期续期。
- 一次性码(max_redemptions = 1),字符串随机生成。适合一对一场景:伙伴引荐了某位具体买家、网络研讨会的参会名单、抽奖中奖者。一次性码就算泄露,也只值一次兑换。
- 单篇内容的活动码(SAM-OCT-REVIEW)。把一个码绑定到一个视频或一期通讯上,过期时间设短一点。如果泄露了,你知道它来自哪篇内容,而且时间窗口很小。
对受众码来说,一个合理的起点是:上限设为伙伴最好月份兑换量的 3 倍左右,过期时间 6 个月,到期用同样的字符串续期。某位伙伴最好的一个月有 15 次兑换,上限就是 45;如果两周就用完了,你要么了解到他受众的新情况,要么发现了一次泄露,两者都值得聊一聊。
优惠码应该压过最后一次点击吗?
同时使用链接和优惠码的计划,都需要一条书面规则来处理两者指向不同伙伴的情况。可行的规则有三种,区别它们的关键正是泄露风险。
| 结账时的情况 | 链接优先(cookie 压过码) | 码优先(码压过 cookie) | 码优先,但被标记的码降级 |
|---|---|---|---|
| 伙伴 A 的 cookie,伙伴 A 的码 | A | A | A |
| 伙伴 A 的 cookie,伙伴 B 的码 | A | B | B;如果 B 的码已被标记为泄露,则归 A |
| 没有 cookie,伙伴 B 的码 | B | B | B;如果码已被标记,则先暂缓审核 |
| 伙伴 A 的 cookie,没有码 | A | A | A |
码优先是常见的默认规则,因为输入优惠码是买家的主动选择,我们自己的优惠码指南也这样建议。但它也是最容易被泄露利用的规则,因为插件可以替买家做这个"选择"。链接优先保护了内容型伙伴,却低估了播客和视频,因为对它们来说码是唯一的归因方式。第三种规则保留码优先作为默认,同时给你一个杠杆:某个码出现泄露信号时你把它标记出来,从那以后,其他伙伴的 cookie 就能压过它。
无论选哪种,都要在需要用到之前就写进计划条款。争议发生后才出现的规则,看起来像是在针对某位伙伴裁决;从第一天就挂在页面上的规则,只是规则而已。
伙伴条款里关于折扣站该怎么写?
条款拦不住第三方,但能讲清楚伙伴自己的义务,并在伙伴就是源头时给你采取行动的依据。条款要短、要具体。
- 伙伴不得把自己的码提交到优惠码、折扣或返现网站以及浏览器插件,也不得引导受众这样做。
- 伙伴不得投放"品牌名 + coupon / promo / discount"之类关键词的搜索广告。
- 优惠码有兑换上限和过期时间,品牌按公布的周期续期;如果某个码出现泄露信号,品牌可以在通知伙伴后将其归档。
- 某个码被标记为泄露后,其他伙伴的推荐 cookie 优先于该码;该码在其伙伴没有任何点击情况下产生的兑换,可以暂缓审核。
- 佣金在保留期结束后才可支付;保留期内发现因违反上述条款而产生的兑换,将被冲回。
第 5 条能落地,靠的是保留期。RelayWonder 默认佣金在 30 天保留期之后才变为可支付。在这个窗口内发现的泄露,可以在任何钱流出去之前通过冲回记录解决,这比事后找伙伴要钱容易得多。
发现泄露码之后怎么办
一套简短固定的流程,能让处理既适度,又不得罪伙伴。
- 确认。在聚合站页面上找到这个码,或在插件里复现它被自动填入,并核对识别表里至少两个信号。
- 改动任何东西之前先告诉伙伴。说明你发现了什么、你并不认为是他发出去的,以及接下来会怎么处理。
- 归档泄露的促销码(active = false)并创建替换码。如果伙伴的受众记住了这个词,就沿用同样的字符串,配上新的上限和过期时间;否则换一个新字符串,并帮伙伴更新各处简介。
- 决定保留期内佣金的去留。一个公平的默认做法:有点击、或能明确对应到伙伴内容的兑换保留;泄露期间符合泄露特征的"仅码"兑换冲回。
- 请聚合站删除这个码。有的会照办,很多不会;不管怎样,归档后的码已经不能用了。
- 用同样的信号观察替换码 4 周,再结案。
每一步都要留记录。只追加、不修改的账本在这里很有用:冲回会以负数行的形式出现在原始佣金旁边,伙伴能清楚看到哪些兑换被移除、为什么,半年后你自己也能看懂。
RelayWonder 如何处理伙伴优惠码
在 RelayWonder 里,每位伙伴都可以有一个以 Stripe 促销码形式创建的专属码,兑换后发票会直接归因到这位伙伴,不需要点击。佣金按每张 Stripe 发票计算,退款和争议会在只追加的账本里生成负数行,默认 30 天的保留期让你有时间在佣金可支付之前复核一个码。上文提到的上限、过期时间和仅限首单,都是促销码本身在 Stripe 里的设置,所以无论买家在哪里看到这个码,结账时都会生效。
本周可以做的优惠码保护清单
- 列出所有启用中的伙伴促销码,标出哪些既没有 max_redemptions 也没有 expires_at——这些就是你没有上限的风险敞口。
- 给每个受众码加上约为该伙伴最好月份 3 倍的兑换上限和 6 个月的过期时间。
- 给所有伙伴码打开"仅限首单"。
- 用品牌名加"coupon""promo code""discount code"搜索,记下出现了哪些伙伴码。
- 逐位伙伴,把本月的仅码占比和他过去三个月对比。
- 把优先级规则写进伙伴条款,包括码被标记之后怎么处理。
FAQ
伙伴计划里的优惠码泄露是什么?
指伙伴的专属折扣码被买家在伙伴从未发布过的地方找到并兑换,通常是优惠码聚合站或浏览器插件。这些成交会记在伙伴名下,尽管并不是他的内容促成的。在 $49 套餐、码 8 折、佣金 20% 持续 12 个月的示例里,每月 5% 流失率下每次这样的兑换约损失 $112。
怎么判断某个伙伴码已经泄露?
把这位伙伴的仅码占比(记在他名下、但没有点击过他链接的客户占比)和他自己的历史对比。一个月内从 20% 左右跳到 70%,或者兑换每天平稳出现、完全不随他的发布节奏变化,是最强的信号。然后用品牌名加"coupon"搜索,找到码出现在哪里。
哪些 Stripe 设置能限制泄露码造成的损失?
Stripe 促销码支持 max_redemptions、expires_at、仅限首次交易、最低金额以及限定单个客户。达到上限或过期的码会永久失效。你可以归档一个码,再用同样的字符串新建一个,以此重置它。
优惠码应该压过推荐链接的点击吗?
很多计划让码优先,因为输入码是买家的主动选择。但这条规则最容易被泄露利用,因为插件可以替买家填码。折中做法是默认码优先,但一旦某个码被标记为泄露,其他伙伴的 cookie 就可以压过它。
浏览器优惠插件可以使用联盟码吗?
Chrome 应用商店政策自 2025 年 6 月 10 日起执行,要求插件披露联盟计划、只在用户主动操作后行动,并把任何联盟链接、代码或 cookie 与用户的直接好处绑定。没找到优惠的插件不得插入联盟链接。但这条政策并不禁止插件填入伙伴公开发布的折扣码。
通过泄露码赚到的佣金该怎么处理?
先告诉伙伴,再复核仍在保留期内的佣金。公平的默认做法是保留有点击或能明确对应到伙伴内容的兑换,冲回符合泄露特征的仅码兑换。有 30 天保留期,大部分处理都能在付款之前完成。
Sources
- Stripe 文档:Coupons and promotion codes · coupon 的持续时间、兑换上限,促销码的限制项(指定客户、首单、最低金额、过期),停用以及复用码字符串。2026 年 10 月核对。
- Stripe API 参考:Create a promotion code · max_redemptions、expires_at、customer、restrictions 参数以及 times_redeemed 字段。2026 年 10 月核对。
- Chrome for Developers:Chrome 插件联盟计划政策更新 · 2025 年 3 月联盟广告政策更新、2025 年 6 月 10 日起执行,以及优惠码插件的示例。2026 年 10 月核对。
- Stripe API 参考:Create a Checkout Session · allow_promotion_codes 与 discounts 参数。2026 年 10 月核对。