微信支付 v3 与支付宝对账单下载接口:链接 5 分钟与 30 秒,账不平按四类归因
对账先对源:微信侧拉交易账单走 GET /v3/bill/tradebill,支付宝侧走 alipay.data.dataservice.bill.downloadurl.query 拿下载地址。两边接口的账单口径、生成时间和下载链接时效都不同,先把这些行为钉死,再处理对不平。
以下为商家自调用方式;支付宝下载地址查询接口明确不支持服务商代调用。
微信支付 v3:GET /v3/bill/tradebill
bill_date 格式 yyyy-MM-dd;bill_type 取值 ALL、SUCCESS、REFUND,默认 ALL;tar_type=GZIP。
三种账单类型注意口径:
ALL:当日所有订单信息(不含充值退款订单)SUCCESS:当日成功支付订单(不含充值退款订单)REFUND:当日退款订单(不含充值退款订单)
只可下载近 3 个月内的账单。
返回参数:
hash_type:SHA1hash_value:账单文件 SHA1 摘要,用于校验完整性download_url:下载地址,5 分钟内有效
下载时直接 GET download_url 即可,响应请求头不含签名值,无需按 v3 接口方式验签;但建议下载后比对文件实际哈希与返回的 hash_value,确认下载内容完整。
生成时间上,微信次日 9 点开始生成前一天账单,建议次日 10 点后再获取,避免撞上 STATEMENT_CREATING 或拿到半成品。
错误码:
NO_STATEMENT_EXIST:指定日期无账单,说明该日无交易,无需重试STATEMENT_CREATING:账单生成中;有交易时在 T+1 日上午 10 点后再下载SYSTEM_ERROR:系统错误,等 1 分钟再重试FREQUENCY_LIMITED:频率受限SIGN_ERROR:签名错误
支付宝:alipay.data.dataservice.bill.downloadurl.query
调用入口走 gateway.do。业务参数 bill_type、bill_date 必填,smid 可选。
bill_type 区分两类账单:
trade:商家基于支付宝交易收单的业务账单,对应账务中心的交易账单signcustomer:基于商家支付宝余额收入及支出等资金变动的账务账单,对应资金账单
bill_date 按日或按月:
- 日账单格式
yyyy-MM-dd,不支持当日,只能下载前一日 24 点前数据,即 T+1;当日数据一般次日 9 点前生成,特殊情况可能延迟,建议次日 9 点后下载 - 月账单格式
yyyy-MM,次月 3 日生成
返回 bill_download_url,获取链接后 30 秒未下载即失效。下载下来的账单文件是 Excel,默认 GBK 编码,别用 UTF-8 直接解析。
这个接口是交易辅助接口,不用单独签约,但商家账号需已签约支付产品之一:当面付、App 支付、手机网站支付、电脑网站支付等。仅支持商家自调用,不支持服务商代调用。接口频次 QPS 为 3。
时间窗与对账口径
两侧下载时间落在同一天,但取数时间点不一样:
- 微信:次日 9 点开始生成,建议 10 点后再下载
- 支付宝:日账单一般次日 9 点前生成,建议 9 点后下载
编排定时任务时,不要把两边放在同一个整点触发,较早触发的平台可能仍处于生成中状态。
对账前先把金额单位归一,统一到元或分再比。退款订单注意微信 ALL、SUCCESS、REFUND 都不包含充值退款订单;支付宝侧想对资金流水就用 signcustomer,并对准交易账单和资金账单两套口径,不要拿交易账单去比资金变动。
账单对不平的归因清单
出现差异,按四类排查:
本地有流水,对账单没有
先看是不是账单口径取错:微信ALL、SUCCESS、REFUND与支付宝trade、signcustomer不是一一对应关系;其次看充值退款是否落在账单覆盖范围之外;再看凌晨跨天的交易是否被归到相邻自然日。对账单有,本地没有入账
大概率是本地漏处理支付结果通知,这类走查单接口主动捞回,不要只依赖回调。金额不一致
优先检查分/元换算和数据库字段精度,再核对退款单与原交易单的金额正负号口径。退款单没对上
微信退款订单单独在REFUND账单里;支付宝日账单与交易要对应到退款原单,必要时用退款接口的返回单号和账单单号互相核。
错误码、生成时间在不同版本或商户类目下可能有更新,接入时以实际调用返回和官方文档为准。