私有部署版如何在私有部署版中配置微信
一.概述

通过配置微信公众号(服务号),可实现在微信端使用行云管家。

一旦微信服务号和行云管家绑定成功,关注这个微信公众号的微信用户,即可以通过微信查看主机、对主机进行体检、接收到告警和体检报告、查看云主机的成本。

二.前置条件

行云管家私有部署版本开通微信功能,需要满足以下先决条件:

1.申请一个微信公众平台服务号,并通过认证;

对于该认证过的服务号,需要满足以下要求:

  a)开启开发者功能;

  b)具备 基础支持、网页授权、模版消息 以及 自定义菜单 四项接口权限。

2.准备两个域名,一个“主域名”用于PC端浏览器访问行云管家,一个“移动域名”供微信接口访问以及移动端使用;

3.行云管家主域名及移动域名均需要能够以80或者443(用于https访问)端口对行云管家进行访问;

4.在DNS服务器中配置上述两个域名指向行云管家服务器IP地址;

5.登录微信公众平台后,左边功能栏里没有“模版消息”菜单,请先在“添加功能插件”里申请,申请过程所在行业请选择 “IT科技 互联网|电子商务” 和“IT科技 IT软件与服务” 这两个,申请后一般一天左右会通过;

6.行云管家门户服务器必须要能访问外网,能连通微信公众号地址api.weixin.qq.com

三.配置操作
1.配置行云管家域名

在行云管家管理控制台中配置以域名访问行云管家,操作如下:

a)以浏览器(推荐使用Chrome)访问行云管家控制台 http://{行云管家IP}:{端口}/console,并登录;

b)配置行云管家的访问协议:

如果需要配置为HTTPS访问,则勾选“HTTPS协议”,并指定用于nginx的“SSL证书”及“SSL证书密钥”(SSL证书密钥要求无密码,如果是有密码的密钥,可以执行“openssl rsa -in [有密码.key] -out [无密码.key] ”来获取无密码密钥),此时“HTTPS端口”必须为443;

c)在行云管家控制台中配置域名访问:

2.配置移动域名

将上述准备的“移动域名”配置于行云管家中。

a)以root用户ssh登录到安装行云管家的服务器;

b)执行以下两行命令,开启nginx中的移动域名访问配置(命令中的{移动域名}在执行命令前需要修改为真实的移动域名)(如果做了双机部署,则在主机和备机中均需执行本操作):

sed -i '/^[[:blank:]][[:blank:]]*#[[:blank:]]*include[[:blank:]][[:blank:]]*\/etc\/nginx\/nginx_guanjia_m.conf;/s/^[[:blank:]]*#[[:blank:]]*/ /g' /etc/nginx/nginx.conf
sed -i '/^[[:blank:]][[:blank:]]*server_name[[:blank:]][[:blank:]]*m.yunguanjia.com;/s/m.yunguanjia.com/{移动域名}/g' /etc/nginx/nginx_guanjia_m.conf

c)执行以下一行命令,配置转发域名(命令中的{主域名}在执行命令前需要修改为真实的主域名)(如果做了双机部署,则在主机和备机中均需执行本操作):

sed -i "s/ent.yunguanjia.com/{主域名}/g" /etc/nginx/nginx_guanjia_m.conf

d)如果开启了HTTPS访问,则执行以下三行命令开启移动域名的HTTPS访问(如果做了双机部署,则在主机和备机中均需执行本操作):

sed -i "/replace[[:blank:]][[:blank:]]*to[[:blank:]][[:blank:]]*guanjia[[:blank:]][[:blank:]]*domain[[:blank:]][[:blank:]]*name/s/http/https/g" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*listen[[:blank:]][[:blank:]]*[[:digit:]][[:digit:]]*;/s/[1-9][0-9]*[0-9]*[0-9]*[0-9]*/443/g" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*listen[[:blank:]][[:blank:]]*\[\:\:\]\:[[:digit:]][[:digit:]]*;/s/[1-9][0-9]*[0-9]*[0-9]*[0-9]*/443/g" /etc/nginx/nginx_guanjia_m.conf

e)如果开启了HTTPS访问,则执行以下10行命令,配置SSL(如果做了双机部署,则在主机和备机中均需执行本操作)

