一、接口功能應用場(chǎng)景
在問(wèn)卷設置》跳轉設置》跳轉到指定頁(yè)面設置跳轉目標的URL,并且開(kāi)啟“POST答卷數據到該地址”的功能。就可以實(shí)現:填寫(xiě)者在提交答卷后,跳轉到這個(gè)指定的URL頁(yè)面,并且系統會(huì )同步將該填寫(xiě)者作答的數據POST到該URL頁(yè)面。
應用場(chǎng)景:在填寫(xiě)者提交答卷后,可以跳轉到用戶(hù)自己的系統頁(yè)面,并且作答信息(通過(guò)接口獲取到的)作為頁(yè)面元素顯示在自己系統頁(yè)面。如:考試問(wèn)卷如果不想使用問(wèn)卷星提供的標準成績(jì)單,可以使用該功能,自己寫(xiě)一個(gè)成績(jì)單頁(yè)面作為跳轉頁(yè)面。
二、頁(yè)面目標地址
使用頁(yè)面目標地址需要注意以下問(wèn)題:
1、該地址需保證外網(wǎng)可訪(fǎng)問(wèn)的狀態(tài);
2、該地址需要承載填寫(xiě)者提交答卷后的跳轉落地頁(yè),所以需保證合適的頁(yè)面內容;
3、數據將以表單的方式POST到該地址,需要增加開(kāi)發(fā)代碼以讀取form表單數據的content內容。
三、POST答卷數據
POST答卷數據會(huì )將每個(gè)填寫(xiě)者作答的數據,在其點(diǎn)擊“提交”時(shí)推送到“頁(yè)面目標地址”。每個(gè)填寫(xiě)者點(diǎn)擊提交,就會(huì )執行一次推送操作;
1、推送機制
1) 用戶(hù)在問(wèn)卷設置界面設置跳轉到指定頁(yè)面,并勾選“POST答卷數據到該地址”;
2) 如果需要獲取問(wèn)卷內容,可同時(shí)勾選“POST問(wèn)卷內容到該地址”。如果未顯示此選項,請聯(lián)系客服顧問(wèn)開(kāi)通權限;
3) POST答卷數據到跳轉的指定頁(yè)面的方式,與數據推送API方式只能二選一,推薦使用POST答卷數據到跳轉的指定頁(yè)面;這種方式的實(shí)時(shí)效性、穩定性更強;
用戶(hù)在提交完答卷后,問(wèn)卷星將直接跳轉到指定的頁(yè)面并將答卷數據放在POST消息體中;
跳轉到用戶(hù)指定頁(yè)面后,用戶(hù)指定頁(yè)面可以同時(shí)讀取到POST的內容;
2、數據加密
考慮到答卷數據傳輸的安全性,推送的答卷數據進(jìn)行了AES加密,加密密鑰可以在設置界面獲取到;
解密方法如下:
1)讀取推送的BASE64數據為byte[] encryptedData;
2)取AES加解密密鑰作為AES解密的KEY
3) 取byte[] encryptedData的前16位做為IV;
4)取第16位后的字節數組做為待解密內容;
5)解密模式使用CBC(密碼塊鏈模式);
6)填充模式使用PKCS #7(填充字符串由一個(gè)字節序列組成,每個(gè)字節填充該字節序列的長(cháng)度);
7)使用配置好的實(shí)例化AES對象執行解密;
8)使用UTF-8的方式,讀取二進(jìn)制數組得到原始數據
示例代碼(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(填充字符串由一個(gè)字節序列組成,每個(gè)字節填充該字節序列的長(cháng)度);
- aes.Padding = PaddingMode.PKCS7;
- aes.Key = key;
- aes.IV = iv;
-
- var cryptoTransform = aes.CreateDecryptor();
- //7)使用配置好的實(shí)例化AES對象執行解密
- byte[] r = cryptoTransform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
- //8)使用UTF-8的方式,讀取二進(jìn)制數組得到原始數據
- return Encoding.UTF8.GetString(r);
- }
3、推送內容及格式
1、推送內容存儲在表單(application/x-www-form-urlencoded)的content字段中;
2、content字段的值為經(jīng)過(guò)aes加密后的base64字符串,解密后的內容包括答卷數據以及問(wèn)卷數據;
3、答卷數據:推送內容及格式與數據推送API相同,參見(jiàn):http://nt-resale.com/help/help.aspx?helpid=407&h=1
4、問(wèn)卷數據:推送內容及格式與問(wèn)卷開(kāi)放API[1000001]接口相同,詳細請咨詢(xún)客服顧問(wèn)獲取文檔;
DEMO
1、demo地址:
http://nt-resale.com/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;
- }
- }
- }