利用PHP调用BizMail OpenApi进行接口开发
以下引自《腾讯企业邮箱OpenApi协议v1.4》
腾讯企业邮箱开放协议,包括面向第三方合作应用和面向企业邮用户两类。其中,面向 企业邮用户的开放协议, 将提供给企业邮用户丰富的应用接口, 用户可以根据这些接口定制 自己统一的企业解决方案。 通过协议接口,企业用户可以实现: 1) 单点登录 可以从公司 OA 系统、网站一键进入企业邮箱,免去登录过程。 2) 新邮件提醒 新邮件将即时在 OA 等办公系统提醒你。 3) 数据同步 数据同步可以帮助你同步部门成员信息, 你还可以创建、 删除、 修改帐号, 同步部门信息等。
我一直想用PHP来实现这些功能的调用,把腾讯官方提供的这份简单的文档研究了下,终于弄出来了。做个笔记,如下:
在使用OpenApi接口之前,要先准备好开通腾讯企业邮箱的管理员ID,接口Key(这个可以去企业邮箱管理后台获取)和需要调用信息的邮箱名,然后就可以进行相关调用了,PHP代码如下:
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | // 首先获取AccessToken // 企业邮箱的管理员ID $cTMailID = 'mymailid' ; // 在管理后台获取的接口Key $cTMailSecret = 'a1234567890b1234567890c123456789' ; // 需要调用信息的邮箱名 $cTMailAlias = 'mailalias' ; // 获取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 . '<br>' ; // 获取auth_key $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 '<a href="' . $cURL . '" target="_blank">一键登录</a>' ; // 获取用户信息 $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 '<br>' ; echo 'Email地址:' . $json_obj [ 'Alias' ] . '<br>' ; echo '姓名:' . $json_obj [ 'Name' ] . '<br>' ; echo '性别:' . $json_obj [ 'Gender' ] . '<br>' ; echo '职位:' . $json_obj [ 'Position' ] . '<br>' ; echo '电话:' . $json_obj [ 'Tel' ] . '<br>' ; echo '手机号码:' . $json_obj [ 'Mobile' ] . '<br>' ; echo '员工编号:' . $json_obj [ 'ExtId' ] . '<br>' ; // 获取用户未读邮件数量 $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 ); // 客户端维持长连接 $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 ); // 获取子部门列表 $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 '<br>获取的子部门列表:' ; print_r( $json_obj ); // 获取部门下成员列表 $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 '<br>获取的子部门成员列表:' ; 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来维护长连接的?方法如果成功的话,能否贴出来分享一下?
您好,可以邮件联系.