sed -i "/^[[:blank:]]*expires[[:blank:]][[:blank:]]*\$expires;/a\ ssl_stapling_verify on;" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*expires[[:blank:]][[:blank:]]*\$expires;/a\ ssl_stapling on;" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*expires[[:blank:]][[:blank:]]*\$expires;/a\ ssl_session_timeout 10m;" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*expires[[:blank:]][[:blank:]]*\$expires;/a\ ssl_session_cache shared:SSL:10m;" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*expires[[:blank:]][[:blank:]]*\$expires;/a\ ssl_prefer_server_ciphers on;" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*expires[[:blank:]][[:blank:]]*\$expires;/a\ ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:\!DSS';" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*expires[[:blank:]][[:blank:]]*\$expires;/a\ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*expires[[:blank:]][[:blank:]]*\$expires;/a\ ssl_dhparam \/etc\/ssl\/certs\/dhparam.pem;" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*expires[[:blank:]][[:blank:]]*\$expires;/a\ ssl_certificate_key \"\/etc\/ssl\/private\/guanjia-nginx.key\";" /etc/nginx/nginx_guanjia_m.conf
sed -i "/^[[:blank:]]*expires[[:blank:]][[:blank:]]*\$expires;/a\ ssl_certificate \"\/etc\/ssl\/certs\/guanjia-nginx.crt\";" /etc/nginx/nginx_guanjia_m.conf
四.开启微信公众号的开发者功能

以浏览器登录微信公众号平台https://mp.weixin.qq.com,输入“用户名”及“密码”点击“登录”后,需要管理员微信扫描二维码并确认登录

1.取微信公众号开发者密码并设置IP白名单

a)登录微信公众号平台后,点击界面左边的“开发”->“基本配置”菜单,进入到基本配置页面

b)在基本配置页面中,点击“开发者密码”右侧的“重置”,将弹出密码重置框

c)在密码重置框中,点击“确定重置”,将会要求输入微信公众号的登录密码以验证操作者身份,并需要管理员微信扫描二维码并确认。将开发者密码重置,同时,请记录好“APPID” 及 开发者密码AppSecret

d)设置IP白名单,在基本配置页面中,点击“IP白名单”右侧的“查看”,将弹出查看IP白名单框

e)在出查看IP白名单框中,点击“修改”,进入编辑框

f)在修改输入框中,输入部署行云管家的服务器所在网络的公网出口 IP地址,并点击“确认修改”,即可设置IP白名单,点击“确认修改”后,需要微信公众号管理员使用微信扫描二维码并确认

2.设置接口配置信息

a)登录微信公众号平台后,点击页面左侧的“开发”->“基本配置”菜单,进入到基本配置页面

b)在“服务器配置”中点击“启用”,弹出提示确认框

c)点击提示确认框中的“确定”,即可启用服务器配置

d)在“服务器配置”中,点击“修改配置”,将进入配置修改页面

e)在配置修改页面中,将“URL”框后面的内容设置为 http://{移动域名}/api/weixin (如果行云管家配置为https访问,则设置为 https://{移动域名}/api/weixin)(输入时,{移动域名}需要改为真实的移动域名);在“Token”输入框中输入一个长度为3至32字符的token,并记录好;点击“随机生成”,生成EncodingAESKey,并记录好;将“消息加解密方式”选为“明文模式”;此时,先不要点击“提交”

f)以root用户ssh登录到安装行云管家的服务器,执行以下十行命令,设置微信公众号相关信息(注意:下述命令中{AppID}、{AppSecret}、{Token}、{EncodingAESKey}、{主域名}及{移动域名}是示例,执行命令前需改为真实内容)(如果做了双机部署,则仅需要在当前行云管家运行所在服务器中执行)

echo "" >> /opt/cloudbility/conf/cloudPortal.properties
echo "server.pc.host={主域名}" >> /opt/cloudbility/conf/cloudPortal.properties
echo "server.mobile.host={移动域名}" >> /opt/cloudbility/conf/cloudPortal.properties
echo "weixin.page=http://{移动域名}/" >> /opt/cloudbility/conf/cloudPortal.properties
echo "weixin.enabled=true" >> /opt/cloudbility/conf/cloudPortal.properties
echo "weixin.appId={AppID}" >> /opt/cloudbility/conf/cloudPortal.properties
echo "weixin.secret={AppSecret}" >> /opt/cloudbility/conf/cloudPortal.properties
echo "weixin.token={Token}" >> /opt/cloudbility/conf/cloudPortal.properties
echo "weixin.aesKey={EncodingAESKey}" >> /opt/cloudbility/conf/cloudPortal.properties
echo "weixin.redirectUri=http://{移动域名}/api/wxoauth2" >> /opt/cloudbility/conf/cloudPortal.properties

