查询投诉单协商历史
更新时间:2025.08.28商户可通过调用此接口,查询指定投诉单的用户与商户的协商历史,以分页输出查询结果,方便商户根据处理历史来制定后续处理方案。
接口说明
支持商户:【普通商户】
请求方式:【GET】/v3/merchant-service/complaints-v2/{complaint_id}/negotiation-historys
请求域名:【主域名】https://api.mch.weixin.qq.com 使用该域名将访问就近的接入点
【备域名】https://api2.mch.weixin.qq.com 使用该域名将访问异地的接入点 ,指引点击查看
请求参数
Header HTTP头参数
Authorization 必填 string
请参考签名认证生成认证信息
Accept 必填 string
请设置为application/json
path 路径参数
complaint_id 必填 string(64)
【投诉单号】 投诉单对应的投诉单号
query 查询参数
limit 选填 integer
【分页大小】 设置该次请求返回的最大协商历史条数,范围[1,300]
offset 选填 integer
【分页开始位置】 该次请求的分页开始位置,从0开始计数,例如offset=10,表示从第11条记录开始返回。
请求示例
GET
1curl -X GET \ 2 https://api.mch.weixin.qq.com/v3/merchant-service/complaints-v2/200201820200101080076610000/negotiation-historys?limit=50&offset=10 \ 3 -H "Authorization: WECHATPAY2-SHA256-RSA2048 mchid=\"1900000001\",..." \ 4 -H "Accept: application/json" 5
需配合微信支付工具库 WXPayUtility 使用,请参考Java
1package com.java.demo; 2 3import com.java.utils.WXPayUtility; // 引用微信支付工具库,参考:https://pay.weixin.qq.com/doc/v3/merchant/4014931831 4 5import com.google.gson.annotations.SerializedName; 6import com.google.gson.annotations.Expose; 7import okhttp3.MediaType; 8import okhttp3.OkHttpClient; 9import okhttp3.Request; 10import okhttp3.RequestBody; 11import okhttp3.Response; 12 13import java.io.IOException; 14import java.io.UncheckedIOException; 15import java.security.PrivateKey; 16import java.security.PublicKey; 17import java.util.ArrayList; 18import java.util.HashMap; 19import java.util.List; 20import java.util.Map; 21 22/** 23 * 查询投诉单协商历史 24 */ 25public class QueryNegotiationHistoryV2 { 26 private static String HOST = "https://api.mch.weixin.qq.com"; 27 private static String METHOD = "GET"; 28 private static String PATH = "/v3/merchant-service/complaints-v2/{complaint_id}/negotiation-historys"; 29 30 public static void main(String[] args) { 31 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/merchant/4013070756 32 QueryNegotiationHistoryV2 client = new QueryNegotiationHistoryV2( 33 "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/merchant/4013070756 34 "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013053053 35 "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 36 "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013038816 37 "/path/to/wxp_pub.pem" // 微信支付公钥文件路径,本地文件路径 38 ); 39 40 QueryNegotiationHistoryV2Request request = new QueryNegotiationHistoryV2Request(); 41 request.complaintId = "200201820200101080076610000"; 42 request.limit = 50L; 43 request.offset = 10L; 44 try { 45 QueryNegotiationHistoryV2Response response = client.run(request); 46 // TODO: 请求成功,继续业务逻辑 47 System.out.println(response); 48 } catch (WXPayUtility.ApiException e) { 49 // TODO: 请求失败,根据状态码执行不同的逻辑 50 e.printStackTrace(); 51 } 52 } 53 54 public QueryNegotiationHistoryV2Response run(QueryNegotiationHistoryV2Request request) { 55 String uri = PATH; 56 uri = uri.replace("{complaint_id}", WXPayUtility.urlEncode(request.complaintId)); 57 Map<String, Object> args = new HashMap<>(); 58 args.put("limit", request.limit); 59 args.put("offset", request.offset); 60 String queryString = WXPayUtility.urlEncode(args); 61 if (!queryString.isEmpty()) { 62 uri = uri + "?" + queryString; 63 } 64 65 Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); 66 reqBuilder.addHeader("Accept", "application/json"); 67 reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); 68 reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo, privateKey, METHOD, uri, null)); 69 reqBuilder.method(METHOD, null); 70 Request httpRequest = reqBuilder.build(); 71 72 // 发送HTTP请求 73 OkHttpClient client = new OkHttpClient.Builder().build(); 74 try (Response httpResponse = client.newCall(httpRequest).execute()) { 75 String respBody = WXPayUtility.extractBody(httpResponse); 76 if (httpResponse.code() >= 200 && httpResponse.code() < 300) { 77 // 2XX 成功,验证应答签名 78 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, 79 httpResponse.headers(), respBody); 80 81 // 从HTTP应答报文构建返回数据 82 return WXPayUtility.fromJson(respBody, QueryNegotiationHistoryV2Response.class); 83 } else { 84 throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers()); 85 } 86 } catch (IOException e) { 87 throw new UncheckedIOException("Sending request to " + uri + " failed.", e); 88 } 89 } 90 91 private final String mchid; 92 private final String certificateSerialNo; 93 private final PrivateKey privateKey; 94 private final String wechatPayPublicKeyId; 95 private final PublicKey wechatPayPublicKey; 96 97 public QueryNegotiationHistoryV2(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) { 98 this.mchid = mchid; 99 this.certificateSerialNo = certificateSerialNo; 100 this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath); 101 this.wechatPayPublicKeyId = wechatPayPublicKeyId; 102 this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath); 103 } 104 105 public static class QueryNegotiationHistoryV2Request { 106 @SerializedName("complaint_id") 107 @Expose(serialize = false) 108 public String complaintId; 109 110 @SerializedName("limit") 111 @Expose(serialize = false) 112 public Long limit; 113 114 @SerializedName("offset") 115 @Expose(serialize = false) 116 public Long offset; 117 } 118 119 public static class QueryNegotiationHistoryV2Response { 120 @SerializedName("data") 121 public List<ComplaintNegotiationHistoryWithLogId> data; 122 123 @SerializedName("limit") 124 public Long limit; 125 126 @SerializedName("offset") 127 public Long offset; 128 129 @SerializedName("total_count") 130 public Long totalCount; 131 } 132 133 public static class ComplaintNegotiationHistoryWithLogId { 134 @SerializedName("log_id") 135 public String logId; 136 137 @SerializedName("operator") 138 public String operator; 139 140 @SerializedName("operate_time") 141 public String operateTime; 142 143 @SerializedName("operate_type") 144 public ComplaintNegotiationOperateType operateType; 145 146 @SerializedName("operate_details") 147 public String operateDetails; 148 149 @SerializedName("image_list") 150 public List<String> imageList; 151 152 @SerializedName("complaint_media_list") 153 public ComplaintMedia complaintMediaList; 154 155 @SerializedName("user_appy_platform_service_reason") 156 public String userAppyPlatformServiceReason; 157 158 @SerializedName("user_appy_platform_service_reason_description") 159 public String userAppyPlatformServiceReasonDescription; 160 } 161 162 public enum ComplaintNegotiationOperateType { 163 @SerializedName("USER_CREATE_COMPLAINT") 164 USER_CREATE_COMPLAINT, 165 @SerializedName("USER_CONTINUE_COMPLAINT") 166 USER_CONTINUE_COMPLAINT, 167 @SerializedName("USER_RESPONSE") 168 USER_RESPONSE, 169 @SerializedName("PLATFORM_RESPONSE") 170 PLATFORM_RESPONSE, 171 @SerializedName("MERCHANT_RESPONSE") 172 MERCHANT_RESPONSE, 173 @SerializedName("MERCHANT_CONFIRM_COMPLETE") 174 MERCHANT_CONFIRM_COMPLETE, 175 @SerializedName("USER_CREATE_COMPLAINT_SYSTEM_MESSAGE") 176 USER_CREATE_COMPLAINT_SYSTEM_MESSAGE, 177 @SerializedName("COMPLAINT_FULL_REFUNDED_SYSTEM_MESSAGE") 178 COMPLAINT_FULL_REFUNDED_SYSTEM_MESSAGE, 179 @SerializedName("USER_CONTINUE_COMPLAINT_SYSTEM_MESSAGE") 180 USER_CONTINUE_COMPLAINT_SYSTEM_MESSAGE, 181 @SerializedName("USER_REVOKE_COMPLAINT") 182 USER_REVOKE_COMPLAINT, 183 @SerializedName("USER_COMFIRM_COMPLAINT") 184 USER_COMFIRM_COMPLAINT, 185 @SerializedName("PLATFORM_HELP_APPLICATION") 186 PLATFORM_HELP_APPLICATION, 187 @SerializedName("USER_APPLY_PLATFORM_HELP") 188 USER_APPLY_PLATFORM_HELP, 189 @SerializedName("MERCHANT_APPROVE_REFUND") 190 MERCHANT_APPROVE_REFUND, 191 @SerializedName("MERCHANT_REFUSE_RERUND") 192 MERCHANT_REFUSE_RERUND, 193 @SerializedName("USER_SUBMIT_SATISFACTION") 194 USER_SUBMIT_SATISFACTION, 195 @SerializedName("SERVICE_ORDER_CANCEL") 196 SERVICE_ORDER_CANCEL, 197 @SerializedName("SERVICE_ORDER_COMPLETE") 198 SERVICE_ORDER_COMPLETE, 199 @SerializedName("COMPLAINT_PARTIAL_REFUNDED_SYSTEM_MESSAGE") 200 COMPLAINT_PARTIAL_REFUNDED_SYSTEM_MESSAGE, 201 @SerializedName("COMPLAINT_REFUND_RECEIVED_SYSTEM_MESSAGE") 202 COMPLAINT_REFUND_RECEIVED_SYSTEM_MESSAGE, 203 @SerializedName("COMPLAINT_ENTRUSTED_REFUND_SYSTEM_MESSAGE") 204 COMPLAINT_ENTRUSTED_REFUND_SYSTEM_MESSAGE, 205 @SerializedName("USER_APPLY_PLATFORM_SERVICE") 206 USER_APPLY_PLATFORM_SERVICE, 207 @SerializedName("USER_CANCEL_PLATFORM_SERVICE") 208 USER_CANCEL_PLATFORM_SERVICE, 209 @SerializedName("PLATFORM_SERVICE_FINISHED") 210 PLATFORM_SERVICE_FINISHED 211 } 212 213 public static class ComplaintMedia { 214 @SerializedName("media_type") 215 public ComplaintMediaType mediaType; 216 217 @SerializedName("media_url") 218 public List<String> mediaUrl = new ArrayList<String>(); 219 } 220 221 public enum ComplaintMediaType { 222 @SerializedName("USER_COMPLAINT_IMAGE") 223 USER_COMPLAINT_IMAGE, 224 @SerializedName("OPERATION_IMAGE") 225 OPERATION_IMAGE 226 } 227 228} 229
需配合微信支付工具库 wxpay_utility 使用,请参考Go
1package main 2 3import ( 4 "demo/wxpay_utility" // 引用微信支付工具库,参考 https://pay.weixin.qq.com/doc/v3/merchant/4015119334 5 "encoding/json" 6 "fmt" 7 "net/http" 8 "net/url" 9 "strings" 10) 11 12func main() { 13 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/merchant/4013070756 14 config, err := wxpay_utility.CreateMchConfig( 15 "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/merchant/4013070756 16 "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013053053 17 "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 18 "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013038816 19 "/path/to/wxp_pub.pem", // 微信支付公钥文件路径,本地文件路径 20 ) 21 if err != nil { 22 fmt.Println(err) 23 return 24 } 25 26 request := &QueryNegotiationHistoryV2Request{ 27 ComplaintId: wxpay_utility.String("200201820200101080076610000"), 28 Limit: wxpay_utility.Int64(50), 29 Offset: wxpay_utility.Int64(10), 30 } 31 32 response, err := QueryNegotiationHistoryV2(config, request) 33 if err != nil { 34 fmt.Printf("请求失败: %+v\n", err) 35 // TODO: 请求失败,根据状态码执行不同的处理 36 return 37 } 38 39 // TODO: 请求成功,继续业务逻辑 40 fmt.Printf("请求成功: %+v\n", response) 41} 42 43func QueryNegotiationHistoryV2(config *wxpay_utility.MchConfig, request *QueryNegotiationHistoryV2Request) (response *QueryNegotiationHistoryV2Response, err error) { 44 const ( 45 host = "https://api.mch.weixin.qq.com" 46 method = "GET" 47 path = "/v3/merchant-service/complaints-v2/{complaint_id}/negotiation-historys" 48 ) 49 50 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path)) 51 if err != nil { 52 return nil, err 53 } 54 reqUrl.Path = strings.Replace(reqUrl.Path, "{complaint_id}", url.PathEscape(*request.ComplaintId), -1) 55 query := reqUrl.Query() 56 if request.Limit != nil { 57 query.Add("limit", fmt.Sprintf("%v", *request.Limit)) 58 } 59 if request.Offset != nil { 60 query.Add("offset", fmt.Sprintf("%v", *request.Offset)) 61 } 62 reqUrl.RawQuery = query.Encode() 63 httpRequest, err := http.NewRequest(method, reqUrl.String(), nil) 64 if err != nil { 65 return nil, err 66 } 67 httpRequest.Header.Set("Accept", "application/json") 68 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId()) 69 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), nil) 70 if err != nil { 71 return nil, err 72 } 73 httpRequest.Header.Set("Authorization", authorization) 74 75 client := &http.Client{} 76 httpResponse, err := client.Do(httpRequest) 77 if err != nil { 78 return nil, err 79 } 80 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse) 81 if err != nil { 82 return nil, err 83 } 84 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 { 85 // 2XX 成功,验证应答签名 86 err = wxpay_utility.ValidateResponse( 87 config.WechatPayPublicKeyId(), 88 config.WechatPayPublicKey(), 89 &httpResponse.Header, 90 respBody, 91 ) 92 if err != nil { 93 return nil, err 94 } 95 response := &QueryNegotiationHistoryV2Response{} 96 if err := json.Unmarshal(respBody, response); err != nil { 97 return nil, err 98 } 99 100 return response, nil 101 } else { 102 return nil, wxpay_utility.NewApiException( 103 httpResponse.StatusCode, 104 httpResponse.Header, 105 respBody, 106 ) 107 } 108} 109 110type QueryNegotiationHistoryV2Request struct { 111 ComplaintId *string `json:"complaint_id,omitempty"` 112 Limit *int64 `json:"limit,omitempty"` 113 Offset *int64 `json:"offset,omitempty"` 114} 115 116func (o *QueryNegotiationHistoryV2Request) MarshalJSON() ([]byte, error) { 117 type Alias QueryNegotiationHistoryV2Request 118 a := &struct { 119 ComplaintId *string `json:"complaint_id,omitempty"` 120 Limit *int64 `json:"limit,omitempty"` 121 Offset *int64 `json:"offset,omitempty"` 122 *Alias 123 }{ 124 // 序列化时移除非 Body 字段 125 ComplaintId: nil, 126 Limit: nil, 127 Offset: nil, 128 Alias: (*Alias)(o), 129 } 130 return json.Marshal(a) 131} 132 133type QueryNegotiationHistoryV2Response struct { 134 Data []ComplaintNegotiationHistoryWithLogId `json:"data,omitempty"` 135 Limit *int64 `json:"limit,omitempty"` 136 Offset *int64 `json:"offset,omitempty"` 137 TotalCount *int64 `json:"total_count,omitempty"` 138} 139 140type ComplaintNegotiationHistoryWithLogId struct { 141 LogId *string `json:"log_id,omitempty"` 142 Operator *string `json:"operator,omitempty"` 143 OperateTime *string `json:"operate_time,omitempty"` 144 OperateType *ComplaintNegotiationOperateType `json:"operate_type,omitempty"` 145 OperateDetails *string `json:"operate_details,omitempty"` 146 ImageList []string `json:"image_list,omitempty"` 147 ComplaintMediaList *ComplaintMedia `json:"complaint_media_list,omitempty"` 148 UserAppyPlatformServiceReason *string `json:"user_appy_platform_service_reason,omitempty"` 149 UserAppyPlatformServiceReasonDescription *string `json:"user_appy_platform_service_reason_description,omitempty"` 150} 151 152type ComplaintNegotiationOperateType string 153 154func (e ComplaintNegotiationOperateType) Ptr() *ComplaintNegotiationOperateType { 155 return &e 156} 157 158const ( 159 COMPLAINTNEGOTIATIONOPERATETYPE_USER_CREATE_COMPLAINT ComplaintNegotiationOperateType = "USER_CREATE_COMPLAINT" 160 COMPLAINTNEGOTIATIONOPERATETYPE_USER_CONTINUE_COMPLAINT ComplaintNegotiationOperateType = "USER_CONTINUE_COMPLAINT" 161 COMPLAINTNEGOTIATIONOPERATETYPE_USER_RESPONSE ComplaintNegotiationOperateType = "USER_RESPONSE" 162 COMPLAINTNEGOTIATIONOPERATETYPE_PLATFORM_RESPONSE ComplaintNegotiationOperateType = "PLATFORM_RESPONSE" 163 COMPLAINTNEGOTIATIONOPERATETYPE_MERCHANT_RESPONSE ComplaintNegotiationOperateType = "MERCHANT_RESPONSE" 164 COMPLAINTNEGOTIATIONOPERATETYPE_MERCHANT_CONFIRM_COMPLETE ComplaintNegotiationOperateType = "MERCHANT_CONFIRM_COMPLETE" 165 COMPLAINTNEGOTIATIONOPERATETYPE_USER_CREATE_COMPLAINT_SYSTEM_MESSAGE ComplaintNegotiationOperateType = "USER_CREATE_COMPLAINT_SYSTEM_MESSAGE" 166 COMPLAINTNEGOTIATIONOPERATETYPE_COMPLAINT_FULL_REFUNDED_SYSTEM_MESSAGE ComplaintNegotiationOperateType = "COMPLAINT_FULL_REFUNDED_SYSTEM_MESSAGE" 167 COMPLAINTNEGOTIATIONOPERATETYPE_USER_CONTINUE_COMPLAINT_SYSTEM_MESSAGE ComplaintNegotiationOperateType = "USER_CONTINUE_COMPLAINT_SYSTEM_MESSAGE" 168 COMPLAINTNEGOTIATIONOPERATETYPE_USER_REVOKE_COMPLAINT ComplaintNegotiationOperateType = "USER_REVOKE_COMPLAINT" 169 COMPLAINTNEGOTIATIONOPERATETYPE_USER_COMFIRM_COMPLAINT ComplaintNegotiationOperateType = "USER_COMFIRM_COMPLAINT" 170 COMPLAINTNEGOTIATIONOPERATETYPE_PLATFORM_HELP_APPLICATION ComplaintNegotiationOperateType = "PLATFORM_HELP_APPLICATION" 171 COMPLAINTNEGOTIATIONOPERATETYPE_USER_APPLY_PLATFORM_HELP ComplaintNegotiationOperateType = "USER_APPLY_PLATFORM_HELP" 172 COMPLAINTNEGOTIATIONOPERATETYPE_MERCHANT_APPROVE_REFUND ComplaintNegotiationOperateType = "MERCHANT_APPROVE_REFUND" 173 COMPLAINTNEGOTIATIONOPERATETYPE_MERCHANT_REFUSE_RERUND ComplaintNegotiationOperateType = "MERCHANT_REFUSE_RERUND" 174 COMPLAINTNEGOTIATIONOPERATETYPE_USER_SUBMIT_SATISFACTION ComplaintNegotiationOperateType = "USER_SUBMIT_SATISFACTION" 175 COMPLAINTNEGOTIATIONOPERATETYPE_SERVICE_ORDER_CANCEL ComplaintNegotiationOperateType = "SERVICE_ORDER_CANCEL" 176 COMPLAINTNEGOTIATIONOPERATETYPE_SERVICE_ORDER_COMPLETE ComplaintNegotiationOperateType = "SERVICE_ORDER_COMPLETE" 177 COMPLAINTNEGOTIATIONOPERATETYPE_COMPLAINT_PARTIAL_REFUNDED_SYSTEM_MESSAGE ComplaintNegotiationOperateType = "COMPLAINT_PARTIAL_REFUNDED_SYSTEM_MESSAGE" 178 COMPLAINTNEGOTIATIONOPERATETYPE_COMPLAINT_REFUND_RECEIVED_SYSTEM_MESSAGE ComplaintNegotiationOperateType = "COMPLAINT_REFUND_RECEIVED_SYSTEM_MESSAGE" 179 COMPLAINTNEGOTIATIONOPERATETYPE_COMPLAINT_ENTRUSTED_REFUND_SYSTEM_MESSAGE ComplaintNegotiationOperateType = "COMPLAINT_ENTRUSTED_REFUND_SYSTEM_MESSAGE" 180 COMPLAINTNEGOTIATIONOPERATETYPE_USER_APPLY_PLATFORM_SERVICE ComplaintNegotiationOperateType = "USER_APPLY_PLATFORM_SERVICE" 181 COMPLAINTNEGOTIATIONOPERATETYPE_USER_CANCEL_PLATFORM_SERVICE ComplaintNegotiationOperateType = "USER_CANCEL_PLATFORM_SERVICE" 182 COMPLAINTNEGOTIATIONOPERATETYPE_PLATFORM_SERVICE_FINISHED ComplaintNegotiationOperateType = "PLATFORM_SERVICE_FINISHED" 183) 184 185type ComplaintMedia struct { 186 MediaType *ComplaintMediaType `json:"media_type,omitempty"` 187 MediaUrl []string `json:"media_url,omitempty"` 188} 189 190type ComplaintMediaType string 191 192func (e ComplaintMediaType) Ptr() *ComplaintMediaType { 193 return &e 194} 195 196const ( 197 COMPLAINTMEDIATYPE_USER_COMPLAINT_IMAGE ComplaintMediaType = "USER_COMPLAINT_IMAGE" 198 COMPLAINTMEDIATYPE_OPERATION_IMAGE ComplaintMediaType = "OPERATION_IMAGE" 199) 200
应答参数
200 OK
data 选填 array[object]
【投诉协商历史】 投诉协商历史
属性 | |||||
log_id 必填 string(64) 【操作流水号】 操作流水号 operator 必填 string(64) 【操作人】 当前投诉协商记录的操作人 operate_time 必填 string(64) 【操作时间】 当前投诉协商记录的操作时间 operate_type 必填 string 【操作类型】 当前投诉协商记录的操作类型,对应枚举ComplaintNegotiationOperateType 可选取值
operate_details 选填 string(500) 【操作内容】 当前投诉协商记录的具体内容 image_list 选填 array[string] 【图片凭证】 商户或微信支付客服上传的图片,以URL形式返回。注:此字段不包含用户提交的图片凭证,建议统一使用complaint_media_list字段接收和请求资料凭证,未来该字段将废弃 complaint_media_list 选填 object 【操作资料列表】 对投诉单执行操作时上传的资料凭证,包含用户、商户、微信支付客服等角色操作
user_appy_platform_service_reason 选填 string 【用户申请平台协助原因】 用户此次申请平台协助时选择的申请协助原因(已废弃) user_appy_platform_service_reason_description 选填 string 【用户申请平台协助原因描述】 用户此次申请平台协助时填写的具体申请协助原因描述(已废弃) |
limit 必填 integer
【分页大小】 设置该次请求返回的最大协商历史条数,范围[1,300]
offset 必填 integer
【分页开始位置】 设置该次请求返回的最大协商历史条数,范围[1,300]
total_count 选填 integer
【投诉协商历史总条数】 投诉协商历史总条数,当offset=0时返回
应答示例
200 OK
1{ 2 "data" : [ 3 { 4 "log_id" : "300285320210322170000071077", 5 "operator" : "投诉人", 6 "operate_time" : "2015-05-20T13:29:35.120+08:00", 7 "operate_type" : "USER_CREATE_COMPLAINT", 8 "operate_details" : "已与用户电话沟通解决", 9 "image_list" : [ 10 "https://qpic.cn/xxx" 11 ], 12 "complaint_media_list" : { 13 "media_type" : "USER_COMPLAINT_IMAGE", 14 "media_url" : [ 15 "https://api.mch.weixin.qq.com/v3/merchant-service/images/xxxxx" 16 ] 17 }, 18 "user_appy_platform_service_reason" : "商家响应不及时", 19 "user_appy_platform_service_reason_description" : "一周前就提交咨询了,到现在商家还没理我" 20 } 21 ], 22 "limit" : 50, 23 "offset" : 50, 24 "total_count" : 1000 25} 26
错误码
公共错误码