APP下载

一种后台程序向企业微信主动发送消息的方法

2018-05-09

视听 2018年4期
关键词:企业应用后台消息

(广西广播电视技术中心)

1 引言

微信是腾讯公司于2011年推出的一个为智能终端提供即时通讯服务的免费应用程序,目前已有超过9亿用户,成为中国社会互联网社交的一种生活方式。腾讯公司利用个人微信的广大用户基数,扩展了订阅号、服务号和企业号,随后企业号发展为企业微信。企业微信提供了通讯录管理、应用管理、消息推送、身份验证、移动端SDK、素材、OA数据接口、企业支付、电子发票等接口(API),开发人员可以使用这些API,为企业接入更多个性化的办公应用。同时,开发人员还可以开发出其他不依赖于微信API的独立运行的后台应用,仅使用微信客户端来呈现前端页面。

由后台程序向微信客户端主动发送消息是常用的一种应用。企业微信开放了消息发送接口,企业可以使用这些接口让自定义应用与企业微信后台或用户间进行双向通信。在此,后台程序可以按需求自动判断发送条件、自主组织消息形式、选择接收用户等。可发送的消息类型主要包括文本、图片、语音、视频、文件、文本卡片、图文消息,多种类型的消息极大的满足了企业应用的需求。

2 主动发送消息的机制

主动发送消息是指,企业后台调用接口通过应用向指定成员发送消息。其时序图如图1所示。

企业应用的后台程序按照微信给定的方式向微信授权API发送已知的corpid和secret,微信API端返回包含了access_token等信息的json串,开发者提取出access_token并用于发消息接口,此时企业应用与微信端才建立起连接并互相取得信任,然后才能开始后台程序与企业微信之间的交互。access_token有时效性,过期后要再次访问授权接口来获取。后台程序自定义的消息主体data也是json串,它和access_token一起被发送至微信API,再由微信API发送至微信后台,最终由微信后台转发至个人微信app。

图1 主动发送消息时序图

在后台程序向企业微信主动发送消息时,主要用到以下信息:

1.corpid:每个企业都拥有唯一的corpid;

2.userid: 每个成员都有唯一的userid,即所谓“帐号”;

3.agentid: 每个应用都有唯一的agentid;

4.secret:secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥,为了保证数据的安全,secret不能泄漏。目前secret有两种:一是通讯录管理secret,二是应用secret,主动发送消息主要用的是应用secret。每个应用有独立的secret,所以每个应用的access_token应该分开来获取;

5.access_token:access_token是企业后台去企业微信的后台获取信息时的重要票据,由corpid和secret产生。所有接口在通信时都需要携带此信息用于验证接口的访问权限。

3 程序设计

依据主动发送消息的机制,程序设计为两个部分:企业应用的后台程序和访问微信API的接口程序。后台程序用于满足企业应用的各种需求,如判断发送条件、组织消息及形式、选择接收用户、返回用户访问信息等。接口程序用于向微信端发送认证、建立连接、发送消息、建立用户访问界面等与微信的各种交互。

本文根据实际工作需求,从处于内网的OA系统,向用户发送工作流消息提醒,即当用户有新的工作流时,在微信app上会接收到企业号推送的文本消息。因此,本文设计的两部分程序分别如下所述。

3.1 后台程序

在此,后台程序主要用于扫描数据库,查找满足发送条件的用户名、消息内容、调用接口程序,并根据返回值判断是否发送成功改写数据表等。因为此程序具有机械重复的特性,采用Python语言编写.exe可执行程序,可大大提高扫描效率和节省内存开支。具体程序如表1所示:

表1 后台程序

