核销码功能已经取代了之前的完成凭证的功能,两者有相似之处,也有不同的地方。相似之处在于:都会在填写者提交之后呈现一串唯一标识码。不同之处在于:完成凭证仅仅是呈现,而核销码除呈现外,可以进行核销。
核销码是问卷发布者给问卷填写者发放的一个唯一凭证,问卷填写者在填完问卷之后,可以拿到这个核销码,并且随后可以凭此核销码兑换积分、实物礼品等。接下来,按照标准核销码的使用流程来讲解核销码的设置和使用。
点击问卷设置-核销码设置,如下图所示:
(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位字段;
加解密测试:https://www.wjx.cn/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;
}