第三方App唤起支付选择花呗分期后账单未显示分期
结论
花呗分期支付成功后,支付宝交易记录、商户订单和商户对账单通常仍会显示订单总金额,不会按期拆成多笔金额。分期是用户与花呗之间的账务安排,需要到支付宝的花呗账单或分期详情中查看。
如果花呗账单中也没有显示分期期数,需要继续核实以下情况:
- 用户最终选择并完成的是否为“花呗分期”,而不是普通花呗支付。
- 下单时是否正确传入了花呗分期参数。
- 第三方 App 是否修改、遗漏或覆盖了支付参数。
- 用户是否因额度、账户状态或订单类型等原因无法使用分期。
- 当前查看的是支付订单、商户对账单,还是用户的花呗账单。
为什么账单没有显示分期
查询位置不正确
花呗分期涉及几类不同的记录,其展示内容并不相同:
| 查询位置 | 常见展示方式 |
|---|---|
| 商户订单查询 | 展示订单总金额和支付状态 |
| 商户对账单、资金流水 | 通常展示整笔交易和结算信息 |
| 用户的支付宝交易记录 | 通常仍展示交易总金额 |
| 用户的花呗账单或分期详情 | 展示期数、每期金额及还款计划 |
商户通过 alipay.trade.query 查询订单时,即使用户使用了花呗分期,接口也不会把原订单拆成多笔分期订单。分期不会改变支付订单的总金额。
用户实际选择了普通花呗支付
“花呗”和“花呗分期”是两种不同的支付选择。用户可能进入过花呗渠道或分期选择页面,但在收银台确认支付时使用了普通花呗。
是否成功分期,应以支付完成后的花呗账单详情为准,不能只看用户是否进入过分期页面。
分期参数没有正确传递
如果业务需要固定展示或指定花呗分期期数,创建支付订单时应按照当前支付宝开放平台文档传入相应参数。常见参数包括:
enable_pay_channelsextend_params.hb_fq_numextend_params.hb_fq_seller_percent
参数名称、允许值和可选期数可能受到产品签约状态及当前接口规则的限制,应以商户所签约产品对应的官方接口文档为准。
第三方 App 或服务端覆盖了参数
支付请求一般由服务端生成并签名,再交给 App 调用支付宝客户端。如果第三方 App 对已签名的订单字符串进行拼接、重新编码或修改,参数可能失效,也可能导致验签失败。
排查时还要检查以下情况:
extend_params未放在biz_content内。- JSON 层级错误。
- 参数值被序列化为错误的类型。
- 请求参数在生成签名后又被修改。
- 测试环境和正式环境使用了不同的配置。
- 实际发起支付的订单与排查时查看的订单不是同一笔。
用户或订单不满足分期条件
即使商户传入了分期参数,花呗分期是否可用,仍可能受到用户账户状态、可用额度、商户签约权限、商品或交易类型以及风控结果等条件的影响。
商户参数无法绕过支付宝收银台和花呗的可用性判断。具体原因通常需要结合收银台提示、接口返回信息和支付宝技术支持的核查结果来确定。
排查步骤
1. 确认查询的账单类型
先明确“不显示分期”具体指哪种情况:
- 商户订单没有拆成多期:通常是正常现象。
- 支付宝交易记录只显示总金额:通常不能据此认定没有分期。
- 用户的花呗账单中没有分期计划:需要继续排查。
- 商户结算款没有分期到账:花呗分期通常不要求商户按照用户期数逐期收款,具体以商户签约和结算规则为准。
2. 核对同一笔订单
记录并比对以下字段:
- 商户订单号
out_trade_no - 支付宝交易号
trade_no - 订单金额
total_amount - 创建支付请求的时间
- 用户实际完成支付的时间
这样可以避免把重新下单、支付重试或订单号映射错误误判为分期失效。
3. 保存服务端原始请求参数
应保存签名前的 biz_content、最终生成的支付请求字符串和支付宝返回结果,但不要记录用户隐私信息、密钥或完整的敏感凭证。
排查重点是确认花呗分期参数是否确实出现在服务端提交的请求中,不能只检查 App 前端的选择状态。
4. 查询交易状态
可以通过 alipay.trade.query 查询原交易,确认:
- 交易是否成功。
- 查询所用的订单号是否正确。
- 支付金额是否一致。
- 返回的资金渠道信息能否辅助判断付款渠道。
订单查询接口主要用于确认交易状态和资金信息,不一定包含用户的完整分期计划。因此,接口没有返回期数并不等于没有分期。
5. 让用户检查花呗账单详情
如果争议在于用户是否成功分期,应让用户打开对应交易的花呗账单详情,检查是否显示:
- 分期期数
- 每期应还金额
- 首期还款时间
- 分期手续费信息
如果花呗账单明确显示为整笔待还,也没有分期计划,再结合服务端保存的请求记录继续排查。
6. 携带完整信息提交核查
如果仍然无法确定原因,可以向支付宝开放平台技术支持提交以下信息:
out_trade_notrade_no- 支付时间
- App ID
- 脱敏后的请求参数
- 接口返回码及
sub_code - 用户侧相关页面截图
不要在工单、日志或聊天中提交应用私钥、用户密码、支付密码等敏感信息。
请求参数示例
以下示例仅用于说明花呗分期参数的结构。商户能否使用这些参数、支持哪些期数以及手续费承担比例,应以当前签约产品和支付宝开放平台文档为准。
{
"out_trade_no": "ORDER_202609120001",
"product_code": "QUICK_MSECURITY_PAY",
"total_amount": "1200.00",
"subject": "商品订单",
"enable_pay_channels": "pcreditpayInstallment",
"extend_params": {
"hb_fq_num": "6",
"hb_fq_seller_percent": "0"
}
}
在 Java 服务端使用 alipay.trade.app.pay 时,可以参考以下结构:
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
JSONObject extendParams = new JSONObject();
extendParams.put("hb_fq_num", "6");
extendParams.put("hb_fq_seller_percent", "0");
JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", "ORDER_202609120001");
bizContent.put("product_code", "QUICK_MSECURITY_PAY");
bizContent.put("total_amount", "1200.00");
bizContent.put("subject", "商品订单");
bizContent.put("enable_pay_channels", "pcreditpayInstallment");
bizContent.put("extend_params", extendParams);
request.setBizContent(bizContent.toJSONString());
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
String orderString = response.getBody();
服务端生成 orderString 后,应原样交给支付宝 SDK:
PayTask payTask = new PayTask(activity);
Map<String, String> result = payTask.payV2(orderString, true);
不要在客户端对 orderString 增删字段、重新排序或重新签名。支付结果也不能只依赖客户端的同步返回,服务端还应结合支付宝异步通知,并主动查询交易状态。
注意事项
- 花呗分期不会把一个支付订单拆成多个商户订单。
- 商户对账金额、用户交易金额和用户每期还款金额是不同的概念。
- 收银台显示花呗分期入口,不代表用户最终一定通过分期完成支付。
- 指定期数参数不能无条件保证分期成功,最终结果仍取决于签约权限和用户侧的可用性判断。
- 不要仅凭
alipay.trade.query中没有期数字段,就认定支付失败。 - 分期手续费由谁承担、支持哪些期数,需要结合实际签约配置确认,不能根据示例值推断生产规则。
备注:内容仅供参考。
