接口:alipay.trade.pay
接口名称:统一收单交易支付接口
SDK&Demo
1.智慧门店支付链路前提条件是门店具备支付宝当面付收银能力。该接口属支付宝开放平台API。
2. 入参增加5个字段:
子参数名称 | 子参数说明 | 是否可空 |
---|---|---|
store_id | 商家门店编码,对应智慧门店后台的门店自用编码 | 不可空 |
goods_id | 商户自定义的商品编号,需要与在智慧门店发布商品传入的SKU外部商品编号一致 | 不可空 |
goods_name | 商户自定义的商品名称,注意编码格式与调用接口指定的编码一致 | 不可空 |
quantity | 本次交易购买该商品的数量 | 不可空 |
price | 商品单价,单位元,商品优惠前的价格。商品单价x数量的累加金额=订单总金额(不做强行校验) | 不可空 |
3. 关于total_amount、quantity和price
场景 | total_amount | 商品A | 商品B | 智慧门店订单展示 | ||||
---|---|---|---|---|---|---|---|---|
/ | / | price | quantity | price | quantity | 商品A的总金额 | 商品B的总金额 | 填充商品 |
场景一: total_amount=∑price*quantity |
10 | 3 | 2 | 4 | 1 | 6 | 4 | / |
场景二: total_amount<∑price*quantity |
8 | 3 | 2 | 4 | 1 | 8*6/(6+4)=4.8 | 8*4/(6+4)=3.2 | / |
场景三: total_amount>∑price*quantity |
12 | 3 | 2 | 4 | 1 | 6 | 4 | 2 |
4. 关于合单:对于相同的商品不同的价格(比如第一件100,第二件半价),POS可以自己合并传quantity=2,price=75,也可以POS传两条商品记录,相同的good_id不同price,平台来合并。如果POS未传price字段,平台根据商品吊牌价通过订单总价进行按商品价格比例均摊。
5.对于undiscountable_amount不打折金额字段:该字段接口文档中未透出,如果使用了该字段则不能享受优惠,请知晓。场景:在商户收银的时候在收银台里面输入不打折金额,然后扫码枪扫用户,这个不打折金额就不能参与优惠。
6.关于支付宝的无可打折金额问题:支付宝不可打折金额仅在支付宝侧生效,但对于智慧门店优惠券不会生效。举例:订单金额100,支付接口中不可打折金额undiscountable_amount=10,如果在支付宝侧有张100减10的券,那是使用不了的,因为可打折金额是90(订单金额-不可打折金额),没达到券的门槛。而智慧门店订单是根据消费者实付金额来判断是否满足门槛,如果有张100-10的券,那是可以使用的。请商户注意,避免出现资损!
智慧支付链路增加可优惠券、购物津贴、红包的玩法,统一有平台来判断是否可核销,具体玩法说明说下:
优惠类型 | 优惠类型的说明 | 是否付钱给商家 | 是否可退 | 支付宝接口返回字段 fund_bill_list.fund_channel |
---|---|---|---|---|
智慧门店优惠券 | 商家出资,形式:满减券,支持全场满减,也支持指定门店指定商品(小于3000)满减 | 否 | 否 | MDISCOUNT |
全域购物金 | 全域购物金本金由消费者实付;膨胀金由商家出资,形式:全场通用的抵扣券,全域购物金核销时,按重置时的本金与膨胀金等比例扣减 | 是 | 是 | TMARKETING |
※ 全域购物金,本金、膨胀金的识别,在支付宝接口返回字段fund_bill_list中,新增一个fundChannel类型TMARKETING
fundChannel:TMARKETING
amount:购物金面额,为该笔交易中,使用购物金的本金和膨胀金之和
real_amount:购物金本金,为该笔交易中,使用购物金部分的实收金额
1.1.3 详细的支付宝接口升级方案
支付宝当面付接口升级智慧门店的补充介绍可参看:智慧门店当面付升级指引。
接口:alipay.trade.precreate
接口名称:统一收单线下交易预创建
说明:
支付结果的返回信息参看,当面付异步通知-仅用于扫码支付,字段说明参看1.1.1章节。
接口:alipay.trade.refund
接口名称:统一收单交易退款接口
说明:
1. 退款接口先前是没有商品信息字段的,该项目新增了商品信息字段,建议回传,避免后续业务场景需要再做二次开发。
2. 智慧门店增加了优惠场景,带有智慧门店优惠的订单的退款,退款金额需要POS做计算后退回。建议走整单退,如果选择支持部分,退款金额出现资损由商家自己承担:
1)整单退:传入订单总金额(total_amount)即可,平台会判断哪些出资渠道可原路退,哪些券是可退,哪些券不能退,参看上面的券类型表格;
2)部分退:举例,订单应收total_amount=100,商品A价格60元,商品B价格40元,使用优惠券10元,买家实付90元。解决方案:
方案一:买家想退商品A,则POS退款金额填写60元,平台退60元,如果消费者想再退商品B,则POS退款金额填写40元,平台判断可退最大金额退款,即100-10-60=30,最终退给消费者30元。该方案处理相对简单,缺点是仅退第一件可能存在资损。
方案二:根据优惠金额POS做单品价格均摊后告知支付宝退款多少,退商品A则退款(100-10)*60/(60+40)=54,退商品B则退款(100-10)*40/(60+40)=36。
方案三:整单退后重新下单。
3. 退款的可退金额规则:
假设场景如下:正向交易下单,购买两件商品分别是商品A97元和商品B3元,应收金额100元,买家有8元津贴、10元优惠券和5元红包,消费者实付77元,智慧门店优惠券不可退、红包和津贴可退。
退款方式 | 退款金额 refund_amount |
买家支付宝 原路退款 |
优惠券退回 | 红包退回金额 | 购物津贴 |
---|---|---|---|---|---|
整单退 | 100 | 77 | 不退 | 5 | 8 |
部分退-津贴满足则可退 | 97 | 77 | 不退 | 5 | 8 |
部分退-津贴不足则不退 | 89 | 77 | 不退 | 5 | 0 |
部分退-红包可拆分退 | 80 | 77 | 不退 | 3 | 0 |
部分退-不足实付随意退 | 60 | 60 | 不退 | 0 | 0 |
超额退 | 101 | 不可退 | 不可退 | 不可退 | 不可退 |
注:
1)退款的优先级顺序:实付>红包>购物津贴>优惠券