参考文章:
感谢 三叔
http://www.hellojava.com/a/5336.html

问题:客户支付款后,各种原因没能成功,如何保证用户钱还是原来的,商家未收到钱??(可直接看——>避免单边账!)
首先想到的就是异步通知,但这个考虑太简单,不能适应复杂的网络支付环境,需要从多方面去处理和预设应用场景。

一、商户接入接口标准规范化

1.接口调用规范

1.1 针对唤起收银台的交易确保能够及时获得用户支付结果

原因:对于等待支付的交易,商户如果无法及时确认顾客付款是否成功,容易引起资损和纠纷。

建议方案:对所有唤起收银台的交易(支付宝返回状态10003)发起轮询,并且建议轮询总时间设为30秒,轮询平均间隔设为3秒。在让用户再次支付前,必须通过查询确认当前订单的状态。

1.2 同一订单的部分退款确保退款请求号不重复

原因:同一笔交易如果不改变退款请求号out_request_no,会因为请求号冲突,导致部分退款失败。

建议方案:同一笔交易若发起多次部分退款,每一次都需要改变out_request_no。
支付体验

2.异常处理

2.1 避免不合法的传参

原因:传参错误会导致支付异常。

建议方案:对所有返回INVALID_PARAMETER的响应进行监控,一旦发现请停止调用并检查请求参数,修改后重新发起请求。

2.2 接口调用发生异常时能够正确处理

A. 查询接口alipay.trade.query和撤销接口alipay.trade.cancel调用异常:
B. 预下单接口alipay.trade.precreate调用异常:
C. 退款接口alipay.trade.refund调用异常:
D. 支付接口alipay.trade.pay调用异常,立即调用查询接口,如果:
立即重试一分钟,如果仍然返回超时或未知异常,需要记录该异常交易并走人工处理流程。

1.使用新的商户订单号out_trade_no重新调用预下单接口。

2.使用相同的参数重试一分钟,如果仍然返回超时或未知异常,需要记录该异常交易并走人工处理流程,不能简单的推断为退款成功或失败。

3.查询的交易不存在(错误码ACQ.TRADE_NOT_EXIST),使用相同的参数重新调用支付接口。

4.网络超时或未知异常,继续查询一分钟,如仍然超时或未知异常,需要记录该异常交易并走人工处理流程,不能简单的推断为付款失败。

原因:接口的大量调用错误,商户带宽被无效调用占用,容易导致访问支付宝速度变慢,并且容易引发商户端处理错误,造成系统无法正常使用,严重影响系统稳定性及用户体验。

建议方案:在调用支付宝接口时,可能会遇到网络超时或支付宝未知异常(接口返回code=20000,sub_code=isp.unknow-error或ACQ.SYSTEM_ERROR),此时业务处理结果是未知的,需要根据具体API采取一下措施。具体措施如下:

3.支付体验

3.1 合理的轮询间隔以及轮询总时间

原因:如果轮询总时间太短,而用户输入密码时间较长,商户可能无法获得支付结果,导致资损和纠纷。如果轮询时间太长,会产生不必要的资源消耗,降低服务器性能。同样,轮询间隔如果过短,会给服务器带来压力,降低性能,反之,会无法及时得到支付结果,增加不必要的排队等待时间。

建议方案:建议轮询总时间设置在30秒,轮询间隔设为3秒。

3.2 提高订单支付成功率

原因:支付失败现象增多会引起商户收银问题,增加顾客等待时间,引起单边账,降低顾客满意度。

建议方案:对支付接口的返回进行监控,如果有较高比例的支付失败,需要及时排查原因。条码支付成功率建议保持在95%以上。

3.3 新建的订单都需要改变订单号

原因:外部订单号重复会导致交易失败,不予以控制将增大服务器开销,增加顾客等待时间。

建议方案:对新建的订单进行跳号处理。

4.资金安全

4.1未支付订单请及时撤销

原因:未支付订单如果不及时关闭,顾客可能会误支付,从而导致顾客资损,引起单边账

建议方案:对于未支付的订单,请及时通过调用撤销接口关闭订单(注意:超过24H的订单无法撤销);另外一种方法是为每笔订单设置超时时间,超过时间未支付的订单会自动关闭。

4.2 不要将撤销接口用于退款业务

原因:退款接口用于正常退款业务,撤销接口用于在订单出现问题时候将其撤销并关闭。两者的业务场景完全不同,错用会导致订单状态与业务状态不匹配,在监控下无法准确地发现系统异常。

