利用PHP调用BizMail OpenApi进行接口开发
以下引自《腾讯企业邮箱OpenApi协议v1.4》
腾讯企业邮箱开放协议,包括面向第三方合作应用和面向企业邮用户两类。其中,面向 企业邮用户的开放协议, 将提供给企业邮用户丰富的应用接口, 用户可以根据这些接口定制 自己统一的企业解决方案。 通过协议接口,企业用户可以实现: 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);
以下是完整的调用地址:
OAuth 验证授权 https://exmail.qq.com/cgi-bin/token 获取 Authkey http://openapi.exmail.qq.com:12211/openapi/mail/authkey 一键登录 https://exmail.qq.com/cgi-bin/login?fun=bizopenssologin&method=bizauth&agent=[agent]&user=[email]&ticket=[ticket] 客户端维持长连接 http://openapi.exmail.qq.com:12211/openapi/listen 获取成员资料 http://openapi.exmail.qq.com:12211/openapi/user/get 同步成员帐号资料 http://openapi.exmail.qq.com:12211/openapi/user/sync 获取某个版本号后的用户更新列表 http://openapi.exmail.qq.com:12211/openapi/user/list 获取未读邮件数 http://openapi.exmail.qq.com:12211/openapi/mail/newcount 同步部门 http://openapi.exmail.qq.com:12211/openapi/user/list 获取子部门列表 http://openapi.exmail.qq.com:12211/openapi/party/list 获取部门下成员列表 http://openapi.exmail.qq.com:12211/openapi/partyuser/list 检查邮件帐号是否可用 http://openapi.exmail.qq.com:12211/openapi/user/check 添加邮件群组 http://openapi.exmail.qq.com:12211/openapi/group/add 删除邮件群组 http://openapi.exmail.qq.com:12211/openapi/group/delete 添加邮件群组成员 http://openapi.exmail.qq.com:12211/openapi/group/addmember 删除邮件群组成员 http://openapi.exmail.qq.com:12211/openapi/group/deletemember
您好 建立长连接之后 怎么获取下发的数据,您有思路吗?谢谢,期待您的回复
您所指的“发下的数据”主要是指哪些数据?
这个就是手册上面说的,当客户端长连接的时候,如果有新的邮件过来,那么就会给这个连接返回新邮件的json数据, 但是我一直没有办法维护这个长连接 获取到 新邮件的提醒
3.2.2 下发数据
如果当前客户端长连接在线,当服务端检查到数据变更时,将会下发数据:版本号更新;新
邮件提醒;实时更新未读邮件数。
(1)版本号更新
1、 下发字段:参数名称 类型 描述
Ver string 服务器最新版本号
2、下发示例:
{
“Ver”: “1364460338051”, }
(2)新邮件提醒
1、下发字段:
参数名称 描述
UserName 帐号名
MailId 邮件 Id
Sender 发件人
Receiver 收件人
Subject 标题
Summary 摘要
NewCount 新邮件数
2、 下发示例:
{
“UserName”: “bob@gzdev.com”,
“MailId”: “ZC4028-FPiX_oOG5HUh4XorwyhAY33”,
“Sender”: “\”Test\” “,
“Receiver”: “bob@gzdev.com”,
“Subject”: “TestMail”,
“Summary”: “TestMail Content “,
“NewCount”: 549
}
(3)实时更新未读邮件数
1、 下发字段:
参数名称 描述
UserName 帐号
NewCount 未读邮件数
2、 下发示例:
{
” UserName”: “bob@gzdev.com”, ” NewCount “: 550,
}
您好,我已经维护好了长连接了.
不过个人感觉,用curl维护长连接是不行的,如果有人成功了,麻烦和我讨论下.
主要还是要用socket 去维护长连接.这样才会获取到下发的内容.比如新邮件提醒,未读邮件等
这文章写的时间太久,已经差不多忘光了。
你是用Socket来维护长连接的?方法如果成功的话,能否贴出来分享一下?
您好,可以邮件联系.