核銷碼功能已經取代了之前的完成憑證的功能,兩者有相似之處,也有不同的地方。相似之處在于:都會在填寫者提交之后呈現一串唯一標識碼。不同之處在于:完成憑證僅僅是呈現,而核銷碼除呈現外,可以進行核銷。
核銷碼是問卷發布者給問卷填寫者發放的一個唯一憑證,問卷填寫者在填完問卷之后,可以拿到這個核銷碼,并且隨后可以憑此核銷碼兌換積分、實物禮品等。接下來,按照標準核銷碼的使用流程來講解核銷碼的設置和使用。
點擊問卷設置-核銷碼設置,如下圖所示:
(1)核銷碼是一串字母或數字組成的字符串,最長支持40個字符。如果還沒有這樣的字符串,可以讓系統自動生成一些,用來測試。
(2)也可以“使用問卷中題目作為核銷碼”,即生成的核銷碼的數字串是填寫者在問卷中某個題目自己填寫的內容,例如工號,學號,身份證號等題目。同時核銷碼要求必須是唯一性字段,因此在題目中要勾選“不允許重復”。
設置完成后,或活動進行中,還可以追加核銷碼。(注意:如果連續3個月無答卷新增并且無核銷動作,核銷狀態將不再保存。)
核銷碼設置頁面提供了核銷碼使用方面的一些設置,簡述如下,具體使用的使用場景,還會在隨后流程中提到。
核銷碼使用完:當您設置的核銷碼已經發放完畢后,您可以設置該問卷是可以繼續作答問卷還是無法作答問卷。
核銷碼顯示:默認作答提交后,顯示核銷碼的同時會顯示該核銷碼的二維碼,核銷員可以掃描該二維碼進行核銷,可以根據自己需求選擇是否顯示。
核銷碼使用提示:問卷發布者可以在這里輸入文案,這個文案會和核銷碼一起呈現給問卷填寫者。這個文案可以告訴填寫者,何時何地如何使用這個核銷碼。
微信核銷員:問卷發布者可以增加多個微信核銷員,幫助自己一起進行核銷碼的核銷工作。添加的方式是,點擊“添加核銷員”的按鈕,獲取到邀請鏈接,通過微信發送給潛在的核銷員。潛在核銷員點擊鏈接,進行微信授權,即可綁定成為核銷員。邀請鏈接有安全加密,有效期為7天,7天后自動失效。如需新增核銷員,需重新獲取邀請地址。
核銷地址:核銷員微信掃碼即可進入核銷后臺的地址,建議所有核銷員保存核銷后臺地址。問卷星的核銷系統提供如下兩種核銷方式,核銷員可以根據填寫者提供的核銷碼的方式不同進行選擇,推薦使用掃碼核銷,方便快捷。
1\核銷員使用微信掃一掃,直接掃碼核銷。
2\核銷員使用微信打開核銷后臺(在頁面上點擊獲?。?,輸入核銷碼進行核銷。
發放概率:問卷發布者可以設置核銷碼的出現概率,默認為100%出現。
設置完成,發送問卷。問卷填寫者在填寫提交問卷之后,就可以看到分配給自己的核銷碼,包括:核銷碼、核銷碼對應的二維碼、以及核銷碼的使用提示。在這里,推薦問卷發布者在使用提示中,讓填寫者截屏保留核銷碼。
填寫者憑截圖的核銷碼,按問卷發布者指定的時間地點進行核銷。核銷員用微信掃描填寫者提供的核銷碼,瀏覽填寫者之前填寫的答卷,確認沒有問題,點擊核銷。并同時進行其他積分的增加或者禮品的發放。流程完成。
問卷發布者可以在后臺,查看到每個核銷碼的使用情況。核銷碼的狀態分為:未發放、已發放未核銷、已核銷。
未發放:是指核銷碼還沒有分配給任何一個問卷填寫者
已發放未核銷:是指該核銷碼已經發放出去,但是填寫者還未前來進行核銷操作
已核銷:是指該核銷碼已被核銷員核銷。
有效期默認為永久有效,發布者可以選擇設置有效期。
該有效期是從核銷碼發放開始計算的,也就是說每個填寫者作答提交時間不同,其獲得的核銷碼有效截至時間也不同。
核銷碼超過有效期后,核銷員掃碼不能進行核銷。
發布者修改了有效期的時間后,所有核銷碼的有效期會重新計算。
對于針對尊享版且已經生成了SSOKey用戶,聯系專屬客服顧問添加主賬戶白名單列表后,可支持核銷碼自行解密;
1、核銷碼加密使用UTF8字符編碼;
2、核銷碼加密結果為DES加密后的Base64字符串;
3、核銷碼使用DES加密,加密密鑰的KEY、IV均從SSOKey中截取,具體如下:
KEY:AppKey第1-8位字符;
IV:AppKey第9-16位字段;
加解密測試:http://www.njsvitsolutions.com/signsample.aspx?type=16
代碼示例:
private static string DESDecrypt(string decryptString, string appKey)
{
string returnValue = string.Empty;
try
{
var encoding = Encoding.UTF8;
var decryptKey = appKey.Substring(0, 8);
var decryptIV = appKey.Substring(8, 8);
byte[] byteDecrypt = Convert.FromBase64String(decryptString);
byte[] byteKey = encoding.GetBytes(decryptKey);
byte[] byteIV = encoding.GetBytes(decryptIV);
using (DESCryptoServiceProvider dES = new DESCryptoServiceProvider())
{
using (MemoryStream memoryStream = new MemoryStream())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, dES.CreateDecryptor(byteKey, byteIV), CryptoStreamMode.Write))
{
cryptoStream.Write(byteDecrypt, 0, byteDecrypt.Length);
cryptoStream.FlushFinalBlock();
returnValue = Encoding.Default.GetString(memoryStream.ToArray());
}
}
}
}
catch { }
return returnValue;
}