g)如果行云管家开启了HTTPS访问,则执行以下命令(如果做了双机部署,则仅需要在当前行云管家运行所在服务器中执行)

sed -i '/^weixin.page=/s/http/https/g' /opt/cloudbility/conf/cloudPortal.properties
sed -i '/^weixin.redirectUri=/s/http/https/g' /opt/cloudbility/conf/cloudPortal.properties

h)执行以下命令,重启行云管家(注意:如果做了双机部署,则需要先冻结SkybilityHA对行云管家相关服务的接管,勾选全局禁用)(如果做了双机部署,则仅需要在当前行云管家运行所在服务器中执行)

/etc/init.d/jetty restart

  命令执行之后,需要等待jetty完全启动成功,可执行以下命令来确认,执行命令后有输出则表示jetty完全启动成功。

ss -ntpl |grep 8080

  执行上述命令后,如果是双机部署,而且执行命令前冻结了SkybilityHA对行云管家相关服务的接管,则需要执行解冻操作,以恢复SkybilityHA对行云管家相关服务的接管。

i)回到上述第e步微信公众号配置页面中,点击“提交”,将弹出提示确认框

j)在提示确认框中,点击“确定”,即可配置成功

3.配置网页授权域名

a)登录微信公众号平台后,点击左侧的“设置”->“公众号设置” 菜单,进入到公众号设置页面

b)在公众号设置页面中,点击“功能设置”,进入功能设置页面

c)在功能设置页面中,点击“网页授权域名”右侧的“设置”,将弹出网页授权域名框

d)在网页授权域名框中,输入授权域名(即移动域名),此时,先不要点击“确认”

e)在网页授权域名框中,点击“点击下载”,将文件下载,并将下载所得文件原封不动(包括不能修改文件名)的拷贝到行云管家服务器的 /opt/jetty/webapps/root/ 目录下(如果做了双机部署,则需要同时放到主机和备机的该目录下)。此时,先不要点击“确认”

f)以root账号ssh登录到行云管家服务器,编辑 /etc/nginx/nginx_guanjia_m.conf 文件,找到以下内容,并将其中的 “weixin_domain_validate_file.txt”修改为上述第e部下载所得的文件的文件名(如果做了双机部署,则在主机及备机中均需执行本操作)

#replace weixin_domain_validate_file
location /weixin_domain_validate_file.txt {
  root /opt/jetty/webapps/root;
}

g)以root账号ssh登录到行云管家服务器,执行以下命令,重新加载nginx配置(如果做了双机部署,则仅需在行云管家当前运行所在的服务器中执行)

/sbin/nginx -s reload

h)返回上述第e部的在网页授权域名框中,点击“确认”,即可完成配置网页授权域名

五.创建微信公众号菜单

以浏览器登录微信公众号平台https://mp.weixin.qq.com,输入“用户名”及“密码”点击“登录”后,需要管理员微信扫描二维码并确认登录

a)登录后,点击左侧的“开发”->“开发者工具”菜单,进入到开发者工具页面

b)在开发者工具页面,点击“在线接口调试工具”,进入接口调试工具页面

c)在接口调试工具页面,输入“appid”(前述“获取微信公众号开发者密码并设置IP白名单”步骤中所取得的AppID)、输入“secret”(前述“获取微信公众号开发者密码并设置IP白名单”步骤中所取得的开发者密码),并点击“检查问题”,将会生成“access_token”显示在页面下方,记录下这个“access_token”(下图中红框内橙色部分内容,不包括双引号)。此时,不要关闭当前这个接口调试工具页面。

d)以文本编辑器编辑下述文本内容,将其中的“{APPID}”(共有三处)替换为真实的“开发者ID(即AppID)”,将其中的“{移动域名}”(共有三处)替换为真实的“移动域名”,如果行云管家被设置为https访问的,则将其中的“redirect_uri=http”替换为“redirect_uri=https”(共有三处)(可在文本编辑中用“查找/替换”来做替换操作)

 "微官网"下面的"url": "https://www.cloudbility.com/mobile/default.html"可以改成您公司自己的链接,允许自定义