建议方案:所有退款业务都必须调用退款接口。

4.3 单品总金额与订单总金额要一致

原因:单品总金额与订单金额不一致会导致实收金额与应收金额不匹配,从而引起资损。

建议方案:在传入单品的情况下,订单总金额需要基于单品的单价和数量计算出来。

4.4 不要在没有获得交易结果的时候要求用户再次付款

原因:商户端没有获得交易结果,很有可能是用户已经付款成功只是商户端单方面原因(网络问题)导致没有获得支付结果,再次支付会导致用户资损。

建议方案:对于商户端没有获得交易结果的订单,请和用户确认支付结果,如果用户已经支付成功,请先退款然后让用户再次支付。

5.监控保障

原因:如果没有接入交易保障接口,商户/ISV将无法通过支付宝提供的自助平台监控自身收银端问题,失去了支付宝提供的一项保障能力。

建议方案:每30分钟(或小于30分钟)将收银终端的交易性能和异常等数据同步至支付宝。支付宝将该数据和支付宝内大数据有机整合为商户/ISV提供实时监控能力,为线下收银保障护航。交易性能和交易异常数据必须要从收银终端统计,不能在服务端统计。因为这样才可以监控到真实的性能和异常。

二、 避免单边账

1. 单边帐是指对于一笔交易,商户端和用户端的结果不一致,分为两种情况:

1.1 商户资损单边账:

用户实际未付款成功,但商户系统判定支付成功;或用户支付成功后,商户系统由于逻辑问题发起了撤销。

1.2 用户资损单边账:

用户付款成功,但商户系统未得到支付成功的结果,误认为付款失败,再次扫用户付款码发起支付,导致用户多支付了一笔。在用户手机网络不好的情况下,支付成功后用户手机不一定会显示支付成功页面,用户自己也不知道已经付成功了。这种情况在小额场景下尤其容易出现,且难以发现,需要商户和系统商特别注意。

2. 为了避免单边帐,建议商户和系统商采取以下措施:

1、每一笔交易一定要闭环,即要么支付成功,要么撤销交易,一定不能有交易一直停留在等待用户付款的状态。

2、轮询+撤销的流程中,如轮询的结果一直为未付款,撤销一定要紧接着最后一次查询,当中不能有时间间隔。

3、门店收银系统应该具备独立的手动查询功能作为兜底,输入商户订单号(可从用户手机账单中获得)调用支付宝查询接口获得确切的支付状态。

4、当遇到网络超时和未知异常时,参考异常处理流程正确处理,对于每一笔交易或退款,一定要得到确切的结果。

5、撤销接口调用成功后,需要在收银台页面为收银员展示撤销成功的强提示文案,且按实际业务情况引导收银员进行手工订单查询。如果撤销接口没有明确返回处理结果,如遇到网络超时或支付宝未知异常等情况,则需要在收银台提示文案中表明,撤销正在处理中;若该笔订单已经支付则后续会有发生退款的可能,并和用户做好线下沟通。

6、对于经过轮询和撤销仍然无法确认结果的(例如系统故障或门店断网),应上报总部IT或财务,由IT(从系统内)或财务(从支付宝后台),确认支付结果后,通过后台发起退款。或让顾客查询手机支付宝账单,如顾客手机没网络,可拨打支付宝客服热线95188确认支付结果。

7、在上述基础上,业务流程培训时应强调支付结果必须以商户端为准,用户手机上的支付宝结果或账单只能做参考,不能作为最终识别标准。如果商户未正确处理业务逻辑和业务流程培训,存在潜在的风险,商户自行承担因此而产生的所有损失。

