Hey,吃完饭多陪陪家人吧!

服务器推送消息通知到企业微信 自建应用(PHP版)

   

继上一个推送钉钉的通知,在日常使用中遇到一个问题:登录了电脑钉钉,然后手机钉钉开启接收通知,有新消息来的时候,电脑钉钉阅读了消息,但是手机的钉钉消息通知仍然保持显示,不会自动标记为已读,感觉不太方便。

今天有空又研究了下企业微信的,发现个人也可以注册组织或企业(注册后不认证),就弄了一个测试。

1、注册企业微信。

我选择的类型是“其他”,应该选“企业”也可以的。一定不要选最下面的“个人组建团队”,因为我测试了这个是没有管理后台的!!!

2、创建自建应用并配置

进入企业微信网页版(https://work.weixin.qq.com/)的管理后台,点击“应用管理”菜单,然后再点下面的“创建应用”,根据提示填写内容即可。

保存一下AgentId;

点击查看Secret,会发送到企业微信app,保存下来后面用到;

设置一下可见范围,添加自己的账号

然后拉到下面

“网页授权及JS-SDK”,验证一下自己的域名(需要下载企业微信的验证文件,放到网站的根目录)

“企业可信IP”,添加本地调试的外网IP和服务器IP地址

3、开启通讯录接口同步

点击“管理工具”->“通讯录同步”

初始的界面应该是有一个“开启接口同步”的按钮的,开启后配置一下“企业可信IP”,并保存Secret(因为只有这个应用有获取通讯录的接口权限,所以后面获取用户ID的时候需要用到这个密钥)

4、记录企业ID

点击“我的企业”,在最下方,也要保存起来

根据上面2、3、4步骤,保存了自建应用的AgentId、自建应用的secret、通讯录同步的secret、企业ID。

5、开启微信接收企业微信的消息

在“我的企业”->“微信插件”里面,用微信扫“邀请关注”的二维码,然后按提示同意

再勾选设置里面的这两个选项(如下图所示)

6、接口调试

一共使用到3个接口:

  1. 获取access_token:https://developer.work.weixin.qq.com/document/path/91039
  2. 获取成员ID列表:https://developer.work.weixin.qq.com/document/path/96067
  3. 发送应用消息:https://developer.work.weixin.qq.com/document/path/90236

调试也很方便,也有在线调试工具:https://developer.work.weixin.qq.com/resource/devtool

发现企业微信的接口用起来更方便,直接GET、POST,不需要SDK就可以跑起来了。

首先要获取通讯录同步的token,用“获取access_token”获取就可以了,corpid传企业ID、corpsecret传“通讯录同步”的secret

然后调用“获取成员ID列表”接口,返回只有一个ID,就是这个了

再用获取自建应用的token,用“获取access_token”获取就可以了,corpid传企业ID、corpsecret传自建应用的secret

最后就可以调用“发送应用消息”接口就可以推送消息了

微信接收的效果:

7、PHP代码部分

 

  1. <?php
  2. header('Content-Type:application/json; charset=utf-8');
  3. //显示报错信息
  4. //ini_set("display_errors", "On");
  5. //显示所有
  6. //error_reporting(E_ALL);
  7. date_default_timezone_set('Asia/Shanghai');
  8. try {
  9.     //curl封装get、psot请求
  10.     function curl_request($url$data = null, $method = "GET") {
  11.         if (is_array($data)) {
  12.             $data = http_build_query($data);
  13.         }
  14.         $ch = curl_init();
  15.         curl_setopt($ch, CURLOPT_URL, $url);
  16.         curl_setopt($ch, CURLOPT_HEADER, false);
  17.         //不返回头部信息
  18.         if (strtolower($method) != 'get') {
  19.             curl_setopt($ch, CURLOPT_POST, 1);
  20.         }
  21.         if ($data != null) {
  22.             curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  23.         }
  24.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  25.         //结果是否显示出来,1不显示,0显示
  26.         //判断是否https
  27.         if (strpos($url, 'https://') !== false) {
  28.             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  29.             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  30.             $UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
  31.             curl_setopt($ch, CURLOPT_USERAGENT, $UserAgent);
  32.         }
  33.         $data = curl_exec($ch);
  34.         curl_close($ch);
  35.         if ($data === FALSE) {
  36.             $data = "curl Error:" . curl_error($ch);
  37.         }
  38.         return $data;
  39.     }
  40.     //unicode解码
  41.     function decodeUnicode($str) {
  42.         return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', create_function('$matches', 'return mb_convert_encoding(pack("H*"$matches[1]), "UTF-8""UCS-2BE");'), $str);
  43.     }
  44.     //密钥
  45.     $key = $_REQUEST['key'];
  46.     //标题
  47.     $title = $_REQUEST['title'];
  48.     //内容
  49.     $desc = $_REQUEST['desc'];
  50.     $rst = array("code" => 1, "msg" => """success" => "N""data" => "");
  51.     if ($key != null && $key == "【你设置接口的密钥】") {
  52.         if ($desc != null && $desc != "") {
  53.             $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=【你的企业ID】&corpsecret=【你的自建应用Secret】";
  54.             $resp =  curl_request($url, null, "GET");
  55.             $resp_json = json_decode($resp);
  56.             $errcode = $resp_json->errcode;
  57.             $errmsg = $resp_json->errmsg;
  58.             if ($errmsg == "ok") {
  59.                 $access_token = $resp_json->access_token;
  60.                 $time_str = date("Y-m-d H:i:s", time());
  61.                 if ($title == null || $title == "") {
  62.                     $title = "新消息";
  63.                 }
  64.                 $title = "  =====" . $title . "=====\n \n ";
  65.                 $desc = $title . $desc . "\n \n " . $time_str;
  66.                 $desc = str_replace("\\n""  \n"$desc);
  67.                 $data_arr = ["touser" => "【接收消息的企业微信用户ID】""msgtype" => "text""agentid" => 【你的自建应用ID】, "safe" => 0, "text" => ["content" => $desc]];
  68.                 $data = json_encode($data_arr);
  69.                 $url_send = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" . $access_token;
  70.                 $resp_send= curl_request($url_send$data"POST");
  71.         $resp_send_json = json_decode($resp_send);
  72.                 $errcode_send = $resp_send_json->errcode;
  73.                 $errmsg_send = $resp_send_json->errmsg;
  74.                 if ($errmsg_send == "ok") {
  75.                     $rst = array("code" => 0, "msg" => "发送成功!""success" => "Y""data" => $errmsg_send);
  76.                 } else {
  77.                     $rst = array("code" => 1, "msg" => "推送消息出错!""success" => "N""data" => $errmsg_send);
  78.                 }
  79.             } else {
  80.                 $rst = array("code" => 1, "msg" => "获取钉钉token出错!""success" => "N""data" => $errmsg);
  81.             }
  82.         } else {
  83.             $rst = array("code" => 1, "msg" => "参数:内容(desc)不能为空!""success" => "N""data" => "");
  84.         }
  85.     } else {
  86.         if ($key == null || $key == "") {
  87.             $rst = array("code" => 1, "msg" => "实例:http://push.risingsun.cc/wework?key=密钥&title=标题&desc=内容;PS:标题可为空;换行符\\n(调用时删除一个反斜杠);链接<a href='http://baidu.com'>百度</a>""success" => "N""data" => "");
  88.         } else {
  89.             $rst = array("code" => 1, "msg" => "参数:密钥(key)有误!""success" => "N""data" => "");
  90.         }
  91.     }
  92.     exit(decodeUnicode(json_encode($rst,JSON_UNESCAPED_SLASHES)));
  93. }
  94. catch(Exception $e) {
  95.     $rst = array("code" => 1, "msg" => $e->getMessage(), "success" => "N""data" => "异常");
  96.     echo decodeUnicode(json_encode($rst));
  97. }

 

未经允许不得转载:Rising Sun's Blog » 后端 » 服务器推送消息通知到企业微信 自建应用(PHP版)
标签:
评论 0
 
 
发表评论