简短答案
如果你的银行卡确实被拒,这个拒绝来自你的银行,经由Stripe处理,而不是来自Whizi,所以解决办法是换一张卡或联系银行。银行为什么一开始就会拦截AI订阅付款,以及如何判断你遇到的是六种常见原因中的哪一种,可以参考银行卡被拒时如何为AI付费一文。Whizi本身没有任何银行卡被拒的提示文案。银行卡信息是在Stripe托管的结账页面上输入的,这个页面在Whizi代码库之外,Whizi的Stripe网络钩子处理程序也没有任何支付被拒的提示信息可以显示给你。
所以,如果你看到的错误信息带有Whizi的措辞,那就不是一次拒付,而是下面列出的某一条字符串,每一条都有各自不同的原因和解决办法。
最容易被误认为是拒付的三种情况:
| 你看到的内容 | 含义 | 该怎么做 |
|---|---|---|
A $1 intro trial has already been used with this payment method. | 这张银行卡已经使用过新人试用价 | 按正常价格订阅,或者换一张没有使用过新人试用价的银行卡。重试没有用 |
Pricing is temporarily unavailable. | Whizi无法从Stripe读取价格表 | 请稍后再试。你这边无法解决这个问题 |
Failed to create Stripe checkout session. | 结账请求失败,后端没有返回任何提示信息 | 重试一次。如果反复出现,请联系客服 |
Whizi后端在结账时返回的所有错误
这些错误来自服务器,因此都带有HTTP状态码和错误代码,方便客服在网络请求记录中核对。每一个后端错误响应体都是{"error": {"code": "...", "message": "..."}}这种JSON格式,代码就紧挨着提示信息。下表按HTTP状态码排序。
| 提示信息 | HTTP | 代码 | 触发条件 |
|---|---|---|---|
A plan and billing cycle are required. | 400 | invalid_checkout_request | 结账请求体无法被解析 |
Invalid plan or billing cycle. | 400 | invalid_plan_or_cycle | 套餐或计费周期无法匹配到Stripe中已知的价格 |
No subscription item found for the active subscription. | 400 | subscription_item_missing | 一次原地套餐变更针对的订阅上没有任何订阅项 |
The supplied discount must be an active 100% promotion code or coupon ID. | 400 | invalid_discount | 提供的代码不是有效的100%优惠码或优惠券ID |
Temporary email addresses are not allowed. Please use a permanent email address. | 400 | disposable_email_blocked | 登录账号的邮箱在临时邮箱域名名单上 |
A $1 intro trial has already been used with this payment method. | 403 | duplicate_trial_payment_method | 这张银行卡的指纹信息已经使用过新人试用价 |
User not found. | 404 | not_found | 结账路由无法读取你的用户记录 |
Pricing is temporarily unavailable. | 503 | pricing_unavailable | 无法从Stripe读取本地化价格表 |
针对每一条该怎么做。新人试用价被拒的情况在下面单独有一节。Pricing is temporarily unavailable.是服务器端的问题:HTTP 503,出现在无法从Stripe读取本地化价格表时,你的账号里没有任何设置能改变这一点。Failed to create Stripe checkout session.根本不是服务器返回的消息,这也是它没有说明具体原因的原因:这是网站自己的兜底文案,会在结账请求失败且后端没有返回任何信息时出现。这两种情况都是等待并重试。
A plan and billing cycle are required.和Invalid plan or billing cycle.都表示请求里没有携带服务器能识别的套餐,这时应该从定价页面重新开始,在那里选择套餐以及按月或按年的选项,而不是重复使用一个旧的或被修改过的结账链接。
User not found.表示你的会话指向了一条服务器无法读取的用户记录。请退出登录,重新登录,然后再次开始结账。
No subscription item found for the active subscription.出现在套餐变更过程中,而不是首次购买时,并且无法通过界面自行解决,请联系客服。
结账页面打开之前,网站显示的错误
这些错误来自浏览器,而不是服务器,所以都没有HTTP代码。它们大体上都表示同一件事:Whizi在为你的账号准备交接给Stripe的过程中出现了故障,因此从未尝试过任何扣款。
| 提示信息 | 触发条件 |
|---|---|
Failed to create Stripe checkout session. | 结账请求失败,后端没有返回任何提示信息 |
Could not open checkout. Please try again. | 升级弹窗的结账请求抛出了错误,且没有提示信息 |
Authentication failed. Please sign in again. | 结账前的令牌获取请求没有返回任何内容 |
Failed to save user before checkout. | 结账前保存用户信息的请求没有成功 |
Could not prepare your account for checkout. | 定价页面无法在结账前保存用户信息 |
Missing user or Stripe customer details. | 结账时用户ID缺失 |
Checkout response did not include a Stripe URL. | 结账成功,但既没有返回URL,也没有返回订阅ID |
Something went wrong while starting your trial. Please try again. | 定价页面通用的试用开通失败提示 |
遇到列表中的任何一条,请退出登录,重新登录,再从定价页面重新开始结账。这可以解决结账前令牌获取请求没有返回任何内容的情况,也就是Authentication failed. Please sign in again.所报告的问题。
Checkout response did not include a Stripe URL.是个例外:它意味着请求其实成功了。在你再次尝试付款之前,先打开账号设置,看看是否已经存在一个订阅。
还有两条会出现在登录和注册页面,当你先选套餐、后进行身份验证时:Signed in, but checkout could not start. Please choose your plan again.和Your account was created, but checkout could not start. Please sign in and choose your plan again.两者都表示账号部分已经成功,只有交接环节失败了。你的账号是存在的,去定价页面重新选择套餐即可。
还有一种会造成莫名其妙失败的原因:连续多次重试结账可能会触发限速机制,返回HTTP 429和Too many requests. Please wait and try again.同一个账号上的每一个请求,无论走哪条路由,都计入每分钟30次的上限。请等一分钟,而不是继续点击。
新人试用价被拒,重试也无法解决
A $1 intro trial has already been used with this payment method.是HTTP 403,代码为duplicate_trial_payment_method。这是本页所有结账错误里唯一一个无论怎么重试都不会消失的错误。
这项检查是与银行卡绑定的,而不是与账号绑定的:当这张银行卡的指纹信息已经使用过新人试用价时,就会返回这个拒绝。
如果你正在搜索这条错误,有一个细节要注意:这段字符串确实写的是"$1",尽管新人试用的实际扣款金额是$0.99美元。请按字面措辞来匹配它,因为服务器发送的就是"$1"这种写法。
你有两个选择:按你想要的套餐的标准价格订阅,或者使用一张之前没有使用过试用价的支付方式。
套餐价格、试用条款以及转为正式订阅时会发生什么,都写在账单、试用与如何取消一文中。
付款已经完成,但账号仍显示为免费版
已经扣款成功,但账号表现得还是免费版,这和结账失败是不同的症状,另有专门的一页说明。
请阅读已付款但套餐功能仍未解锁,了解那种状态下会出现的提示文字、判断哪个账号持有订阅的方法,以及应该向客服提供什么信息。
Whizi无法告诉你的信息
三个信息空白,让你不必花时间寻找根本不存在的答案。
Whizi永远不会知道你的银行为什么拒绝了一张银行卡,因为这个交互发生在Stripe托管的结账页面上,在Whizi代码库之外。对Whizi两个代码仓库的排查没有发现任何银行卡被拒或支付被拒字样的提示文案,Stripe网络钩子处理程序里也没有任何支付被拒的提示信息。所以你的账号里不会存储任何拒绝原因,没有重试按钮,Whizi也没有什么可以覆盖的内容。原因在你的银行那边。
Whizi也没有针对续费失败或逾期未付的提示信息。两个代码仓库里都不存在这样一条面向用户的字符串,所以如果之后续费扣款失败,你不会收到Whizi的错误提示来解释原因。唯一一条与续费相关的通知是一条推送通知,正文是"你的订阅已不再有效。",标题是"Whizi订阅已更新",会在RevenueCat网络钩子把账号同步降级为免费版时发送。这走的是RevenueCat网络钩子路径,因此它并不是在报告一次Stripe续费失败。
Whizi的账单业务通过Stripe处理,所以哪些银行卡能够付款是由Stripe决定的,而不是由Whizi决定。俄罗斯或伊朗的银行卡无法完成注册。乌克兰、哈萨克斯坦、土耳其、印度尼西亚和印度的银行卡可以全程正常使用。
- 真正的银行卡拒付来自你的银行,经由Stripe处理,而不是来自Whizi
- Whizi没有任何银行卡被拒的提示信息,也没有拒绝原因可以显示给你
- 带有Whizi措辞的错误信息,说明这不是一次拒付
- 会话相关的错误,退出登录再重新登录后,从定价页面重试即可解决
- Pricing is temporarily unavailable是服务器端问题:请等待,不要反复重试
- 新人试用价是与银行卡指纹绑定的,而不是与账号绑定的
- 已扣款但仍是免费版是另一种症状,详见subscription-not-active一文
常见问题
为什么Whizi显示我的付款失败,但银行那边没有任何扣款记录?
因为你看到的字符串是网站在请求还没到达Stripe之前就抛出的,所以根本没有尝试过任何扣款。区分这种情况和真正的后端拒绝的快捷方法是:后端拒绝会以JSON形式返回,带有错误代码,例如pricing_unavailable或invalid_plan_or_cycle,并且在网络请求记录中能看到HTTP状态码。浏览器端的字符串两者都没有。如果你看到的错误没有代码,说明请求根本没有到达你的银行。
A $1 intro trial has already been used with this payment method.是什么意思?
A $1 intro trial has already been used with this payment method.是什么意思?这表示你输入的这张银行卡已经使用过新人试用价。这不是一次拒付:Whizi根本没有任何银行卡被拒的字符串,这条错误来自Whizi自己的结账路由,是HTTP 403,代码为duplicate_trial_payment_method,如果你写信咨询,值得引用这个代码。要么按标准价格订阅,要么换一张之前没有使用过试用价的支付方式。
我收到了Pricing is temporarily unavailable.,是我的银行卡有问题吗?
Pricing is temporarily unavailable.,是我的银行卡有问题吗?不是。这是HTTP 503pricing_unavailable,来自读取Stripe本地化价格表的那条路由,而不是接收银行卡信息的结账路由。你这边没有办法解决,所以请等待,而不是换一张银行卡再试。如果你看到的是Failed to create Stripe checkout session.,那是另一条完全不同来源的字符串:这是网站自己的兜底文案,会在结账请求失败且后端没有返回任何信息时显示。
我的优惠码被拒绝了,为什么?
结账页面返回了The supplied discount must be an active 100% promotion code or coupon ID.,这是HTTP 400invalid_discount。结账时的折扣字段只接受有效的100%优惠码或优惠券ID,所以过期的代码或部分折扣的代码在这里都会被拒绝。如果你现在就需要使用,去掉这个代码,按正常价格结账即可。
Whizi在结账时拒绝了我的邮箱,这是怎么回事?
你看到的是Temporary email addresses are not allowed. Please use a permanent email address.。当登录账号的邮箱域名在临时邮箱名单上时,结账路由会返回HTTP 400disposable_email_blocked。同样的字符串在注册时也会用到,是HTTP 403。在账号上使用一个永久邮箱地址,结账就能继续进行。
我被重复扣款了两次,该怎么办?
请联系客服并提供两张Stripe收据,而不是盲目取消订阅。取消是另一个操作,有它自己的结果:对于一个有效订阅,取消路由会返回Subscription cancellation scheduled for end of billing period.,也就是说该订阅会运行到已付费周期结束为止。