{"record":{"id":"f42d89288bc4b06a","repo":"binarywang/WxJava","slug":"100","errorCode":null,"errorMessage":"「联系我」使用人数默认限制不超过100人(包括部门展开后的人数)","messagePattern":"「联系我」使用人数默认限制不超过100人\\(包括部门展开后的人数\\)","errorType":"validation","errorClass":"WxRuntimeException","httpStatus":null,"severity":"error","filePath":"weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java","lineNumber":51,"sourceCode":"import me.chanjar.weixin.cp.bean.external.interceptrule.WxCpInterceptRuleInfo;\nimport me.chanjar.weixin.cp.bean.external.interceptrule.WxCpInterceptRuleList;\nimport org.apache.commons.lang3.ArrayUtils;\nimport org.apache.commons.lang3.StringUtils;\n\n/**\n * The type Wx cp external contact service.\n *\n * @author 曹祖鹏, yuanqixun, Mr.Pan, Wang_Wong\n */\n@RequiredArgsConstructor\npublic class WxCpExternalContactServiceImpl implements WxCpExternalContactService {\n  private final WxCpService mainService;\n\n  @Override\n  public WxCpContactWayResult addContactWay(WxCpContactWayInfo info) throws WxErrorException {\n\n    if (info.getContactWay().getUsers() != null && info.getContactWay().getUsers().size() > 100) {\n      throw new WxRuntimeException(\"「联系我」使用人数默认限制不超过100人(包括部门展开后的人数)\");\n    }\n\n    final String url = this.mainService.getWxCpConfigStorage().getApiUrl(ADD_CONTACT_WAY);\n\n    return WxCpContactWayResult.fromJson(this.mainService.post(url, info.getContactWay().toJson()));\n  }\n\n  @Override\n  public WxCpContactWayInfo getContactWay(String configId) throws WxErrorException {\n    JsonObject json = new JsonObject();\n    json.addProperty(\"config_id\", configId);\n\n    final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_CONTACT_WAY);\n    return WxCpContactWayInfo.fromJson(this.mainService.post(url, json.toString()));\n  }\n\n  @Override\n  public WxCpContactWayList listContactWay(Long startTime, Long endTime, String cursor, Long limit) throws WxErrorException {","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/binarywang/WxJava/blob/1c43293a3c2c9d7e91304b6d037fb017f680d0c6/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java#L33-L69","documentation":"Thrown by WxCpExternalContactServiceImpl.addContactWay() when the contact-way's user list has more than 100 entries. WeChat enforces a 100-user ceiling on a single 'contact me' configuration (including department-expanded counts client-side is the developer's concern, but the SDK guards the raw list size here). It is a WxRuntimeException guarding an upstream API limit.","triggerScenarios":"Creating a 'contact me' QR/code configured for more than 100 users in info.getContactWay().getUsers(); assigning a large department roster flattened to users beyond the limit.","commonSituations":"Bulk onboarding that puts all sales staff on one contact way; department-to-users expansion not paginated; reusing a contact way for an org-wide team.","solutions":["Split users across multiple contact-way configurations, each <= 100.","Paginate/filter the user list before calling addContactWay.","Validate the size before the call and surface a clear error to the operator."],"exampleFix":"// before\nservice.addContactWay(info); // info.users.size() == 150\n// after - partition into batches of 100\nList<List<String>> batches = Lists.partition(info.getContactWay().getUsers(), 100);\nfor (List<String> batch : batches) {\n  info.getContactWay().setUsers(batch);\n  service.addContactWay(info);\n}","handlingStrategy":"validation","validationCode":"List<String> users = info.getContactWay().getUsers();\nif (users != null && users.size() > 100) {\n  throw new IllegalArgumentException(\"contact way users must be <= 100\");\n}\nservice.addContactWay(info);","typeGuard":"static boolean withinUserLimit(List<String> users) { return users == null || users.size() <= 100; }","tryCatchPattern":"null","preventionTips":["Partition user lists into batches of <= 100.","Validate size before addContactWay.","Avoid putting org-wide rosters on one contact way."],"tags":["weixin-api","cp","external-contact","validation","business-rule"],"backgroundTag":null,"analyzedSha":"1c43293a3c2c9d7e91304b6d037fb017f680d0c6","analyzedAt":"2026-08-14T02:29:11.060Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}