Skip to main content
Version: v23.11

账号、界面打通方案

重要提示

该功能为 商业版 付费功能,如未升级,请先 升级 后再使用

目标

  • 将第三方账号同步到腾讯问卷
  • 实现第三方系统跳转到腾讯问卷,无缝连接

简介

团队内部系统或平台类产品在使用腾讯问卷时,往往关注账号体系及组织架构如何打通、怎样从其他平台免登录进入腾讯问卷
该文档为您提供深度对接腾讯问卷的解决方案,通过嵌套或者跳转的形式,结合开放接口,使腾讯问卷与您的系统紧密关联。

适用场景

服务平台集成腾讯问卷

场景: 您的平台可能是团队社区、采购系统、营销平台等等,正在服务于多个团队及用户,希望利用腾讯问卷的个性化的数据收集、统计分析能力。
效果: 使用该方案,可以将腾讯问卷作为应用集成到您的平台中,让您的客户开箱即用。

团队内部系统数据打通

场景: 您的内部系统已有一套用户系统,需要使用腾讯问卷进行内部集中投放、限定答题人范围,或是按照团队组织架构进行分权限的问卷管理。
效果: 使用该方案后,问卷的投放者、填答者只需要登录您原有的系统,便可以无缝进入到腾讯问卷。 结合Webhook还可以实现数据及时回推,并携带原有系统的用户标识。

方案示意

方案示意

授权流程

授权流程

使用方法

首次使用

二次使用

代码示例

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);