在弄清楚如何计算优惠之前先了解下相关金额参数:
1、请求中金额参数
total_amount:订单总金额,订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
discountable_amount:可打折金额,参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
undiscountable_amount:不可打折金额,不参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
满足:total_amount=discountable_amount+undiscountable_amount
三者选其二,另外一个支付宝后台可以自动计算。 该参数是由商户的收银系统获取,需要商户系统能够区分可打折与不可打折的商品,以保证给支付宝传参时分清可打折金额与不可打折金额。商户在支付宝商家中心配置的优惠是根据可打折金额(discountable_amount)来做优惠的。
2、支付成功返回中的金额参数
total_amount:订单总金额,
receipt_amount:实收金额,商家在交易中实际收到的款项
invoice_amount:开票金额,用户在交易中支付的可开具发票的金额
buyer_pay_amount:付款金额,用户在交易中支付的金额
point_amount:集分宝金额
上述五个金额的关系如下:
total_amount - 商户出资的优惠金额 = receipt_amount;
receipt_amount - 支付宝出资的优惠金额 = buyer_pay_amount;
buyer_pay_amount - 用户自由的营销工具(目前只有集分宝 即point_amount)= invoice_amount
3、当面付支付渠道(fund_channel,支付渠道;amount,支付金额)
4、优惠计算:
商家优惠是:mdiscount,
支付宝优惠是:discount
也就是
商户优惠: 订单总金额(total_amount) - 商户实收(receipt_amount)
用户优惠:订单总金额(total_amount)-用户实付(buyer_pay_amount)
详细参数参考该接口文档:[url]https://docs.open.alipay.com/194/105203/[/url]
附上案例分析:
某餐厅在支付宝后台配置了商户出资的9折活动,酒水不享受折扣,同时叠加支付宝出资的立减5元活动。某用户总共消费100元,其中酒水20元,则商户系统在请求支付时,需传入undiscountable_amount=20。此时商户实收金额为(100-20)*0.9+20=92元,用户实付金额为92-5=87元,由于用户又使用了自己账户等值2元的集分宝,因此开票金额为87-2=85元