跨币种订阅的汇率在我创建时就锁定了吗?
没有。 跨币种订阅每个周期单独换算。创建时没有任何东西被锁定,也没有单一汇率适用于 订阅的整个生命周期。 这在实践中意味着:
所以一个以你的币种固定金额定价的订阅,会在不同周期显示不同的本地币种金额,这是正确
行为,不是定价错误。不要构建假设用户侧金额恒定的对账逻辑,也不要向用户报出未来周期的固定
本地币种价格。
如果在某周期扣款发起时无法获取该货币对的汇率,该周期不会以过时的汇率扣款——尝试会失败,
而不是以未知汇率换算。
在跨币种周期中用户实际支付多少?
以用户币种扣款的金额是换算后的金额加上任何适用的用户费用,取整到用户币种的精度。 两部分都与汇率一起逐周期重新计算,所以用户侧总额是一个按周期的数字。 你自己这一侧的账本不受影响:订阅的amount(或按期排期金额)保持在你的定价币种。
我在哪里能看到换算后的金额和所用的汇率?
按扣款查看,不是按订阅。订阅查询响应报告userCurrency——用户被扣款的币种——但不携带
换算后的金额、汇率或费用明细。
要获取那些,请查看单笔扣款:
只要币种不同或有用户费用适用,
finalDealAmount 就与 orderAmount 不同——这一差异正是
该字段的意义所在,它也是用来核对用户银行账单的数字。
在 Portal 中,同样的信息位于单笔支付详情页面(可从订阅的支付历史进入),
而不是订阅详情页面。
我能找到某个 Order ID 属于哪个订阅吗?
可以。在 Subscription → Agreements 中,搜索框有一个维度选择器,Order ID 是其中一个 选项。输入订单 ID,就会返回该笔扣款所属的订阅。 该列表上搜索维度的完整集合:
不是订阅扣款的订单 ID 只会返回无结果——一次性订单没有可指向的订阅。不存在的 ID,
或属于另一个商户的 ID,也一样。
在搜索框旁边,列表按 Period、Payment Method、Status(全部九种订阅状态均可选)
和 Created Datetime 筛选。Created Datetime 是必填的,可选跨度上限约为两个月,所以在你
所选窗口之外创建的订阅无论用哪个搜索维度都不会出现——当查找意外返回空时,先放宽日期范围。
Portal 订阅列表显示什么?
双击一行会打开与 Action 链接相同的详情页。
谁可以在 Portal 中查看和取消订阅?
拥有 Subscription 菜单访问权限的 Portal 角色可以查看 Agreements 列表和订阅详情页。 取消还额外需要你角色上的订阅取消权限,所以只读用户能看到订阅但没有取消按钮。 在权限之外,取消按钮只在 Waffo 将该特定订阅标记为可取消时才出现——已到达终态的订阅 不提供取消操作。取消会要求确认,然后立即取消;没有撤销,重新订阅意味着创建新订阅。我能列出一个订阅下的所有退款或扣款吗?
可以,在两个交易列表上都可以。在 Transactions → Refunds 和 Transactions → Payments 中,搜索维度选择器包含 Subscription Id。选择它,粘贴订阅 ID,列表会返回所有匹配记录。 两个列表还带有 Subscription Id 列,让你一眼分辨订阅流量和一次性流量:
在此基础上构建流程之前值得了解的行为:
- 不存在或属于另一个商户的订阅 ID 返回空列表而不是错误。因此空结果不能证明该订阅 没有退款。
- 以这种方式筛选的退款记录包括你发起的退款以及因争议产生的退款;筛选不区分来源。
- 一次性退款没有订阅 ID,所以永远无法被此筛选匹配。
- 直接打开 Refunds 列表时它会应用自己的默认日期范围(大约最近三个月),所以查找较早的 退款时请放宽范围。
我如何从订阅跳转到它的退款?
订阅详情页显示该订阅的 Refund count。当计数大于零时它是一个链接;点击它会打开 Transactions → Refunds,并已应用 Subscription Id 筛选。 该跳转应用的日期范围是订阅的开始日期到现在——有意放宽,以覆盖订阅的整个生命周期, 而不是最近的一段。计数为零时是纯文本,没有链接。 两点注意:- 计数汇总该订阅上的所有退款,无论来源,与筛选后列表显示的内容一致。
- 如果订阅的扣款涉及多种币种,计数是退款笔数,不是金额之和——请从列表本身读取金额。
为什么周期筛选里没有”Yearly”选项?
因为不存在YEARLY 周期。周期筛选是一个两级选择器,顶层正好是 Waffo 支持的三种周期类型——
Weekly、Monthly、Daily——第二级是间隔。
年度订阅是 MONTHLY 且间隔为 12,所以这样筛选它:选择 Monthly,然后 12。
季度是 Monthly + 3,半年是 Monthly + 6,双周是 Weekly + 2。完整映射见
订阅创建与校验。
导出文件中也是同样的形态,它把周期渲染为间隔加单位(1 Month、12 Month、3 Week),
而不是有名字的套餐。页面和导出有意使用相同的措辞,所以你筛选的值就是你在文件中会找到的值。
我如何导出订阅列表?文件出现在哪里?
在 Subscription → Agreements 上设置筛选,然后使用 Export。导出是服务端任务, 不是直接下载:提交后会把你带到 Subscription → Reports Tab,那里列出你的导出记录及其 状态,就绪后提供下载。
当记录仍处于非终态时 Reports Tab 会自行刷新,所以你可以把它开着而不用重新加载。
导出使用你按下按钮时已应用的筛选,包括必填的创建时间范围。它不是”导出全部”。
为什么 Export 按钮是灰的?有行数限制吗?
三种不同的条件,三种不同的消息:
上限本身在服务端强制且不在 Portal 中显示,所以把消息当作信号,而不是试图计算限制。
按创建时间拆分是导出大量历史的可靠方式,因为该筛选本来就是必填的。
我如何在交易列表中挑出自动续订?
Transactions → Payments 有一个 Card Transaction Type 筛选,两个值:
自动续订是
MIT。订阅的首次扣款,以及客户在收银台授权的套餐变更,是 CIT。
一个让人栽跟头的行为:Card Transaction Type 列只在你按它筛选时才有值。在未筛选的查询上
该列对每一行都为空——那不是数据缺失,而是只有筛选查询才请求的投影。所以要看到 CIT/MIT,
你必须按 CIT/MIT 筛选。
该筛选适用于卡流量。对于”这一行是否属于某个订阅”(无论支付方式),请使用上文描述的
Subscription Id 列和筛选。
订阅上那些不是账单周期的额外行是什么?
订阅可以附带不属于其任何周期的扣款。它们像其他订阅流量一样带着订阅 ID 出现在交易列表中, 订单查询响应通过subscriptionInfo.subscriptionEvent 区分它们:
正确解读这一点对对账很重要:
- 零金额验证行是一笔真实订单。 它出现在交易列表中,有订单 ID,且不收取任何金额。 请按金额或按事件把它从收入报告中过滤掉,而不是假设订阅只会产生周期扣款。
TOPUP_CHARGE不是一个周期。 它没有试用标记,也没有自己的周期起止,因为它属于一个 已经有这些的周期。在带paymentDetails=1的/api/v1/subscription/inquiry上,它 嵌套在它所在的周期之下返回,作为该周期条目上的topupDetails列表(每一项携带该 加购的acquiringOrderId、topupRequest、topupAmount、orderCurrency和orderStatus;周期没有加购时该列表不存在)。所以一个订阅的总收款金额是周期金额加上 它们的topupDetails,而不仅是顶层行之和。- 在 Portal 和托管管理页面上,这些额外扣款显示在它们所属的周期下,编号为
period-n——5-2表示第 5 期内接受的第二笔加购。只有周期行带有单纯的周期号;加购行自己的周期列为-。 这就是为什么账单历史可能显示一个周期后跟着额外几行,而不是干净的每周期一行的列表。
topupInfo 块的 /api/v1/subscription/update 创建——它对周期性金额的影响见
金额页面。
要找到它们,按 acquiringOrderId 查询订单并读取 subscriptionInfo;没有专门的列表端点。