对账
本文档内的对账指线上业务数据与第三方支付公司的支付数据进行匹配找出差异的过程。
线上业务数据:涉及APP、小程序、微信H5商城的订单、退款、充值、会员开卡、礼品卡下单的数据。
第三方支付公司的支付数据:涉及支付宝、微信、招行一网通、会员钱包
对账流程中的概念
「差异区」:用于存放对账差异的业务数据和支付数据。
「缓冲区」:用于存放当期内没有找到支付流水的业务数据,主要用于解决业务数据和支付数据跨期的问题。
「平账区」:用于存放商户订单号匹配且金额一致的业务数据和支付数据。
对账的前置条件
- 订单、退款、充值、会员开卡、礼品卡下单等业务的原始数据表存入支付方式、商户号、支付状态、商户订单号、支付创建时间字段。其中支付方式、商户号、支付状态、商户订单号、支付创建时间为在支付时根据支付的实际情况存入订单信息内。
- 支付宝、微信、招行一网通、钱包的支付流水数据的获取和解析(取支付宝、微信、招行内部完成对账的对账单),接口如下;
招行已结账单API:http://openhome.cmbchina.com/pay/H5Pay/APIList/CheckOutOrderAPI.aspx
微信支付对账下载API:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_6&index=8
支付宝查询对账单下载API:https://docs.open.alipay.com/api_15/alipay.data.dataservice.bill.downloadurl.query
对账流程
T+1日
第一步,以支付创建时间为准取T日的APP、小程序、微信H5商城的订单、退款、充值、会员开卡的原始业务数据
第二步,遍历原始业务数据里的支付方式和商户号,并且根据支付方式和商户号将原始业务数据分类。
分类结果的例子如:
微信支付 商户号 1900000109 的订单、退款、充值和开卡的原始数据
微信支付 商户号 1900000120的订单、退款、充值和开卡的原始数据
第三步,根据遍历出的支付方式和商户号,以支付完成时间为准获取和解析T日第三方支付的支付流水
第四步,从分好类的原始业务数据里筛选出支付状态为交易成功的原始业务数据,并以支付状态为交易成功的原始业务数据为基准,通过商户订单号遍历对应支付方式和商户号下的支付流水,对比金额是否一致。
金额一致规则:业务数据里的应收金额 = 第三方支付的 实收金额 + 商户优惠金额。进行对比的第三方支付的详细金额字段如下:
招行一网通的字段名:结算金额 + 优惠金额
微信支付的字段名:应结订单金额
支付宝的字段名:商家实收 + 商家优惠 + 商家红包消费金额
如果金额不一致,则业务数据和第三方支付的账单流水进入「差异区」;
如果金额一致,则业务数据和第三方支付的账单流水进入「平账区」;
如果没有遍历到第三方支付公司的支付流水,则业务数据进入「缓冲区」。
如果业务数据进入「缓冲区」超过7天后仍未移出,则转入到「差异区」。
第五步,以支付状态为交易成功的第三方账单流水为基准,通过商户订单号遍历所有业务数据。
如果支付状态不一致或金额不一致,业务数据和第三方支付的账单流水进入「差异区」。
如果支付状态和支付金额一致,业务数据和第三方支付的账单流水进入「平账区」
如果业务数据里没有找到相匹配的数据,则从「缓冲区」查找。
如果在「缓冲区」查找到了则对比金额是否一致,不一致则业务数据和第三方账单流水就进入「差异区」;
如果金额一致,则业务数据和支付流水为平账,业务数据从缓冲区移出,业务数据和支付流水进入「平账区」。
如果没有找到,则支付流水进入「差异区」;
第六步,有差异的业务数据和流水生成差异记录。
对账的异常处理
1.本地未支付,支付方已支付。解决方式:手动修改本地业务数据状态,且通知业务方。
2.本地已支付,支付方已支付,但金额不同。核查原因并解决问题后,以支付流水的实收金额为准计入相应门店的营收。
3.本地已支付,支付方无记录或本地无记录,但支付方已支付。排除跨期的因素后,核查具体原因并解决问题后,以支付流水的实收金额为准计入相应门店的营收。