以下引自《腾讯企业邮箱OpenApi协议v1.0》
腾讯企业邮箱开放协议,包括面向第三方合作应用和面向企业邮用户两类。其中,面向 企业邮用户的开放协议, 将提供给企业邮用户丰富的应用接口, 用户可以根据这些接口定制 自己统一的企业解决方案。 通过协议接口,企业用户可以实现: 1) 单点登录 可以从公司 OA 系统、网站一键进入企业邮箱,免去登录过程。 2) 新邮件提醒 新邮件将即时在 OA 等办公系统提醒你。 3) 数据同步 数据同步可以帮助你同步部门成员信息, 你还可以创建、 删除、 修改帐号, 同步部门信息等。
我一直想用PHP来实现这些功能的调用,把腾讯官方提供的这份简单的文档研究了下,终于弄出来了。做个笔记,如下:
在使用OpenApi接口之前,要先准备好开通腾讯企业邮箱的管理员ID,接口Key(这个可以去企业邮箱管理后台获取)和需要调用信息的邮箱名,然后就可以进行相关调用了,PHP代码如下:
// 首先获取AccessToken // 企业邮箱的管理员ID $cTMailID = 'mymailid'; // 在管理后台获取的接口Key $cTMailSecret = 'a1234567890b1234567890c123456789'; // 需要调用信息的邮箱名 $cTMailAlias = 'mailalias'; // 获取Token的地址 $cTMailGetAccessTokenURL = 'https://exmail.qq.com/cgi-bin/token'; $cTMailContentData = 'grant_type=client_credentials&client_id=' . $cTMailID . '&client_secret=' . $cTMailSecret; // 获取access_token // 不要问我为什么这么写,早就忘记了!-_- $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$cTMailGetAccessTokenURL); curl_setopt($ch,CURLOPT_POSTFIELDS,$cTMailContentData); curl_setopt($ch,CURLOPT_ENCODING,'UTF-8'); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1 ); $res = curl_exec($ch); curl_close($ch); $json_obj = json_decode($res,true); $cTMailAccessToken = $json_obj['access_token']; // 打印获取的AccessToken echo $cTMailAccessToken . ' '; // 获取auth_key $cTMailGetAuthKeyURL = 'http://openapi.exmail.qq.com:12211/openapi/mail/authkey'; $cTMailContentData = 'access_token=' . $cTMailAccessToken . '&alias=' . $cTMailAlias; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$cTMailGetAuthKeyURL); curl_setopt($ch,CURLOPT_POSTFIELDS,$cTMailContentData); curl_setopt($ch,CURLOPT_ENCODING,'UTF-8'); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1 ); $res = curl_exec($ch); curl_close($ch); $json_obj = json_decode($res,true); $cTMailAuthKey = $json_obj['auth_key']; // 一键登录 $cURL = 'https://exmail.qq.com/cgi-bin/login?fun=bizopenssologin&method=bizauth&agent=' . $cTMailID . '&user=' . $cTMailAlias . '&ticket=' . $cTMailAuthKey; echo '一键登录'; // 获取用户信息 $cTMailPostURL = 'http://openapi.exmail.qq.com:12211/openapi/user/get'; $cTMailContentData = 'access_token=' . $cTMailAccessToken . '&alias=' . $cTMailAlias; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$cTMailPostURL); curl_setopt($ch,CURLOPT_POSTFIELDS,$cTMailContentData); curl_setopt($ch,CURLOPT_ENCODING,'UTF-8'); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 75); $res = curl_exec($ch); curl_close($ch); $json_obj = json_decode($res,true); print_r($json_obj); echo ' '; echo 'Email地址:' . $json_obj['Alias'] . ' '; echo '姓名:' . $json_obj['Name'] . ' '; echo '性别:' . $json_obj['Gender'] . ' '; echo '职位:' . $json_obj['Position'] . ' '; echo '电话:' . $json_obj['Tel'] . ' '; echo '手机号码:' . $json_obj['Mobile'] . ' '; echo '员工编号:' . $json_obj['ExtId'] . ' '; // 获取用户未读邮件数量 $cTMailPostURL = 'http://openapi.exmail.qq.com:12211/openapi/mail/newcount'; $cTMailContentData = 'access_token=' . $cTMailAccessToken . '&alias=' . $cTMailAlias; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$cTMailPostURL); curl_setopt($ch,CURLOPT_POSTFIELDS,$cTMailContentData); curl_setopt($ch,CURLOPT_ENCODING,'UTF-8'); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 75); $res = curl_exec($ch); curl_close($ch); $json_obj = json_decode($res,true); // 打印获取的信息 print_r($json_obj); // 客户端维持长连接 $cTMailPostURL = 'http://openapi.exmail.qq.com:12211/openapi/listen'; $cTMailContentData = 'access_token=' . $cTMailAccessToken . '&alias=' . $cTMailAlias; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$cTMailPostURL); curl_setopt($ch,CURLOPT_POSTFIELDS,$cTMailContentData); curl_setopt($ch,CURLOPT_ENCODING,'UTF-8'); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 75); $res = curl_exec($ch); curl_close($ch); $json_obj = json_decode($res,true); print_r($json_obj); // 获取子部门列表 $cTMailPostURL = 'http://openapi.exmail.qq.com:12211/openapi/party/list'; $cTMailContentData = 'access_token=' . $cTMailAccessToken . '&partypath='; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$cTMailPostURL); curl_setopt($ch,CURLOPT_POSTFIELDS,$cTMailContentData); curl_setopt($ch,CURLOPT_ENCODING,'UTF-8'); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1 ); $res = curl_exec($ch); curl_close($ch); $json_obj = json_decode($res,true); echo ' 获取的子部门列表:'; print_r($json_obj); // 获取部门下成员列表 $cTMailPostURL = 'http://openapi.exmail.qq.com:12211/openapi/partyuser/list'; $cTMailContentData = 'access_token=' . $cTMailAccessToken . '&partypath=XX公司/财务部'; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$cTMailPostURL); curl_setopt($ch,CURLOPT_POSTFIELDS,$cTMailContentData); curl_setopt($ch,CURLOPT_ENCODING,'UTF-8'); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1 ); $res = curl_exec($ch); curl_close($ch); $json_obj = json_decode($res,true); echo ' 获取的子部门成员列表:'; print_r($json_obj);
原文参考:http://www.barhe.org/archives/561
官方手册:http://cdn.markdream.com/ref/mat/%E8%85%BE%E8%AE%AF%E4%BC%81%E4%B8%9A%E9%82%AE%E7%AE%B1OpenApi%E5%8D%8F%E8%AE%AEv1.0.pdf
《 “利用PHP调用BizMail OpenApi(腾讯企业邮箱)进行接口开发” 》 有 5 条评论
不错哟。
您好 建立长连接之后 怎么获取下发的数据,您有思路吗?谢谢
你指的下发数据是什么?
Array ( [errcode] => 10001 [error] => ip_freq_block )
这是什么鬼。
老是报这个错怎么解决呀
这个具体请参见腾讯企业邮箱的错误返回码信息