# (项目化)企业微信直连

# 一、前置条件

私有化部署,需要满足如下条件:

# 0、满足项目化支持条件

本场景实际是去“微协同私有化服务部署”的能力,将微协同私有化服务的能力全部合并到OA主系统中。

本场景支持:免绑定登录,消息推送

本场景不支持:手动绑定登录,人员同步

本场景涉及项目化定制开发额外投入成本,工作量10人天。

# 1、网络条件

  1. 协同系统的访问地址是公网地址,必须是域名,并且是备案过的(避免企业微信校验为非法域名,禁止访问),OA在内网的客户可以使用反向代理,分离部署方案。
  2. (不用手动创建rest账号) 微协同基础配置保存的时候,OA会将rest账号密码保存至oa数据库(rest账号密码的作用就是获取访问OA的token,即是访问权限)。
  3. qyapi.weixin.qq.com企业微信的接口地址,需要能在oa服务器访问到。

# 2、其他条件

  1. 微协同和微协同-私有化两个插件都需要安装

  2. 文件夹的层级目录不能有中文名称

  3. 微协同域名如果是通过nginx配置的,那么请在nginx-conf配置文件中,将underscores_in_headers on配置信息加到http块中去即可。可参考链接:https://blog.csdn.net/loongshawn/article/details/78199977

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    underscores_in_headers on; //增加此配置即可
    #keepalive_timeout  0;
    keepalive_timeout  65;

nginx配置 https://open.seeyoncloud.com/v5doc/142/1190/1957.html 在上面配置中还需在part.conf加入以下配置

location ~ /seeyon/wechat/content.do {
            proxy_pass http://seeyon_v5_cluster;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_redirect     off;
            proxy_connect_timeout 300;
            proxy_read_timeout 300;
            proxy_send_timeout 300;
        }

location ~ /seeyon/wechat/menu.do {
            proxy_pass http://seeyon_v5_cluster;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_redirect     off;
            proxy_connect_timeout 300;
            proxy_read_timeout 300;
            proxy_send_timeout 300;
        }

location ~ /seeyon/wechat/pcapp.do {
            proxy_pass http://seeyon_v5_cluster;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_redirect     off;
            proxy_connect_timeout 300;
            proxy_read_timeout 300;
            proxy_send_timeout 300;
        }

注意:如果oa的域名包含上下文,例如:http://oa.xxx.com/xxxx/seeyon 需要nginx添加配置,修改cookie_path,避免调用rest请求的时候不自动携带session

location /xxxx {
   proxy_pass http://backend_server;
   
   # 重写 Set-Cookie 路径
   proxy_cookie_path /seeyon /xxxx;
}

# 二、部署企业微信直连插件补丁

# 1、打上补丁

# 三、管理端后台配置

# 1、OA管理后台配置

登录集团管理员账号,点击【微协同管理平台】菜单,进入微协同基础设置页面,然后填写OA域名地址,点击并校验通过

1723789114091.png

注意:协同服务器地址必须携带协议头和端口,端口后面不能携带任何斜杠和其他路由信息

# 2、配置免绑定登录

1724031019966.png

如果使用工号进行免绑定,需要看下下面链接如何企业微信新增工号 https://open.seeyoncloud.com/#/faq/faq/v1/share?url=Z2JySmU+MjI1Mw==

# 四、企业微信配置

# 1、创建自建应用

可见范围设置为全员

# 2、oa数据库执行sql

1、首先,将下列的所有参数都获取到 【企业名称】、【CorpID】获取地方如下图

【应用AgentId】、【应用Secret】获取如下图

2、根据上述图例中的参数组装初始化SQL语句(需要注意的是,引号内的内容不要留有空格)

