1.1 针对唤起收银台的交易确保能够及时获得用户支付结果
1.2 同一订单的部分退款确保退款请求号不重复
2.1 避免不合法的传参
2.2 接口调用发生异常时能够正确处理
3.1 合理的轮询间隔以及轮询总时间
3.2 提高订单支付成功率
3.3 新建的订单都需要改变订单号
4.1 未支付订单请及时撤销
4.2 不要将撤销接口用于退款业务
4.3 单品总金额与订单总金额要一致
4.4 不要在没有获得交易结果的时候要求用户再次付款
5.1 auth_code用户付款码建议做好设计预留工作
5.2 storeid不要含有中文字符
5.3 支付请求需要传入storeid
5.4 机具接入请传入terminalid
5.5 需要返佣的ISV请确保传入正确的返佣参数
5.6 确保带有折扣参数的订单可以正常享受优惠
5.7 参与单品活动的交易需要传入正确的goodsdetail信息
7.1 异步通知验签
商户接受到异步通知后,一定要先做验签,来确保该通知确实是从支付宝发出的。验签的详细规则见异步通知验签,同时建议您参考以下代码使用支付宝提供的开发平台服务端SDK来辅助验签:
Map<String, String> paramsMap = ... //将异步通知中收到的所有参数都存放到map中 boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, ALIPAY_PUBLIC_KEY, CHARSET,SIGN_TYPE) //调用SDK验证签名 if(signVerfied){ // TODO 验签成功则继续业务操作,最后在response中返回success }else{ // TODO 验签失败则记录异常日志,并在response中返回failure. }
1.1 商户资损单边账:用户实际未付款成功,但商户系统判定支付成功;或用户支付成功后,商户系统由于逻辑问题发起了撤销。
1.2 用户资损单边账:用户付款成功,但商户系统未得到支付成功的结果,误认为付款失败,再次扫用户付款码发起支付,导致用户多支付了一笔。在用户手机网络不好的情况下,支付成功后用户手机不一定会显示支付成功页面,用户自己也不知道已经付成功了。这种情况在小额场景下尤其容易出现,且难以发现,需要商户和系统商特别注意。
2.1. 每一笔交易一定要闭环,即要么支付成功,要么撤销交易,一定不能有交易一直停留在等待用户付款的状态。
2.2 轮询+撤销的流程中,如轮询的结果一直为未付款,撤销一定要紧接着最后一次查询,当中不能有时间间隔。
2.3 门店收银系统应该具备独立的手动查询功能作为兜底,输入商户订单号(可从用户手机账单中获得)调用支付宝查询接口获得确切的支付状态。
2.4 当遇到网络超时和未知异常时,参考异常处理流程正确处理,对于每一笔交易或退款,一定要得到确切的结果。
2.5 撤销接口调用成功后,需要在收银台页面为收银员展示撤销成功的强提示文案,且按实际业务情况引导收银员进行手工订单查询。如果撤销接口没有明确返回处理结果,如遇到网络超时或支付宝未知异常等情况,则需要在收银台提示文案中表明,撤销正在处理中;若该笔订单已经支付则后续会有发生退款的可能,并和用户做好线下沟通。
2.6 对于经过轮询和撤销仍然无法确认结果的(例如系统故障或门店断网),应上报总部IT或财务,由IT(从系统内)或财务(从支付宝后台),确认支付结果后,通过后台发起退款。或让顾客查询手机支付宝账单,如顾客手机没网络,可拨打支付宝客服热线95188确认支付结果。
2.7 在上述基础上,业务流程培训时应强调支付结果必须以商户端为准,用户手机上的支付宝结果或账单只能做参考,不能作为最终识别标准。如果商户未正确处理业务逻辑和业务流程培训,存在潜在的风险,商户自行承担因此而产生的所有损失。