支付宝


内部生成订单,然后向支付宝发起请求预下单,携带很多信息如订单号、金额(是否有优惠)、验签、公钥,支付宝返回一个二维码信息(http协议的信息),然后我们将二维码进行一个持久化保存至七牛云上,然后我们后台给前端一个htp协议的链接,然后给买家展示这个二维码,然后买家拿出支付宝钱包进行扫码。!当用户第一次扫码的时候会收到支付宝的第一次回调,里面信息(订单、金额、里面的状态是等待买家付款),当用户输入密码付款(成功)之后会收到支付宝的第二次回调,包括付款的金额、还有支付宝订单最后的结果trade success。以上就是支付宝扫码支付的主流程



loop循环,通过定时任务调用query接口,查询交易状态,实际在线上,我们回调和主动查询都是要有的,这是为了防止支付宝未给回调,订单卡在这儿,保证系统的稳定性。 超过轮训时间仍未支付,在请求预下单的时候,我们会发一个超时时间,比如10小时,在支付宝生成订单10小时不支付,订单就会被支付宝单方面取消,当然也可以调用alipay的cancel接口主动撤销交易,订单状态就变味取消订单
注意:1回调的验证、支付宝官方提供了回调的方法,自己对返回的订单、状态、金额什么的进行校验,保证回调是正确的,是支付宝发出的 2过滤重复的通知:因为是别人回调我,我们不能把数据的准确性完全依赖对方,回调一次就够了 3一定要验证接收的异步通知是支付宝发出的,通过支付宝的验证方法可以实现
回调请求的返回:我们的代码返回给支付宝,一定要有success(只能是这个),如果反悔的没有,支付宝会重复的发送通知,直到超时

避免单边账
1.1 商户资损单边账:用户实际未付款成功,但商户系统判定支付成功;或用户支付成功后,商户系统由于逻辑问题发起了撤销。
1.2 用户资损单边账:用户付款成功,但商户系统未得到支付成功的结果,误认为付款失败,再次扫用户付款码发起支付,导致用户多支付了一笔。在用户手机网络不好的情况下,支付成功后用户手机不一定会显示支付成功页面,用户自己也不知道已经付成功了。这种情况在小额场景下尤其容易出现,且难以发现,需要商户和系统商特别注意。 为了避免单边帐,建议商户和系统商采取以下措施:
2.1. 每一笔交易一定要闭环,即要么支付成功,要么撤销交易,一定不能有交易一直停留在等待用户付款的状态。
2.2 轮询+撤销的流程中,如轮询的结果一直为未付款,撤销一定要紧接着最后一次查询,当中不能有时间间隔。
2.3 门店收银系统应该具备独立的手动查询功能作为兜底,输入商户订单号(可从用户手机账单中获得)调用支付宝查询接口获得确切的支付状态。
2.4 当遇到网络超时和未知异常时,参考异常处理流程正确处理,对于每一笔交易或退款,一定要得到确切的结果。
2.5 撤销接口调用成功后,需要在收银台页面为收银员展示撤销成功的强提示文案,且按实际业务情况引导收银员进行手工订单查询。如果撤销接口没有明确返回处理结果,如遇到网络超时或支付宝未知异常等情况,则需要在收银台提示文案中表明,撤销正在处理中;若该笔订单已经支付则后续会有发生退款的可能,并和用户做好线下沟通。
2.6 对于经过轮询和撤销仍然无法确认结果的(例如系统故障或门店断网),应上报总部IT或财务,由IT(从系统内)或财务(从支付宝后台),确认支付结果后,通过后台发起退款。或让顾客查询手机支付宝账单,如顾客手机没网络,可拨打支付宝客服热线95188确认支付结果。
2.7 在上述基础上,业务流程培训时应强调支付结果必须以商户端为准,用户手机上的支付宝结果或账单只能做参考,不能作为最终识别标准。如果商户未正确处理业务逻辑和业务流程培训,存在潜在的风险,商户自行承担因此而产生的所有损失。

你可能感兴趣的:(支付宝)