{
  "button": [
    {
      "name": "关于",
      "sub_button": [
         {
            "type": "view",
            "name": "微官网",
            "url": "https://www.cloudbility.com/mobile/default.html"
         }
      ]
    },
    {
      "name": "我的",
      "sub_button": [
         {
            "type": "view",
            "name": "云资源",
            "url": "https://open.weixin.qq.com/connect/oauth2/authorize?appid={APPID}&redirect_uri=http%3A%2F%2F{移动域名}%2Fapi%2Fwxoauth2&response_type=code&scope=snsapi_base&state=index#wechat_redirect"
         },
         {
            "type": "view",
            "name": "个人资料",
            "url": "https://open.weixin.qq.com/connect/oauth2/authorize?appid={APPID}&redirect_uri=http%3A%2F%2F{移动域名}%2Fapi%2Fwxoauth2&response_type=code&scope=snsapi_base&state=userProfile#wechat_redirect"
         },
         {
            "type": "view",
            "name": "系统设置",
            "url": "https://open.weixin.qq.com/connect/oauth2/authorize?appid={APPID}&redirect_uri=http%3A%2F%2F{移动域名}%2Fapi%2Fwxoauth2&response_type=code&scope=snsapi_base&state=sysSettings#wechat_redirect"
         }
      ]
    }
  ]
}

e)返回前述第c步的接口调试工具页面,将“接口类型”选择为“自定义菜单”、“access_token”输入框中输入前述第c步所获得的access_token、把上述第d步编辑好的代码拷贝输入到“body”输入框中,然后点击“检查问题”,即可完成微信公众号菜单设置

六.添加模板消息功能

以浏览器登录微信公众号平台https://mp.weixin.qq.com,输入“用户名”及“密码”点击“登录”后,需要管理员微信扫描二维码并确认登录

a)登录后,点击左侧的“功能”->“模版消息”菜单,进入到模版消息页面

b)在模版消息页面中,点击“模版库”,进入模版库页面

请检查所在行业,是否为 “IT科技 互联网|电子商务” 和“IT科技 IT软件与服务” 这两个,不是的话请改为这两个,否则后面操作可能搜不到一些模板(这里一个月只能修改一次)

c)需要添加的模版如下表,添加模版的方法如后续步骤

序号 属性名 模板编号 模板标题 一级行业 二级行业
1 weixin.template.systemUpgrade OPENTM411122462 服务器维护通知 IT科技 IT软件与服务
2 weixin.template.memberJoin OPENTM207685059 成员加入提醒 IT科技 互联网|电子商务
3 weixin.template.costNotice OPENTM407369247 消费预警通知 IT科技 IT软件与服务
4 weixin.template.alertRecovered TM00540 告警恢复通知 IT科技 IT软件与服务
5 weixin.template.session2FA OPENTM409951496 验证码通知 IT科技 互联网|电子商务
6 weixin.template.dangerousInstructionAudit OPENTM413134240 审核通知 IT科技 IT软件与服务
7 weixin.template.bindNotice OPENTM217363134 绑定通知 IT科技 互联网|电子商务
8 weixin.template.teamPayServeRenew OPENTM405936955 续费成功提醒 IT科技 互联网|电子商务
9 weixin.template.loginSuccessNotice OPENTM201673425 登录成功提醒 IT科技 互联网|电子商务
10 weixin.template.unbindNotice OPENTM217338541 解绑通知 IT科技 IT软件与服务
11 weixin.template.healthCheckLaunched OPENTM401232834 体检报告通知 IT科技 互联网|电子商务
12 weixin.template.memberLeave OPENTM400218865 成员退出通知 IT科技 互联网|电子商务
13 weixin.template.earlyWarning OPENTM206852454 预警通知 IT科技 IT软件与服务
14 weixin.template.alertFired TM00541 告警通知 IT科技 IT软件与服务
15 weixin.template.remoteLogin OPENTM401114987 异地登录提醒 IT科技 IT软件与服务

d)参考上述第c步的表,在模版库页面中,在搜索框中输入“模版标题”的值,然后点击搜索框中的“放大镜”图标,即可搜索到一个或多个模版标题包含你在搜索框中所输入内容的模版,例如上述第c步的表中,有一行模版标题为“预警通知”的模版,将“预警通知”输入到搜索框,然后点击“放大镜”图标,搜索到的结果如下图