INSERT INTO wechat_account (ID,ACCOUNT_NAME,ACCOUNT_TYPE,CORP_ID,CORP_SECRET,AGENT_ID,CREATE_TIME,UPDATE_TIME,XT_ACCOUNT_ID,EXT_ATTR_1,EXT_ATTR_2,EXT_ATTR_3,EXT_ATTR_4,EXT_ATTR_5,EXT_ATTR_6,EXT_ATTR_7,EXT_ATTR_8,EXT_ATTR_9) VALUES (-1106654060436373475,'企业名称','wechat','CorpID','应用Secret','应用AgentId','2024-08-12 15:30:53.0','2024-08-12 15:30:53.0','协同单位id',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

示例:

INSERT INTO wechat_account (ID,ACCOUNT_NAME,ACCOUNT_TYPE,CORP_ID,CORP_SECRET,AGENT_ID,CREATE_TIME,UPDATE_TIME,XT_ACCOUNT_ID,EXT_ATTR_1,EXT_ATTR_2,EXT_ATTR_3,EXT_ATTR_4,EXT_ATTR_5,EXT_ATTR_6,EXT_ATTR_7,EXT_ATTR_8,EXT_ATTR_9) VALUES (-1106654060436373475,'大海企业','wechat','ww23fb96004ea7ba94','rMlruSYL5Ma18JGHy3UEqpGcrduZUQRfoAicl2Y37qc','1000004','2024-08-12 15:30:53.0','2024-08-12 15:30:53.0','6543897130257368270',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

# 3、配置菜单

1、主页菜单地址获取 替换{协议头}、{corpid}、{oa域名}、{oa端口}、{上一步插入sql的id}(注意是id,不是XT_ACCOUNT_ID)、{应用的agentid},括号也一起替换 PS: oa域名不要协议头和端口 PS:http时,{协议头}替换成http,https时,{协议头}替换成https

https://open.weixin.qq.com/connect/oauth2/authorize?appid={corpid}&redirect_uri={协议头}%3A%2F%2F{oa域名}%3A{oa端口}%2Fseeyon%2Fwechat%2Fmenu.do%3Fmethod%3DgetMenu%26accountid%3D{上一步插入sql的id}&response_type=code&scope=snsapi_privateinfo&state=123&agentid={应用的agentid}#wechat_redirect

如果是443端口或者80端口,用下面链接替换

https://open.weixin.qq.com/connect/oauth2/authorize?appid={corpid}&redirect_uri={协议头}%3A%2F%2F{oa域名}%2Fseeyon%2Fwechat%2Fmenu.do%3Fmethod%3DgetMenu%26accountid%3D{上一步插入sql的id}&response_type=code&scope=snsapi_privateinfo&state=123&agentid={应用的agentid}#wechat_redirect

2、跳转链接获取 输入企业corpid点击生成应用url,复制地址 1723790172149.png

3、点击自定义菜单

1723789697545.png

4、新增两个菜单,一个主页,一个待办工作 5、填写名称和地址 地址就用1、2步的地址

1723789731010.png

6、配置完成两个菜单

1723790375704.png

# 4、配置可信域名和可信IP

1、点开自建应用

1678271204719.png

2、**设置可信域名,填写OA域名,要带上端口号,如果是443/80端口的话不带上端口。请先点击【申请校验域名】,然后操作下一步,下载文件。**待下一步操作完毕后,域名校验则会通过。 配置的目的是企业微信跳转自建应用的时候,跳转地址必须是这里配置的域名才能跳转。

1723788884601.png

3、将下载的txt认证文件放到 \ApacheJetspeed\webapps\ROOT目录下 这一步目的是企业微信验证域名的时候,会请求域名根目录下的txt文件来验证域名所属

4、配置oa服务的IP(内网地址外网地址都配上)

配置的目的是,oa调用企业微信接口获取数据的时候,调用方必须是配置里的ip才能成功调用。

1678271455162.png

# 5、设置应用主页

1、进入企业微信后台【应用管理】找到微协同所属的自建应用,点击【应用主页】根据弹框页面提示将地址粘贴到该处 (第三步配置菜单的第一步获取的主页地址)

1717147333420.png

# 五、消息配置

登录OA后台,按照下图所示进行配置即可

1717147685950.png

# 错误及解决方案

1、报错:”企业微信认证失败,请稍后再试“

1724120493655.png 1724120558885.png

解决:访问qyapi.weixin.qq.com不通,需要开通

2、基础设置保存报错weixin.label.noPlgin

1728969459612.png

解决:安装微协同-私有化插件

3、报错“JSONObject["open _userid"] not found”

1729499759517.png

解决,查看日志,获取ip,配置可信ip

4、报错“OA凭证异常,请检查微协同基础配置是否通过”

1729501543786.png

解决:基础配置重新报错一下,等2分钟后再试一下

5、移动端正常跳转,pc跳转在默认浏览器打开的时候卡住

1729581952750.png

原因:企业微信配置的可信域名是443/80端口的,跳转链接的时候自动去掉了端口号,导致跳转链接和配置的可信域名不一致,报错不是可信域名 解决:企业微信可信域名在端口号为443/80的时候不配置端口号

6、主页不想跳转allApps,想跳转自定义的菜单

解决:不设置主页地址

创建人:zhangzuh
修改人:zhangzuh、admin、het