简短答案
如果你的银行卡确实被拒,这个拒绝来自你的银行,经由Stripe处理,而不是来自Whizi,所以解决办法是换一张卡或联系银行。银行为什么一开始就会拦截AI订阅付款,以及如何判断你遇到的是六种常见原因中的哪一种,可以参考银行卡被拒时如何为AI付费一文。Whizi结账时不会显示任何银行卡被拒的提示文案。银行卡信息是在Stripe托管的结账页面上输入的,这个页面在Whizi代码库之外,所以银行的答复会发送给Stripe,永远不会到达Whizi。
所以,如果你看到的错误信息带有Whizi的措辞,那就不是一次拒付,而是下面列出的某一条字符串,每一条都有各自不同的原因和解决办法。
最容易被误认为是拒付的三种情况:
| 你看到的内容 | 含义 | 该怎么做 |
|---|---|---|
This card has already used its intro trials, so this starts at the full price of 后接价格 | 这张银行卡已经使用过4次7天新人试用,达到了每张卡的上限 | 银行卡本身没有问题。支付显示的全价,或换一张仍有试用次数的银行卡 |
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 | 登录账号的邮箱在临时邮箱域名名单上 |
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次的上限。请等一分钟,而不是继续点击。
银行卡用完新人试用次数时
每张银行卡最多可以使用四次7天新人试用。这个次数跟随银行卡指纹计算,而不是跟随账号,所以用同一张卡开新账号也不会重置它。
一旦银行卡达到这个上限,结账不会被拒绝。它会以你选择的套餐的全价打开,Stripe的页面会在支付按钮上方说明这一点:This card has already used its intro trials, so this starts at the full price of后面跟着该套餐的价格。在那里付款会立即开始该套餐,没有试用周。
这不是一次拒付,重试也不会改变结果,因为次数已经记录在这张银行卡上。对于仍有试用次数的银行卡,新人试用价Starter为$0.99,Pro为$1.99,Powerhouse为$4.99,以美元结算。
你有两个选择:支付显示的全价,或者使用一张还没用过试用次数的银行卡。
套餐价格、试用条款以及转为正式订阅时会发生什么,都写在账单、试用与如何取消一文中。
付款已经完成,但账号仍显示为免费版
已经扣款成功,但账号表现得还是免费版,这和结账失败是不同的症状,另有专门的一页说明。
请阅读已付款但套餐功能仍未解锁,了解那种状态下会出现的提示文字、判断哪个账号持有订阅的方法,以及应该向客服提供什么信息。
Whizi无法告诉你的信息
三个信息空白,让你不必花时间寻找根本不存在的答案。
Whizi永远不会知道你的银行为什么拒绝了一张银行卡,因为这个交互发生在Stripe托管的结账页面上,在Whizi代码库之外。所以结账被拒不会在你的账号里存储任何原因,没有重试按钮,Whizi也没有什么可以覆盖的内容。原因在你的银行那边。
续费失败则不同,Whizi确实会告诉你。你会收到一封邮件,说明套餐、金额,以及Stripe保留下来的银行拒绝原因(如果有的话),聊天界面顶部还会出现一条红色横幅,提供更新银行卡或改用更便宜套餐继续使用的选项。通过iOS或Android应用购买的订阅经由Apple或Google续费,由它们各自处理各自的续费失败情况。
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状态码。浏览器端的字符串两者都没有。如果你看到的错误没有代码,说明请求根本没有到达你的银行。
结账时This card has already used its intro trials是什么意思?
This card has already used its intro trials是什么意思?这表示这张银行卡已经使用过四次7天新人试用,达到了每张卡的上限,所以这次结账会以套餐全价开始,没有试用周。这不是拒付,也不是错误,这个次数会跟随银行卡计算,无论用在哪个账号上。支付显示的全价,或者换一张仍有试用次数的银行卡。
我收到了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.,也就是说该订阅会运行到已付费周期结束为止。