支付宝官网——避免单边账(https://opendocs.alipay.com/support/01rfnu)

支付宝当面付接入注意事项相关推荐

  1. 支付宝当面付接入之DEMO简单解读

    以前项目接入支付宝时做过一些笔记,这里整理一下 本次测试均在沙箱环境下进行 常用支付宝文档 沙箱登录:https://openhome.alipay.com/platform/appDaily.htm ...

  2. 个人支付方案(免签约)-支付宝当面付 附带源码

    支付宝当面付接入流程 点击在这里进入,登陆支付宝账户选择立即接入. 经营内容选择百货零售-超市-超市(非平台类) 营业执照可不上传 店铺招牌 百度即可 提交申请后十多分钟就可收到通过通知. 开发流程 ...

  3. 支付宝当面付方案(个人免签方案)

    作者作为个人开发者,想接入支付功能,所以了解了下目前支付相关的方案,发现大体有以下几种(参见xpay): 支付宝和微信官方支付接口:基本都需要企业资格才能开通,最起码也要是个体工商户才可以(有营业执照 ...

  4. 第三方支付接入之支付宝当面付

    第三方支付接入之支付宝当面付 首先对于支付大家都是比较了解的.目前市面上很多支付方式,云闪付,微信,支付宝,易支付,码支付等等第三方第四方的支付接口,但是大家在接入的时候会发现一个问题也就是需要企业认 ...

  5. 支付 | Java个人接入支付宝当面付(免签约,超详细步骤)

    文章目录 1. 前言 2. 当面付产品介绍 2.1 场景描述2种场景 2.2 申请条件 2.3 费率 2.4 产品签约管理 3. 实现的效果 3.1 基于当面付 - 扫码支付 实现的[电脑端web]支 ...

  6. 个人开发者支付接入方案——支付宝当面付

    前言 个人开发者由于没有企业资质,所以无法使用支付宝支付和微信支付接口. 解决方案 使用支付宝当面付接口,这是为个体商户准备的一个支付接口,只要有营业执照签约之后收款无限额. 如果没有营业执照,只要有 ...

  7. PHP接入支付宝当面付

    一.文章介绍 两个文件实现PHP接入支付宝当面付功能,包括发起支付和支付回调应答 二.准备资料 appid 私钥 公钥 在支付宝官方开启IP白名单 三.支付代码 1.index.php <?ph ...

  8. 最详细支付宝接口申请、使用!!!带详细流程--实践--支付宝当面付申请

    前言: 今天是看到同学,申请了一波支付宝当面付,而且成功了,现在已经可以应用到项目中,就是手续费有点高(0.6%)100块要上交6毛.但是对比起其他的第三方服务,还是便宜了不少.而且这个是唯一一个能够 ...

  9. ASP.NET Core 2.0 支付宝当面付之扫码支付

    前言 自从微软更换了CEO以后,微软的战略方向有了相当大的变化,不再是那么封闭,开源了许多东西,拥抱开源社区,.NET实现跨平台,收购xamarin并免费提供给开发者等等.我本人是很喜欢.net的,并 ...

最新文章

  1. mysql idataparameter_小白不坑爹的asp.net SqlParameter和带参数存储过程运用
  2. python程序员月薪多少-据说做Python程序员,都月薪上万?
  3. 绝不能错过的10款最新OpenStack网络运维 监控工具
  4. 一个网友问的该不该加入公司Share Matching Plan
  5. 使用JBoss AS 7进行SSL加密的EJB调用
  6. CSDN 开学见面礼!3 周带你 Get 大厂工程师基础能力
  7. STM32(五)------GPIO位带操作
  8. 利用Relations实现多DataTable的聚合
  9. opensource项目_宣布2016年Opensource.com社区奖获奖者
  10. 剑指offer——面试题47:不用加减乘除做加法
  11. Android Track的play流程(三十二)
  12. 高级操作系统——XV6进程管理
  13. HenCoder Android开发进阶系列学习笔记
  14. VOIP Codec 三剑客之 ISAC/ILBC -- ISAC (1) 介绍
  15. 在衣食住行上训练专注力
  16. matlab clc、clear all含义意思
  17. java的populate_JAVA BeanUtils.populate错误当离开空日期输入
  18. 计算机桌面文件能单独设密码吗,电脑上文件夹怎么加密_桌面文件夹怎么加密码...
  19. Android获取通讯录联系人,右侧字母滑动索引
  20. mac之强制退出程序方法

热门文章

  1. 遍历qvector_QT容器类(一) 之 QVector 、QLinkedList 和 QList | 学步园
  2. 手机通过nat连接虚拟机的mitmproxy
  3. JDBC之 java - mysql 各个版本 jar包 驱动
  4. 喵的Unity游戏开发之路 - 复杂重力
  5. Web 3D VS Native 3D是未来元宇宙
  6. LDAP Port 636
  7. DeepMar-基于 MindStudio 的 MindX SDK 应用开发
  8. 阿尔法大蛋智能机器人功能_家长使用科大讯飞阿尔法大蛋人工智能机器人TYR101优缺点评测介绍...
  9. 通俗易懂的讲解CPU/GPU/TPU/NPU/XPU/…
  10. IELTS12 TEST7 it is necessary to spend large sums of money on constructing new railway lines