文档中心 > 当面付

当面付最佳实践

更新时间:2017/08/23 访问次数:53279

建议架构

商户或系统商在对接支付宝时,通常有以下两种形式:

  1. 门店直连,即门店收银终端直接通过公网请求支付宝。
  2. 商户/系统商后台转发,即商户/系统商开发并部署独立的服务端(支付中台),门店收银终端先请求到商户服务端,再由服务端请求支付宝。

建议是用第二种转发模式,这样可以方便日志记录、问题排查,同时将支付逻辑和原有业务逻辑尽量解耦。
建议架构

商户订单号生成

当同一业务订单需要进行多次支付(前几次失败或被撤销)时,需要保证每次调用接口传入的商户订单号out_trade_no不重复,因此不能直接将业务订单号作为商户订单号使用,而是应该为每个支付请求生成独立的流水号,并在商户服务端维护业务订单号与流水号(商户订单号)的关系。

建议商户订单号规则为“业务订单号+请求序号”,例如对于业务订单号A10001,第一次请求支付的商户订单号为A10001_0,如果失败或未支付被撤销,再次发起的支付的商户订单号为A10001_1,以此类推。

轮询设计

当请求支付返回【WAIT_BUYER_PAY】时,收银系统需要做轮询处理,建议:

  • 收银终端界面阻塞并提示“等待用户确认支付”。
  • 轮询间隔设为3-6秒,轮询总时长60秒左右。
  • 轮询时,收银终端界面提供手动停止功能,停止时必须调用撤销API撤销支付宝交易。

条码支付参数

使用交易支付接口alipay.trade.pay时,需注意一下参数的取值:

  • store_id:商户自己定义的门店号,如果商户通过门店创建接口或在商家中心开了店,则需要与开店时传入的store_id(或配置的外部门店号)保持一致。与alipay_store_id至少传一个。注意:该参数仅支持字母、数字和英文符号,不支持中文。
  • alipay_store_id:支付宝门店号,即商户通过接口开店时接口返回的shop_id,也可以在商家中心查询到。当同时传入store_id和alipay_store_id时,必须保证两者是匹配的,否则会报错。
  • timeout_express:默认为15天后超时。根据条码支付的实际场景,建议略大于商户系统设置的轮询时间,如2m。

小票规范

门店收银系统打印的收银小票上,必须包含以下内容:

  • 商户订单号或支付宝交易号,最好增加条形码展示
  • 支付宝支付标识
  • 日期和时间

建议包含以下内容:

  • 商户实收金额,返回参数中的receipt_amount
  • 开票金额,返回参数中的invoice_amount
  • 用户支付宝账号,返回参数中的buyer_logon_id,已脱敏

以下是小票图片示例,供参考:
image

FAQ

关于此文档暂时还没有FAQ
返回
顶部