PAYATHON 2026

服务商如何查询入驻商户的实时交易订单?

支付老李

结论

服务商查询某个入驻商户的实时交易订单,一般要调用支付平台开放的“交易查询接口”。请求时,服务商使用自己的应用或机构身份完成鉴权,并指定入驻商户编号,同时传入商户订单号或平台交易号。

如果要持续、近实时地获取新订单,应以支付平台发送的交易结果通知为主,不宜频繁轮询查询接口。收到通知后,可以再调用查询接口核实订单状态。

问题中没有指定支付平台,因此无法确定具体的接口名称、请求地址和参数名。以下是通用实现方式,接入时应以对应平台的官方接口文档为准。

查询前提

服务商通常需要满足以下条件:

  • 完成服务商或机构身份认证。
  • 创建并配置开放平台应用。
  • 入驻商户已与服务商建立授权、签约或绑定关系。
  • 应用已获得交易查询权限。
  • 配置好签名密钥、证书或访问令牌。
  • 保存商户订单号、平台交易号和入驻商户编号之间的对应关系。

如果入驻商户没有授权服务商访问交易数据,即使服务商知道商户编号,通常也不能直接查询该商户的订单。

具体查询方式

1. 按商户订单号查询

创建交易时,服务商应保存自己生成的商户订单号。查询时一般需要提交:

  • 服务商应用标识;
  • 入驻商户编号;
  • 商户订单号;
  • 时间戳、随机数等公共参数;
  • 请求签名或访问令牌。

这种方式适用于查询服务商系统中已有记录的订单。

2. 按平台交易号查询

支付平台成功受理交易后,通常会返回平台交易号。服务商保存该编号后,可以用它查询订单详情。

与商户订单号相比,平台交易号一般在支付平台内具有更明确的唯一性,但前提是服务商已经保存该编号。

3. 通过交易通知获取实时结果

交易支付成功、关闭或退款后,支付平台通常会向预先配置的通知地址推送结果。服务商收到通知后,应按以下步骤处理:

  1. 验证签名或证书。
  2. 检查通知中的入驻商户编号。
  3. 校验订单金额、币种和商户订单号。
  4. 对通知进行幂等处理。
  5. 更新本地订单状态。
  6. 对关键订单调用查询接口进行二次确认。

“实时订单”通常通过异步通知获取。查询接口更适合主动核验、补偿处理和状态恢复。

通用请求示例

以下示例只用于展示请求结构。接口地址和字段名称均为占位符,不能直接用于某个特定支付平台:

curl -X POST 'https://api.example.com/v1/trade/query' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "service_provider_id": "PROVIDER_ID",
    "sub_merchant_id": "SUB_MERCHANT_ID",
    "merchant_order_no": "ORDER_202609140001",
    "timestamp": 1789344000,
    "nonce": "RANDOM_STRING",
    "signature": "REQUEST_SIGNATURE"
  }'

服务端可以封装查询方法:

public TradeOrder queryOrder(
        String subMerchantId,
        String merchantOrderNo) {

    TradeQueryRequest request = new TradeQueryRequest();
    request.setSubMerchantId(subMerchantId);
    request.setMerchantOrderNo(merchantOrderNo);

    // 使用所接入支付平台提供的 SDK 发起请求。
    TradeQueryResponse response = paymentClient.queryTrade(request);

    if (!response.isSuccess()) {
        throw new IllegalStateException(
            "订单查询失败:" + response.getErrorCode()
        );
    }

    return response.getOrder();
}

其中,TradeQueryRequest、paymentClient.queryTrade() 等都是示意名称。实际接入时,需要替换为支付平台 SDK 中真实存在的类和方法。

查询结果处理

收到查询结果后,至少要核对以下内容:

  • 入驻商户编号是否与目标商户一致;
  • 商户订单号和平台交易号是否匹配;
  • 订单金额及币种是否正确;
  • 交易状态是支付成功、处理中、关闭还是失败;
  • 支付时间和订单创建时间是否合理;
  • 返回报文的签名或证书是否合法。

不能只根据 HTTP 状态码判断支付结果。HTTP 请求成功只能说明接口调用成功,并不代表订单已经支付。

如果需要查询订单列表

有些支付平台只支持“按订单号查询单笔交易”,不允许服务商按商户实时拉取全部订单。遇到这种情况,应在创建交易和接收通知时,将订单同步保存到服务商自己的数据库,再根据入驻商户编号、交易时间和状态进行查询。

如果平台提供交易账单或订单列表接口,也要留意数据可能存在延迟。这类接口通常更适合对账和历史统计,未必适合实时业务判断。

注意事项

  • 不要绕过授权查询其他入驻商户的交易数据。
  • 不要用高频轮询模拟实时通知,以免触发接口限流。
  • 查询“处理中”的订单时,应采用退避重试,例如逐步延长重试间隔。
  • 支付通知可能重复发送,业务处理必须保证幂等。
  • 查询接口返回异常时,不要立即将订单判定为支付失败。
  • 金额应使用整数最小货币单位或精确小数类型,避免浮点误差。
  • 不得将访问令牌、私钥和证书写入前端代码或提交到代码仓库。
  • 最终使用的接口地址、签名规则、商户标识字段及授权范围,必须以对应支付平台当前的官方文档为准。

备注:内容仅供参考。