账号、界面打通方案
#
简介企业内部系统或平台类产品在使用腾讯问卷时,往往关注账号体系及组织架构如何打通、怎样从其他平台免登录进入腾讯问卷。
该文档为您提供深度对接腾讯问卷的解决方案,通过嵌套或者跳转的形式,结合开放接口,使腾讯问卷与您的系统紧密关联。
#
目标- 将第三方账号同步到腾讯问卷
- 实现第三方系统跳转到腾讯问卷,无缝连接
#
方案示意#
场景一:企业内部系统集成腾讯问卷(尊享版接入)#
效果企业内部系统可以是社区、HR门户、IM工具等,已有一套用户体系和组织架构,可以实现:
- 组织架构和账号打通,登录企业内部账号后,无需再次使用QQ/微信等账号登录,即可直接使用腾讯问卷
- 企业内多人协同管理问卷的编辑、发放和数据统计,或是按照组织架构进行分级管理问卷资产
- 进行内部调查问卷的集中投放、限定填答人范围、或者内部360互评
- 企业成员离职后无法再用企业账号登录腾讯问卷,保障数据安全
#
接入流程- [必须] 获取接口使用凭证(单个团队级别),请先在腾讯问卷中将您的团队升级至 尊享版 ,并在团队管理-团队信息中查看 AppID 和 Secret
- [必须] 使用 AppID 和 Secret 获取 access_token 接口授权
- [必须] 使用 access_token 为企业成员注册一个腾讯问卷账号
- [必须] 使用 access_token 获取团队信息
- [必须] 使用 access_token 将当前账号加入团队
- [必须] 使用 access_token 为当前账号获取一次性登录码
- [必须] 使用一次性登录码跳转或者嵌套,进入腾讯问卷工作台或问卷填答页 统一入口
- [可选] 如果忘记了问卷侧 user_id,请通过 获取第三方用户信息 接口查询
- [可选] 完整同步团队的组织架构 同步组织架构
#
场景二:服务平台集成腾讯问卷(服务商合作)#
效果服务平台可以是 ToC 的社区、效率工具,也可以是 ToB 的营销平台、采购系统等,对不同的组织或个人提供服务,可以实现:
- 将腾讯问卷作为一个工具嵌入到您的平台中
- 用户登录您的平台后,无需再次使用QQ/微信等账号登录,即可直接使用腾讯问卷
- 结合Webhook可以实现数据及时回推到第三方平台,并携带原有系统的用户标识,实现功能联动和数据闭环
- 如果您的平台服务于多个企业,也可以实现服务商代开发的方式,为企业提供腾讯问卷的集成服务
#
接入流程- [必须] 获取接口使用凭证(平台级别),请联系客服沟通您的平台需求,达成合作意向后,我们将为您提供专属的 AppID 和 Secret
- [必须] 使用 AppID 和 Secret 获取 access_token 接口授权
- [必须] 使用 access_token 为平台用户注册一个腾讯问卷账号
- [必须] 使用 access_token 为当前账号创建一个团队空间
- [必须] 使用 access_token 为当前账号获取一次性登录码
- [必须] 使用一次性登录码跳转或者嵌套,进入腾讯问卷工作台或问卷填答页 统一入口
- [可选] 如果忘记了问卷侧 user_id,请通过 获取第三方用户信息 接口查询
#
授权流程#
代码示例index.html
<!DOCTYPE html><html lang="zh"><head> <meta charset="utf-8"> <title>嵌入demo</title></head><body><h1>下方 iframe 嵌入了带登录态的问卷编辑页</h1><div><iframe src="./redirect.php" allowfullscreen="allowfullscreen" sandbox="allow-same-origin allow-scripts" width="2000" height="1000"></iframe></div></body></html>
redirect.php
<?php
class redirection{ private $_appid; private $_access_token;
public function __construct($appid, $access_token) { $this->_appid = $appid; $this->_access_token = $access_token; }
/** * 请求腾讯问卷开放接口 * @param $method * @param $url * @param $data * @return mixed */ private function openapi_request($method, $url, $data) { $params = [ "appid" => $this->_appid, "access_token" => $this->_access_token, ];
if ($method == "GET" && !empty($data)) { $params = array_merge($params, $data); $data = null; }
// 拼装请求参数 $params_string = urldecode(http_build_query($params)); $api = "https://" . $url . "?" . $params_string; $headers = ['Content-Type:application/json', 'Accept:application/json'];
try { // 发起请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $api); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if ($method == "POST") { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); } $output = curl_exec($ch); curl_close($ch); } catch (Exception $e) { return false; }
// 结果处理 $result = json_decode($output, true); if ($result['code'] != "OK") { die($result['error']['type']); } return $result["data"]; }
/** * @param $openid string 第三方唯一用户标识 * @return int 问卷侧 user_id */ /** * @param $openid * @param $nickname * @param $avatar * @return mixed */ function create_user($openid, $nickname, $avatar) { $method = "POST"; $url = "open.wj.qq.com/api/sso/users"; $data = [ 'openid' => $openid, 'nickname' => $nickname, 'avatar' => $avatar, ];
$response = $this->openapi_request($method, $url, $data); return $response['user_id']; }
/** * @param $user_id * @return mixed */ function get_login_code($user_id) { $method = "POST"; $url = "open.wj.qq.com/api/sso/code"; $data = [ 'user_id' => $user_id, ];
$response = $this->openapi_request($method, $url, $data); return $response['code']; }}
// 1. 申请 appid 及 secret// 2. 使用 appid 及 secret 换取 access_token,填充至此处$appid = "";$access_token = "";
$openid = ""; // 填写接入方唯一用户标识$nickname = ""; // 填写接入用户昵称$avatar = ""; // 填写接入用户头像
$ins = new redirection($appid, $access_token);// 3. 请求腾讯问卷开放接口创建用户$user_id = $ins->create_user($openid, $nickname, $avatar);// 4. 请求腾讯问卷开放接口获取一次性登录码$code = $ins->get_login_code($user_id);
// 5. 带着 appid + code 跳转到腾讯问卷页面$action = trim($_GET['action']);switch ($action) { case 'survey_create': // 重定向到腾讯问卷创建页面 $url = "https://wj.qq.com/api/v2/redirect?appid={$appid}&code={$code}&action={$action}"; break; case 'survey_collect': // 重定向到腾讯问卷填答页面 $survey_id = 0; // 从问卷投放链接获得 $survey_hash = "abcd"; $url = "https://wj.qq.com/api/v2/redirect?appid={$appid}&code={$code}&action={$action}&survey_id={$survey_id}&survey_hash={$survey_hash}"; break; default: echo "unknown action"; exit();}header('Location: ' . $url);