投诉分页列表查询
更新时间:2026-09-22
接口说明
接口信息
- 适用对象:间连商户(OpenAPI)
- 请求 URL:
https://webapipay.com/openapi/v1/complaint/getPageList - 请求方法:POST
- Content-Type:
application/json - 鉴权方式: Sign 签名验证(公共参数 + bizContent)
ℹ️ 公共参数说明详见 通用规则 - API公共参数 部分
商户解析说明:
- 接口通过公共参数 subMerchantNo(子商户编号)自动查询ba_merchants 表获取商户信息
- subMerchantNo 对应 ba_merchants.merchant_code 字段
- 查询结果自动限定为当前商户的数据,无需手动传入商户号
请求参数(bizContent)
| 参数名 | 类型 | 必填 | 参数说明 |
|---|---|---|---|
page | String | N | 页码,默认 1 |
pageSize | String | N | 每页条数,默认 10 |
complaintNo | String | N | 投诉单号(渠道侧投诉单号),模糊匹配 |
state | String | N | 投诉单状态,如 ACCEPTED、PROCESSING、CLOSED、DROPPED |
startTime | String | N | 开始时间,格式 YYYY-MM-DD HH:mm:ss |
endTime | String | N | 结束时间,格式 YYYY-MM-DD HH:mm:ss |
请求示例
json
{
"appId": "your_system_appid",
"subMerchantNo": "your_sub_merchant_no",
"bizContent": "{\"page\":1,\"pageSize\":10,\"state\":\"PROCESSING\"}",
"version": "1.0",
"nonce": "49d55020fa3adf6ed67b253c583ccdaa",
"contentHash": "your_content_hash",
"timestamp": "2026-09-22 10:00:00",
"sign": "your_sign"
}响应参数
响应附加参数(data)
| 参数 | 类型 | 必须 | 参数说明 |
|---|---|---|---|
list | Array | Y | 投诉列表数组 |
total | Integer | Y | 总记录数 |
列表项字段说明(list[n])
| 参数 | 类型 | 必须 | 参数说明 |
|---|---|---|---|
complaintNo | Array | Y | 投诉单号(渠道侧) |
paymentChannel | String | Y | 支付渠道编码 |
channelAvailableId | Integer | N | 渠道可用配置ID |
payChannelType | String | N | 支付方式编码 |
complaintSource | String | N | 投诉来源 |
state | String | Y | 投诉状态(ACCEPTED/PROCESSING/CLOSED/DROPPED) |
complaintTime | String | N | 投诉时间 |
complaintDetail | String | N | 投诉详情 |
problemType | String | N | 问题类型 |
problemDescription | String | N | 问题描述 |
applyRefundAmount | String | N | 申请退款金额(元) |
merchantNo | String | Y | 商户号 |
mchId | String | N | 微信支付商户号 |
merchantName | String | N | 微信商户名称 |
merchantOrderNo | String | N | 商户订单号 |
wechatOrderNo | String | N | 微信订单号 |
amount | String | N | 订单金额(元) |
isFullRefunded | String | N | 是否全额退款(0否/1是) |
processTime | String | N | 处理时间 |
priority | String | N | 优先级 |
remark | String | N | 备注 |
createTime | Array | Y | 创建时间 |
updatedAt | String | N | 更新时间 |
响应示例
成功响应:
json
{
"code": "0000",
"message": "获取成功",
"timestamp": "2026-09-22T10:00:00.000Z",
"data": {
"list": [
{
"complaintNo": "4567890123456789012",
"paymentChannel": "YEEPAY",
"payChannelType": "WECHAT",
"state": "PROCESSING",
"complaintTime": "2026-09-20 14:30:00",
"problemType": "REFUND",
"applyRefundAmount": "50.00",
"merchantNo": "M20260922001",
"amount": "100.00",
"createTime": "2026-09-20 14:30:00"
}
],
"total": 1
}
}失败响应:
json
// 商户解析失败
{
"code": "4001",
"message": "未获取当前子商户进件信息",
"timestamp": "2026-09-22T10:00:00.000Z",
"data": {}
}代码示例
Java
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
public class ComplaintListExample {
public static void main(String[] args) {
String appId = "your_app_id";
String subMerchantNo = "your_sub_merchant_no";
String signKey = "your_sign_key";
String apiUrl = "https://webapipay.com/openapi/v1/complaint/getPageList";
Map<String, String> bizContent = new HashMap<>();
bizContent.put("page", "1");
bizContent.put("pageSize", "10");
bizContent.put("state", "PROCESSING");
Map<String, String> requestData = new HashMap<>();
requestData.put("appId", appId);
requestData.put("subMerchantNo", subMerchantNo);
requestData.put("bizContent", JSON.toJSONString(bizContent));
requestData.put("version", "1.0");
requestData.put("timestamp", "2026-09-22 10:00:00");
String sign = SignUtil.generateSign(requestData, signKey);
requestData.put("sign", sign);
String response = HttpUtil.post(apiUrl, requestData);
System.out.println("查询结果:" + response);
}
}Python
import requests
import json
def query_complaint_list(page=1, page_size=10, **kwargs):
"""查询投诉分页列表"""
api_url = "https://webapipay.com/openapi/v1/complaint/getPageList"
biz_content = {"page": page, "pageSize": page_size}
biz_content.update(kwargs)
request_data = {
"appId": "your_app_id",
"subMerchantNo": "your_sub_merchant_no",
"bizContent": json.dumps(biz_content),
"version": "1.0",
"timestamp": "2026-09-22 10:00:00",
}
request_data["sign"] = generate_sign(request_data, "your_sign_key")
response = requests.post(api_url, json=request_data, timeout=30)
return response.json()
# 查询处理中的投诉
result = query_complaint_list(state="PROCESSING")
if result.get("code") == "0000":
for item in result["data"]["list"]:
print(f"投诉单号: {item['complaintNo']}, 状态: {item['state']}")php
<?php
class ComplaintList {
private $appId = 'your_app_id';
private $subMerchantNo = 'your_sub_merchant_no';
private $signKey = 'your_sign_key';
private $apiUrl = 'https://webapipay.com/openapi/v1/complaint/getPageList';
public function query($page = 1, $pageSize = 10, $filters = []) {
$bizContent = array_merge(['page' => $page, 'pageSize' => $pageSize], $filters);
$requestData = [
'appId' => $this->appId,
'subMerchantNo' => $this->subMerchantNo,
'bizContent' => json_encode($bizContent),
'version' => '1.0',
'timestamp' => date('Y-m-d H:i:s'),
];
$requestData['sign'] = $this->generateSign($requestData);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
private function generateSign($params) {
ksort($params);
$signStr = '';
foreach ($params as $key => $value) {
if ($value !== '') $signStr .= "{$key}={$value}&";
}
$signStr .= "key={$this->signKey}";
return strtoupper(md5($signStr));
}
}
// 查询处理中的投诉
$result = (new ComplaintList())->query(1, 10, ['state' => 'PROCESSING']);
if ($result['code'] === '0000') {
foreach ($result['data']['list'] as $item) {
echo "投诉单号: {$item['complaintNo']}, 状态: {$item['state']}\n";
}
}注意事项
WARNING
⚠️ 数据隔离:
- 接口自动根据 subMerchantNo 限定商户数据范围,无法查看其他商户的投诉
- 每次请求都会校验商户信息,确保数据安全
TIP
✅ 查询建议:
- 推荐使用 complaintNo 模糊查询投诉单
- 验使用 state 筛选投诉状态,如: PENDING-待处理, PROCESSING-处理中, PROCESSED-已处理, OVERDUE-超时, DROPPED-已撤诉, CLOSED-已关闭
- 分页查询时建议 pageSize 不超过 50,避免响应过慢
- 时间范围查询使用 startTime 和 endTime 组合