支付接口的store_id是否支持自定义并可在订单查询中返回
支付阿杰
结论
商户通常可以传入 store_id,用来标识订单所属的门店。支付订单创建成功后,通过支付宝交易查询接口 alipay.trade.query 查询该订单,响应中的 store_id 通常会返回支付请求里填写的门店编号。
需要注意的是,store_id 的业务含义是“商户门店编号”,不适合用作通用自定义参数。接口是否支持该字段、字段的格式限制,以及查询时是否返回,都应以当前使用的支付接口和产品版本文档为准。
正确使用方式
调用支付接口时,在业务参数中传入商户自己的门店编号:
{
"out_trade_no": "ORDER_202609090001",
"total_amount": "99.00",
"subject": "门店商品订单",
"store_id": "STORE_SH_001"
}
支付请求成功后,可以使用支付宝交易号 trade_no 或商户订单号 out_trade_no 调用 alipay.trade.query:
{
"out_trade_no": "ORDER_202609090001"
}
如果支付接口已经接收并保存该字段,查询响应中会出现类似内容:
{
"code": "10000",
"msg": "Success",
"trade_no": "2026090922001412345678901234",
"out_trade_no": "ORDER_202609090001",
"trade_status": "TRADE_SUCCESS",
"total_amount": "99.00",
"store_id": "STORE_SH_001"
}
这段响应只用于说明字段之间的关系,并非真实交易结果。
Java SDK 示例
创建支付订单时设置 store_id:
AlipayTradePayRequest request = new AlipayTradePayRequest();
AlipayTradePayModel model = new AlipayTradePayModel();
model.setOutTradeNo("ORDER_202609090001");
model.setTotalAmount("99.00");
model.setSubject("门店商品订单");
model.setStoreId("STORE_SH_001");
request.setBizModel(model);
AlipayTradePayResponse response = alipayClient.execute(request);
随后查询订单:
AlipayTradeQueryRequest queryRequest = new AlipayTradeQueryRequest();
AlipayTradeQueryModel queryModel = new AlipayTradeQueryModel();
queryModel.setOutTradeNo("ORDER_202609090001");
queryRequest.setBizModel(queryModel);
AlipayTradeQueryResponse queryResponse =
alipayClient.execute(queryRequest);
if (queryResponse.isSuccess()) {
String storeId = queryResponse.getStoreId();
System.out.println("store_id: " + storeId);
}
不同版本的 SDK 可能使用不同的模型类或字段访问方法,请以项目实际引入的支付宝 SDK 为准。
查询不到 store_id 时如何排查
如果订单查询结果中没有 store_id,可以按以下顺序检查:
- 确认
store_id位于支付接口的业务参数中,没有被放进公共请求参数或自定义 HTTP 参数。 - 查看支付接口的返回结果,确认请求没有因字段格式或产品能力限制而被拒绝。
- 确认查询的是同一笔订单,避免混用
trade_no和out_trade_no。 - 查看所用支付产品及对应接口的文档,确认其中同时定义了请求字段
store_id和查询响应字段store_id。 - 如果订单由服务商、第三方收单平台或其他中间系统创建,确认该系统没有过滤这个字段。
- 不要只依靠支付宝的查询结果保存业务关系。商户系统应在创建订单时同步保存
store_id与out_trade_no的对应关系。
注意事项
store_id 应填写稳定、唯一且可追溯的商户门店编号,不建议在其中写入备注、JSON、用户信息或其他任意业务数据。如果需要传递通用业务标识,应优先使用具体支付接口提供的扩展字段,或将相关信息直接保存在商户自己的订单系统中。
“查询对账单下载地址接口”用于获取账单文件的下载地址,不能代替 alipay.trade.query 查询单笔订单,也不能用来判断订单查询接口会返回哪些字段。要确认 store_id 能否传入及查询时是否返回,需要分别查看实际支付接口的请求参数说明和 alipay.trade.query 的响应参数说明。
备注:内容仅供参考。
