PAYATHON 2026

综合体“支付即积分”支持哪些积分核销方式,能否付款抵扣?

支付老李

明确结论

综合体“支付即积分”的作用是:用户通过支付宝完成付款后,系统按商场设置的规则发放会员积分。它解决的是积分获取问题,并不意味着积分可以直接作为资金付款。

积分通常可以用于:

  • 兑换优惠券、代金券等营销权益;
  • 兑换商品、礼品或会员服务;
  • 在商场自有会员系统中扣减积分,并由业务系统发放相应权益;
  • 先兑换优惠券,再在后续支付宝付款时使用。

用户下次到店付款时,直接用积分抵扣部分金额,通常不在“支付即积分”的标准能力范围内。要实现“积分当钱用”,商场还需要自行设计积分抵扣规则,建设交易和退款处理流程,并确认当前签约产品是否提供所需接口。

为什么不能直接抵扣支付金额

积分和支付资金分属不同的账户体系。

“支付即积分”通常处理以下流程:

支付宝支付成功
    ↓
识别商场会员
    ↓
按照积分规则计算积分
    ↓
将积分记入商场会员账户

积分抵扣付款则需要处理另一套流程:

读取会员积分
    ↓
计算可抵扣金额
    ↓
锁定或扣减积分
    ↓
以扣除抵扣金额后的金额发起支付
    ↓
根据支付、退款结果提交或返还积分

支付宝支付订单中的 total_amount 仍是用户实际需要支付的资金金额。会员积分不能直接作为支付渠道,也不能只靠修改支付参数来完成积分扣减。

可采用的积分核销方式

具体支持哪些方式,取决于综合体与支付宝签署的产品协议、后台开放配置,以及商场会员系统的实际实现。不能仅凭“支付即积分”这一能力名称,就认定所有积分核销流程都由支付宝托管。

常见做法主要有两类。

积分兑换权益

用户先在商场会员页面用积分兑换优惠券、礼品或服务,积分在兑换时完成核销。

例如:

1000 积分 → 10 元代金券
2000 积分 → 停车券
5000 积分 → 指定礼品

如果用户兑换的是支付宝付款时可用的优惠券,那么下次付款使用的是优惠券,不是积分本身。优惠券适用于哪些门店、是否有最低消费、有效期多长、能否叠加使用,都需要另行配置。

商场自建积分抵扣

商场也可以先在自己的收银系统中计算积分抵扣金额,再通过支付宝支付剩余款项。例如,订单原价为 100 元,使用 1,000 积分抵扣 10 元后,最终提交给支付宝的支付金额为 90 元。

这种方式属于商场侧的组合结算:

商品金额:100.00 元
积分抵扣:10.00 元
支付宝实付:90.00 元

积分的查询、锁定、扣减和退还都由商场会员系统负责,支付宝支付系统只处理剩余的 90 元资金订单。

实现积分抵扣的建议步骤

1. 确认已开通能力的边界

先向支付宝对应的产品或技术支持确认:

  • 当前签约方案是否仅支持支付后发放积分;
  • 是否提供积分查询、扣减和退还接口;
  • 是否支持用积分兑换支付宝优惠券;
  • 核销入口是在支付宝端,还是商场自有会员端;
  • 是否有指定的订单、退款及对账规范。

能力页面通常展示的是方案介绍,实际能够调用哪些接口,应以签约权限和开放平台控制台中的接口权限为准。

2. 设计抵扣规则

至少需要明确以下内容:

  • 积分与人民币的换算比例;
  • 单笔订单的最高抵扣比例;
  • 可以使用积分的门店和商品范围;
  • 积分能否与优惠券同时使用;
  • 积分有效期和扣减顺序;
  • 订单关闭、全额退款或部分退款时,积分如何退还。

3. 在支付前锁定积分

用户进入收银台时,不宜立即永久扣除积分。可以先锁定积分,待支付成功后正式扣减;如果支付失败或超时,再解除锁定。

BigDecimal orderAmount = new BigDecimal("100.00");
BigDecimal pointsDiscount = new BigDecimal("10.00");
BigDecimal payAmount = orderAmount.subtract(pointsDiscount);

if (payAmount.compareTo(BigDecimal.ZERO) < 0) {
    throw new IllegalArgumentException("积分抵扣金额不能超过订单金额");
}

pointsService.freeze(memberId, points, merchantOrderNo);

try {
    paymentService.createAlipayOrder(
        merchantOrderNo,
        payAmount.setScale(2, RoundingMode.HALF_UP)
    );
} catch (Exception exception) {
    pointsService.unfreeze(memberId, merchantOrderNo);
    throw exception;
}

支付结果应以服务端异步通知或主动查单结果为准:

if (paymentResult.isSuccess()) {
    pointsService.commitDeduction(memberId, merchantOrderNo);
} else if (paymentResult.isClosed()) {
    pointsService.unfreeze(memberId, merchantOrderNo);
}

以上代码只用于说明业务流程,并非支付宝官方接口示例。实际接口名称和参数应以已开通产品的官方文档为准。

注意事项

  • 除非对应产品文档明确允许,否则不要把积分值直接写入支付宝支付订单的优惠金额字段。
  • 商户订单应分别记录商品原价、营销优惠、积分抵扣和支付宝实付金额,以便处理退款和对账。
  • 积分扣减操作必须具备幂等性,避免支付通知重复触发时多次扣分。
  • 应提前规定部分退款时积分的返还方式,避免资金已经退还,积分却没有退回。
  • 如果积分只能兑换优惠券,页面应明确写明“积分兑换优惠券”,不要描述成“积分直接付款”。
  • 会员协议和使用页面应清楚说明积分规则、有效期、使用限制及退款规则。

如果需求只是让用户在支付后自动获得商场积分,可以使用“支付即积分”。如果要在下一次付款时直接抵扣,则需要将其作为独立的积分结算功能进行评估,也可以采用先用积分兑换代金券,再在付款时使用代金券的方案。最终采用哪种方式,仍应以商户的实际签约权限和支付宝提供的接口文档为准。

备注:内容仅供参考。