一、接口功能应用场景
在问卷设置》跳转设置》跳转到指定页面设置跳转目标的URL,并且开启“POST答卷数据到该地址”的功能。就可以实现:填写者在提交答卷后,跳转到这个指定的URL页面,并且系统会同步将该填写者作答的数据POST到该URL页面。
应用场景:在填写者提交答卷后,可以跳转到用户自己的系统页面,并且作答信息(通过接口获取到的)作为页面元素显示在自己系统页面。如:考试问卷如果不想使用问卷星提供的标准成绩单,可以使用该功能,自己写一个成绩单页面作为跳转页面。
二、页面目标地址
使用页面目标地址需要注意以下问题:
1、该地址需保证外网可访问的状态;
2、该地址需要承载填写者提交答卷后的跳转落地页,所以需保证合适的页面内容;
3、数据将以表单的方式POST到该地址,需要增加开发代码以读取form表单数据的content内容。
三、POST答卷数据
POST答卷数据会将每个填写者作答的数据,在其点击“提交”时推送到“页面目标地址”。每个填写者点击提交,就会执行一次推送操作;
1、推送机制
1) 用户在问卷设置界面设置跳转到指定页面,并勾选“POST答卷数据到该地址”;
2) 如果需要获取问卷内容,可同时勾选“POST问卷内容到该地址”。如果未显示此选项,请联系客服顾问开通权限;
3) POST答卷数据到跳转的指定页面的方式,与数据推送API方式只能二选一,推荐使用POST答卷数据到跳转的指定页面;这种方式的实时效性、稳定性更强;
用户在提交完答卷后,问卷星将直接跳转到指定的页面并将答卷数据放在POST消息体中;
跳转到用户指定页面后,用户指定页面可以同时读取到POST的内容;
2、数据加密
考虑到答卷数据传输的安全性,推送的答卷数据进行了AES加密,加密密钥可以在设置界面获取到;
解密方法如下:
1)读取推送的BASE64数据为byte[] encryptedData;
2)取AES加解密密钥作为AES解密的KEY
3) 取byte[] encryptedData的前16位做为IV;
4)取第16位后的字节数组做为待解密内容;
5)解密模式使用CBC(密码块链模式);
6)填充模式使用PKCS #7(填充字符串由一个字节序列组成,每个字节填充该字节序列的长度);
7)使用配置好的实例化AES对象执行解密;
8)使用UTF-8的方式,读取二进制数组得到原始数据
示例代码(C#)
- //1)读取推送的BASE64数据为byte[] encryptedData;
- byte[] encryptedData = Convert.FromBase64String(encrypted);
- if (encryptedData == null || encryptedData.Length < 17)
- return null;
- //2)取AES加解密密钥作为AES解密的KEY;
- byte[] key = Encoding.UTF8.GetBytes(aesKey);
- //3) 取byte[] encryptedData的前16位做为IV;
- byte[] iv = encryptedData.Take(16).ToArray();
- //4)取第16位后的字节数组做为待解密内容;
- encryptedData = encryptedData.Skip(16).ToArray();
- using (var aes = new RijndaelManaged())
- {
- //5)解密模式使用CBC(密码块链模式);
- aes.Mode = CipherMode.CBC;
- //6)填充模式使用PKCS #7(填充字符串由一个字节序列组成,每个字节填充该字节序列的长度);
- aes.Padding = PaddingMode.PKCS7;
- aes.Key = key;
- aes.IV = iv;
-
- var cryptoTransform = aes.CreateDecryptor();
- //7)使用配置好的实例化AES对象执行解密
- byte[] r = cryptoTransform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
- //8)使用UTF-8的方式,读取二进制数组得到原始数据
- return Encoding.UTF8.GetString(r);
- }
3、推送内容及格式
1、推送内容存储在表单(application/x-www-form-urlencoded)的content字段中;
2、content字段的值为经过aes加密后的base64字符串,解密后的内容包括答卷数据以及问卷数据;
3、答卷数据:推送内容及格式与数据推送API相同,参见:https://www.wjx.cn/help/help.aspx?helpid=407&h=1
4、问卷数据:推送内容及格式与问卷开放API[1000001]接口相同,详细请咨询客服顾问获取文档;
DEMO
1、demo地址:
https://www.wjx.cn/demo/activityredirect.aspx?aes=822861f9c5114dc2bda214cd9567d0dc注:红色部分为AES解密密钥
2、示例代码(C#):
- public partial class demo_activityredirect : System.Web.UI.Page
- {
- string aeskey = "";
- string content = string.Empty;
- protected void Page_Load(object sender, EventArgs e)
- {
- content = Request.Form["content"];
- aeskey = Request.QueryString["aes"];
- Response.Write("推送的加密内容[content]:" + Receive());
- Response.End();
- }
- //接收推送消息
- protected string Receive()
- {
- try
- {
- if (!string.IsNullOrEmpty(content) && !string.IsNullOrEmpty(aeskey))
- {
- content = Wjx.Common.Encrypt.Aes.Decrypt(content, aeskey);
- return content;
- }
- return "读取内容为空";
- }
- catch (Exception e)
- {
- return "出错啦!\r\n" + e.Message;
- }
- }
- }