e)查看上述第c步的表可以看到模版标题为“预警通知”的模版对应的“模版编号”为“OPENTM206852454”,在上述第d步的搜索结果中,对比列表左边第一列,找到“编号” 为“OPENTM206852454”的数据行,再点击该数据行右侧的“详情”,将进入模版添加页面

f)在模版添加页面中,点击“添加”,即可添加模版

g)重复上述第d步至第f步操作,将第c步表中所有模版添加到“我的模版”中,结果列表类似下图

h)编写“key=value”文本,key的值为上述第c步列表中“属性名”列的值,value的值为上述第h步所得结果列表中“模版ID”列的值。例如:上述第c步列表中“属性名”列的值为“weixin.template.systemUpgrade”的模版,其对应的“模版标题”列的值为“服务器维护通知”,在上述第g步所得的结果列表中,找到“标题”列中值为“服务器维护通知”的模版,其对应的“模版ID”的值为“L665eWR-Puzc1F6XpMQcXLAhA6306kthS3IEtWrlzhg”,则这个模版的“key=value”文本应该为:

weixin.template.systemUpgrade=L665eWR-Puzc1F6XpMQcXLAhA6306kthS3IEtWrlzhg

i)按上述第h步操作,依据上述第c步的列表数据,编写出所有的“key=value”文本,类似如下

weixin.template.alertFired=wuUZlHFAaN86F7CZg5wCfv0lgrIsR2BTWMax0dY3CAc
weixin.template.alertRecovered=Em95BKf7lPls8kU5cY_3CCq-DSOv7AyOnS4e-w6-jJY
weixin.template.memberLeave=tds495s4qpDX0eZVdeqHOvByB6yv6SD8ssQ-XToVfGk
weixin.template.memberJoin=AEyRRnLHGp5OwW7GDNSE2s3CGhiWHCrCyPFiE-LSAAQ
weixin.template.healthCheckLaunched=snBO3tu7VCrx3PZlqgfjGIGXdml97_HfQnltRpMrWvg
weixin.template.loginSuccessNotice=Yh1XylI_kRNYe_Y0lWg7N5mSTFojtL0BWEpANRdL1MM
weixin.template.bindNotice=MwCeOr7d5zAuAu_baCKYO57uz4bgs18RsKsWtbymSkc
weixin.template.unbindNotice=aeMiNY5ELnAuf6c4CmL-2UW-qAboisutGFXBE5G476o
weixin.template.earlyWarning=uFhJLHZvUb2O_4-cWO4nDoBEb2wffogeOU21tjIwnOc
weixin.template.remoteLogin=E5_sTdvPBKUaInuqKRtoLyWipBbXa7tSGRfzXnHnS90
weixin.template.teamPayServeRenew=OqC_dfttO_bTAg_ND9w9csWEOkLa7YZR4LVJpQYZ1DM
weixin.template.costNotice=BB9mPX3zkL_BVxU6y1rt5rSeUrynSNbDThbxxg7O6sE
weixin.template.session2FA=Ge8IsucNrIqAO_Si_WefeNe_Hb_nMSALNBV24w7tNto
weixin.template.dangerousInstructionAudit=M5Pv1aaatGdSGvmlJwz3BlUq6Z74h7Y99VYzBu645xw
weixin.template.systemUpgrade=2t_-EEqBxR5JWCcWSNKxQ1BcA8bliQm6Ozb-vij-o5I

j)将上述第i步所得的所有的“key=value”文本,追加到行云管家服务器的 /opt/cloudbility/conf/cloudPortal.properties 文件末端(如果做了双机部署,则仅需在当前行云管家服务运行所在服务器中进行操作)

k)以root用户SSH登录到行云管家服务器,执行以下命令重启行云管家(注意:如果做了双机部署,则需要先冻结SkybilityHA对行云管家相关服务的接管,勾选全局禁用)(如果做了双机部署,则仅需要在当前行云管家运行所在服务器中执行本操作)

/etc/init.d/jetty restart

  执行上述命令后,如果是双机部署,而且执行命令前冻结了SkybilityHA对行云管家相关服务的接管,则需要执行解冻操作,以恢复SkybilityHA对行云管家相关服务的接管。

至此,行云管家与微信公众号服务号的配置就完成了。