#c u r.e x e c u t e("s e l e c t u s e r_i d f r o m w e b m a i l")c o n n = p y m y s q l.c o n n e c t(h o s t='1 2 7.0.0.1',u s e r='r o o t',p a s s w o r d='*****',d b='T D_O A',p o r t=****,c h a r s e t='u t f 8')c u r = c o n n.c u r s o r()p r i n t "b e g i n f l o w"s q l=u"S E L E C T a.t o_i d, a.b o d y_i d, b.f r o m_i d, b.c o n t e n t,a.s m s_i d,c.w x_u i d F R O M s m s a, s m s_b o d y b,w e i x i n_m e m b e r c W H E R E a.t o_i d=c.w x_u n a m e A N D a.r e m i n d_f l a g>=1 A N D b.s m s_t y p e=7 A N D a.b o d y_i d=b.b o d y_i d A N D a.s m s_i d>1 1 2 0 2 9 0 A N D a.w x_f l a g=0 O R D E R B Y b.b o d y_i d D E S C"s q l=s q l.e n c o d e('u t f-8')c u r.e x e c u t e(s q l)r e s u l t = c u r.f e t c h a l l()f o r r o w i n r e s u l t:s q l_u p d a t e=u"u p d a t e s m s s e t w x_f l a g=1 w h e r e s m s_i d=%d" % r o w[4]t e x t = r o w[3].e n c o d e('u t f-8')u s e r = r o w[5].e n c o d e('u t f-8')p a r a m s = {"t o u s e r":u s e r,"a g e n t i d":"6","c o n t e n t":t e x t}r = r e q u e s t s.p o s t('h t t p://1 9 2.1 6 8.***.***/***/T D-r e s p o n s e-***.p h p',p a r a m s)r e s u l t = r.t e x t.e n c o d e('u t f-8')i f 's u c c e s s' i n r e s u l t:p r i n t s q l_u p d a t e c u r.e x e c u t e(s q l_u p d a t e)c o n n.c o m m i t()p r i n t "e n d f l o w"c u r.c l o s e()c o n n.c l o s e()t i m e.s l e e p(4)

此程序间隔4秒扫描一次数据库,查找该接收微信消息的用户和消息主体,组织成json串形式的参数,调用接口程序并传参;若返回值中含有success,则改写数据表。一次发送完成。

3.2 接口程序

企业微信提供了许多接口地址,但是仍需要开发人员编写接口程序。本文的接口程序采用php语言编写如表2,使用了跨域访问函数curl()。

表2 接口程序

$opt[CURLOPT_SSL_VERIFYPEER]= FALSE;}curl_setopt_array($ch,$opt);$data = curl_exec($ch);curl_close($ch);return $data;}$corpid="wx***********7b6";$corpsecret="5Gw********_*************V1I";$Url="https://qyapi.weixin.qq.com/cgi-bin/ge ttoken?corpid=$corpid&corpsecret=$corpsecret";$res = curlPost($Url);$ACCESS_TOKEN=json_decode($res)->access_token;$Url="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$ACCESS_TOKEN";$touser=$_POST['touser'];$msgtype="text";$agentid=**********;$content=$_POST['content'];$safe=0;$arr=array('touser'=>$touser,'msgtype'=>$msgtype,'agentid'=>$agentid,'text'=>array('content'=>$content),'safe'=>0);$data=json_encode($arr);$res = curlPost($Url,$data);$errmsg=json_decode($res)->errmsg;if($errmsg==="ok"){echo "success";}else{echo "error".$errmsg;}?>

该程序首先发送corpid和corpsecret到指定地址以获取access_token;接收后台程序发送来的参数,组合其他信息形成data的json串,再将access_token和data发送至指定地址,由微信端向个人用户发送消息;最后微信端会向接口程序返回相关信息。

4 网络环境和程序部署

因业务的特殊性,OA系统部署在内网web服务器上,向外网微信端发送消息要经过重重关卡。大致的网络结构图如图2所示。

根据网络结构,本文设计把后台程序部署在内网OA服务器上,把接口程序部署在DMZ区的前置服务器上。当后台程序发送微信消息时,首先调用前置服务器上的接口程序,由接口程序向微信端发送交互请求和消息主体。用户访问企业应用时,首先访问的是前置服务器上的页面,再由页面程序与后台程序进行交互。采用此种程序部署方式,只暴露了接口程序和访问页面,大大的提高了后台程序和后台服务器的安全性。

5 总结和展望

目前该程序已经部署并正常使用,发送消息准确、及时。现在程序只使用了文本消息,后续还可开发更多形式的消息推送,或利用企业微信提供的接口还可开发功能更多更复杂的后台程序,如考勤、办公、文件共享等。微信用户以后仍会增多,微信程序会更加普及,企业微信的开发和利用,使得职工在不增加手机app、不增加内存消耗的情况下,就能便利的享受企业文化、接收企业信息和接受企业的管理。

[1]腾讯控股有限公司.企业微信API文档.https://work.weixin.qq.com/api/doc

图2 网络结构图

猜你喜欢

企业应用后台消息
一张图看5G消息
Wu Fenghua:Yueju Opera Artist
后台暗恋
论财务软件在企业中存在的问题及对策
浅析管理会计在企业应用中的问题及对策
管理会计助推企业发展的思考与应用
后台朋友
微信营销在企业应用中的问题及对策研究
消息
消息