1. 概述
本文总结了 FineReport 与微信集成的常见问题及解决方案。
微信钉钉推送/单点/同步失败解决方案可参考:微信钉钉推送/单点/同步失败日志定位
2. 微信集成
2.1 发生错误,错误码为:500
问题描述:
前端报错「发生错误,错误码为:500」
日志报错:errorCode:500,errorMsg:com.fr.plugin.weixin.server.WeiXinTokenMissedException
排查步骤一:检查网络
1)前往平台「微信管理>应用管理」,编辑已存在的应用,保存,看能不能保存上,可以说明网络正常,不行则网络不通,检查网络
2)同步通讯录看能否获取用户列表,不行说明网络可能有问题
3)用「管理系统>微信管理>调试工具」工具看下基本信息,token能否获取,获取不到的话一般也是网络问题
4)在报表服务器上ping qyapi.weixin.qq.com,看能否ping通,或者如果配置了正向代理的话,看下代理服务器是否有问题
5)检查服务器是否多个网卡,多网卡的话是否每个网卡都能访问到微信服务器
6)是否是集群环境,是的话,检查每个节点的网络环境
排查步骤二:配置问题
微信后台配置的链接有问题,指向的是别的环境的地址链接,或者说配置好链接以后前端微信应用删除重加了,导致后台配置的链接无效
在「微信管理>应用快捷配置」里,选择应用,点击一键配置,重新配置;或者「微信管理>应用快捷配置」里,生成单点链接以后重新配置到微信应用后台。
排查步骤三:重启服务器
若一键配置无效,可采用重启服务器的方式,服务器重启,所有的代码重新执行。
排查步骤四:手机微信退出重登
有可能是手机缓存引起的,退出重新登录即可。
排查步骤五:微信应用名称
将微信应用名称修改为英文
2.2 微信应用添加失败
问题描述:
微信应用无法添加成功,报错为:网络异常或请确认当前使用的 corpid 和 secret 是否正确。
原因分析:
应用信息有误或网络问题。
排查步骤一:应用信息排查
1)检查微信应用配置是否正确,可见范围是否为部门,部门下是否有用户。
2)检查环境是否能添加正常应用,若能正常添加,说明环境没有问题,进行应用信息排查。
排查步骤二:网络排查
1)使用微信调试工具,检查能否获取微信企业信息。通常情况下,应用添加不上的时候,应该会返回如下的内容,这个结果表示报表环境调用微信接口,获取不到 token。
2)远程的报表环境所在服务器,在浏览器中(推荐使用Chrome)输入以下地址:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=微信应用ID&corpsecret=微信应用secret,返回如下图所示信息,代表服务器网络正常,可以获取微信 token 值,排除服务器网络原因。
3)如果服务器网络正常,而工程访问不到微信,可能的原因如下:
防火墙:检查下是否开启了防火墙,把工程端口限制了(限制了出站访问)。
JDK 问题:更换 JDK 版本。
查看报错:若后台有报错 PKIX path building failed,是 ssl 证书问题,重装 JDK 。
代理服务器配置问题。
4)外接finedb数据库用户没有建表权限,导致特定SQL语句执行异常
为外接finedb数据库用户添加建表权限,重启工程。
5)工程配置SSL,使用了自签名证书,会认为微信服务这种信任证书不可信
建议在正式工程中,不要使用自签名证书,而是购买经过认证的证书。
2.3 平台同步微信用户失败
问题描述:
平台报错同步失败,失败原因:树构建失败,XX部门找不到对应父部门。
解决方案:
1)创建的微信应用,可见范围只是根部门下的某个部门,修改应用的可见范围为根部门或使用 tag 标签(tag标签只能够选单个用户,如果勾选了部门是无法同步的)
2)企业微信私有部署,不想设置可见范围是根部门,也不支持根据 tag 标签修改应用可见范围,可联系帆软技术支持通过二次开发处理
2.4 企业微信手动匹配清空后无效果
问题描述:
做了企业微信集成,手动匹配,先匹配一遍,保存,再选择不选,点立即更新,这个企业微信用户还是能直接用企业微信端,需要删除用户或者禁用之后,才能立即生效,选择不选,之后立即更新还是没办法立即生效。
原因分析:
企业微信本身存在缓存。
解决方案:
重新登录或者等待一段时间候会更新。
2.5 微信解析参数值失败
问题描述:
微信集成配置单个模板链接,参数值设置如下,推送到移动端打开后获取不到值:
原因分析:
参考文档参数值解析的说明:企业微信集成,当参数值为公式时,不应该勾选「解析参数值」。
解决方案:
取消勾选解析参数值,则会每次移动端访问是自动计算。
2.6 微信小程序嵌入报表链接被截断
问题描述:
微信小程序集成嵌入的报表链接地址被截断。
原因分析:
url中 ? 及之后的内容被截断,是微信小程序本身的机制导致的。
解决方案:
需要对url进行转码。
2.7 redirect_uri需使用可信域名
问题描述:
微信集成后,移动端访问,提示「redirect_uri需使用可信域名」
原因分析:
微信集成时,移动端访问的redirect_uri应当与微信后台(即网页授权和JS-SDK处)的配置一致
解决方案:
1)服务器地址中的域名应与网页授权JS-SDK中的域名保持一致
2)移动端的redirect_uri和网页授权JS-SDK中的域名一致
3. 微信单点登录
3.1 单点登录失败显示移动端的登录页面
原因分析:
微信管理后台自建应用的应用主页填写的不是单点链接。
解决方案:
单点链接的生成参考 4.2.3 节:企业微信集成。
3.2 所有用户都显示登录页面
原因分析:
1)平台用户和集成用户都正常添加可查看,可能是匹配方式错误。
2)平台用户或集成用户里没有用户数据
解决方案:
1)参考文档 4.3 节 企业微信集成。
2)同步平台用户或集成用户即可。
3.3 部分用户显示登录页面
原因分析:
1)该用户在平台被禁用。
2)平台用户或集成用户的数据缺失导致匹配失败。
解决方案:
1)开放权限。
2)重新匹配数据保持一致。
3.4 显示PC的登录页面
解决方案:
安装HTML5移动端展示插件。
3.5 微信所有用户单点后显示加载失败。
原因分析:
微信管理-服务器地址中,以/结尾,FineReport会自动去掉尾部的/,这里主要是会影响生成链接拼接参数和定时调度推送链接的生成,所以这个去掉尾部/的逻辑也不能去掉。
解决方案:
去掉/,并保证在去掉/的时候可以正常访问工程,重新生成地址挂到后台应用主页地址。
3.6 有自己的门户登录页,登录门户账号后会跳转到平台登录页
问题描述:
有自己的门户登录页,登录门户账号后会跳转到平台登录页而不是直接访问首页/目录/单张模板。
原因分析:
写了门户登录页,却没有放行微信请求,
解决方案:
可以抓包定位到问题,并且放行 /weixin/single/login 请求。
钉钉:/dingtalk/single/login
飞书:/feishu/single/login
WeLink:/welink/single/login
4. 推送微信消息
4.1 微信推送打开报错定时结果文件不存在
问题描述:
定时调度修改后无法保存,会提示任务更新失败,微信推送定时结果链接,在手机端打开报错提示找不到定时结果文件
原因分析:
put 请求被禁用。
解决方案:
安装 put、delete 请求转换插件。
4.2 无法同时推送两个及以上钉钉群
问题描述:
定时调度推送至钉钉群,当选择的群为多个时,只有排在第一位的群可以正常收到消息,其他群不行。单独设置推送到其中的某一个群,可以正常推送。
原因分析:
微信应用的 chart 相关接口权限未开通导致,如下图所示:
解决方案:
开启 chart 相关接口权限。
4.3 定时调度推送微信链接无单点效果
问题描述:
定时调度在移动端微信推送的时候,无法直接获取到用户名。
原因分析:
推送自定义链接,需要手动在微信页面生成一个链接进行推送,否则不会走单点逻辑。
解决方案:
在微信管理-应用快捷配置中手动生成模板的微信链接进行推送。
4.4 定时调度部分用户无法接收
问题描述:
微信部分用户定时调度消息收不到消息
排查步骤:
1)用户是否匹配了平台用户
2)用户匹配的平台用户是否在推送的范围内
3)检查在触发消息推送的时间点,是否有同步通讯录的操作,导致匹配关系更新或更新不及时出现匹配失败
4.5 微信集成,企业微信能收消息,个人微信收不到
问题描述:
信集成各项配置正常的情况下,企业微信可以收消息,关联的个人微信收不到消息
解决方案:
登录企业微信,选择「我>设置」,选择「新消息通知」,关闭「仅在企业微信中接收消息」即可。
4.6 Non-existent task result files
问题描述:
推送消息到微信,报错「网络请求失败」,日志报错「java.lang.Exception: Non-existent task result files」
原因分析:
tomcat7 的中文编码方式默认为 ISO-8859-1,tomcat 8 和 9 的中文编码方式默认为 UTF-8 。
当工程所使用的的 Tomcat 版本发生变化,且微信推送的模板名称是中文时,会出现该报错
解决方案:
保持 Tomcat 的中文编码方式不变即可。
5. 预览模板
5.1 微信集成后扫码控件无法使用
问题描述:
微信集成单点是成功的,域名通过了校验,文本框点击扫码按钮没反应。有无法扫码的弹窗提示「当前浏览器无法扫描」,但 PC 端和 App 内正常。报错如下图所示:
原因分析:
微信集成环境下,要求实现单点登录,域名必须经过校验。域名校验错误,后台校验的是带XX端口的域名,但是实际 H5 进去之后是不带 XX 端口的域名,导致微信集成后文件控件或文本控件扫码无法使用。
解决方案:
5.2 超链跳转报错 ERROR UNKNOWEN
问题描述:
移动端模板预览时,点击超链跳转子报表,报错:ERROR UNKNOWEN
原因分析:
参数过长导致报错
解决方案:
取消勾选超链的「继承报表参数」