支付宝小程序支付如何禁止用户选择花呗
支付小周
结论
支付宝小程序无法在前端通过 my.tradePay 直接隐藏或禁用花呗。应在服务端创建支付宝交易时,通过 disable_pay_channels 禁用相关支付渠道,再将生成的交易号返回给小程序,由小程序拉起收银台。
一般需要同时禁用以下两个渠道:
pcredit:花呗pcreditpayInstallment:花呗分期
服务端创建交易
调用 alipay.trade.create 时,在 biz_content 中加入 disable_pay_channels:
{
"out_trade_no": "ORDER_202609130001",
"total_amount": "99.00",
"subject": "订单付款",
"buyer_id": "2088xxxxxxxxxxxx",
"disable_pay_channels": "pcredit,pcreditpayInstallment"
}
Java SDK 示例:
AlipayClient alipayClient = new DefaultAlipayClient(
gatewayUrl,
appId,
merchantPrivateKey,
"json",
"UTF-8",
alipayPublicKey,
"RSA2"
);
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
AlipayTradeCreateModel model = new AlipayTradeCreateModel();
model.setOutTradeNo("ORDER_202609130001");
model.setTotalAmount("99.00");
model.setSubject("订单付款");
model.setBuyerId(buyerId);
model.setDisablePayChannels("pcredit,pcreditpayInstallment");
request.setBizModel(model);
AlipayTradeCreateResponse response = alipayClient.execute(request);
if (!response.isSuccess()) {
throw new RuntimeException(
"创建支付宝交易失败:" +
response.getSubCode() + " " +
response.getSubMsg()
);
}
String tradeNo = response.getTradeNo();
服务端创建交易后,将 tradeNo 返回给小程序。私钥、签名以及交易创建逻辑都不能放在小程序前端。
小程序拉起支付
小程序收到服务端返回的支付宝交易号后,调用 my.tradePay:
my.tradePay({
tradeNO: tradeNo,
success: (result) => {
console.log('支付调用结果:', result);
// 不要仅凭客户端结果修改订单状态,
// 应由服务端查询交易或处理支付宝异步通知。
},
fail: (error) => {
console.error('拉起支付失败:', error);
}
});
my.tradePay 只用于拉起支付宝收银台。收银台中可以选择哪些支付渠道,取决于服务端创建交易时传入的参数以及支付宝收银台的规则。
如果使用其他支付接口
如果业务使用的不是 alipay.trade.create,而是其他支付宝交易接口,需要先确认该接口是否支持 disable_pay_channels。该字段通常放在请求的业务参数中,例如:
{
"disable_pay_channels": "pcredit,pcreditpayInstallment"
}
接口类型、SDK 版本和产品签约状态都可能影响参数支持情况,具体应以当前接入接口的支付宝开放平台文档为准。不要使用接口文档中未声明的支付渠道值。
注意事项
- 如果只禁用
pcredit,收银台中可能仍会出现花呗分期,因此一般还要同时禁用pcreditpayInstallment。 - 多个参数值之间要使用英文逗号分隔,不能使用中文逗号。
- 交易创建后,再修改代码通常不会自动更新该交易的支付渠道。调整参数后,应使用新的订单号重新创建交易并验证。
- 禁用花呗不等于指定某一种支付方式。用户仍可在支付宝收银台实际提供的余额、余额宝、银行卡等方式中选择。
- 最终可用的支付方式还会受到用户账户状态、商户签约能力、订单类型和支付宝风控规则的影响。
- 订单是否支付成功,应以支付宝异步通知或服务端交易查询结果为准,不能只依赖小程序端的回调结果。
备注:内容仅供参考。
