
2017年初,我们作为QIWI Terminals的软件开发团队,收集了公司部门的意愿-我们了解了同事希望在我们的帮助下解决哪些全球性任务,从而使生活变得更加轻松。
我对客户服务部的要求感到最满意,该要求部可以处理付款人的电话和索赔:
“有一个问题:客户在终端上付款,但是他仍然无法进行处理-终端可能冻结,或者通过gsm调制解调器工作的Internet掉线了。 事实证明,客户有支票,但系统中没有付款。 在这种情况下,最好学习如何向QIWI付款。
还有一群急切的客户,他们在付款后立即拨打电话中心号码以确保一切正常。 为这样的呼吁而割骨是很棒的。”因此,我们有一个复杂的任务:学习如何在与终端的通信失败的情况下创建付款,以及通过发明一种自助服务工具来检查付款状态来减少来自客户的来电数量。 情况很明显。 他们开始寻找一种对客户方便且无安全隐患的解决方案。
根据传统,客户可以选择-在收据上打印付款人可以告诉操作员的一系列字符,然后他又可以了解这是否是我们的付款,过滤欺诈或手动执行操作。
这个想法的概念很明确,但却无法实现,因此我们走了一步:我们决定将付款数据嵌入QR码,在收据上打印出来,然后在屏幕上复制QIWI终端以确保准确性。 通过使用其设备的相机扫描QR码,客户端可以了解操作状态。 并且在QIWI中未付款的情况下,系统会自动创建它。 因此,客户不仅可以发现钱是否已经到账,而且还可以独立于终端的状态而进行交易。
乍一看,解决方案显而易见:采用付款方式处理现有请求,将其包装在QR码中,编写一个包含交易信息的网页,并在终端,处理程序和Web之间创建微服务代理请求。 假定该项目将使用现有的终端身份验证方法并在处理中使用现有的付款方法。
这个想法马上就出现了,显示了团队的创造潜力。 我们开始涌入并抛出其他选项,除了支付数据外,还可以在QR代码中放置徽标,标语甚至广告:
一个用于几个冲刺的项目,仅此而已。 在那里。
第一次沮丧
我们收取了现有付款,并在上面建立了QR码:
结果,即使是当时的最后一部iPhone7也无法读取它。 在支票上,仅由付款和签名数据组成的QR码几乎不适合A4纸的一半。 付款请求行太长。 这是第一次的悲伤。
有必要解决两个主要问题:
- 减少付款请求中的字符数,即 提出一种解决方案,在该解决方案中,我们可以将现有的xml-request转移到更紧凑的解决方案中;
- 选择一种加密算法和密钥长度,以较小的签名大小提供较高的加密强度和可靠性。
评估QR码的最佳字符数的标准是一项-大多数手机的摄像头都应读取该标准。
在几次工作会议中,找到了一个解决方案:
- 我们决定使用带有付款参数和分隔符的get请求来代替xml请求;
- 在椭圆曲线上建立签名以缩短长度。
使用get-request的好处是,手机或特殊程序的摄像头在看到QR码中的链接后,立即在浏览器中将其打开,从而可以一次付款。 为了减小get请求的大小,我们必须用定界符替换参数名称。
由于采取了一系列行动,付款请求从大约1100个字符减少到200个字符。 另外,我必须应用最低级别的QR码纠错-L。
为了实现,需要开发系统中的组件:
- 创建一个新的API以通过QR码付款;
- 引入了一种在终端和处理之间使用加密密钥的新机制;
- 实现一个微服务,该服务将挂起代理请求,检查接收到的数据的完整性以及阻止可疑请求和收集操作统计信息的功能;
- 开发一个网页来显示付款信息;
- 开发限额系统并检查新的付款渠道。
对现有工作方案:

我们计划添加一个替代方案:

在该项目的过程中,它看起来很小,但需要解决问题,而这实际上要花费很多时间,因此推迟了发布日期。
UX研究或工作来自他们没有等待的地方
我想像人们一样做所有事情,因此他们聘请了UX专家来实施该项目来解决问题:
- 在QIWI终端屏幕的哪个部分放置QR码,以及如何向客户解释其有效性?
- 将QR码放在支票上的位置以及如何提出类似的解释?
- 如何制作带有付款状态的网页布局,以便公司指南中清楚显示?
显然,对于高级客户而言,不需要有关QR码的其他说明,它们只需要指示结果即可。 但是,我们想覆盖QR码是魔术缩写或只是“黑色方块”的那部分客户。 实际上,正是他们打破了呼叫中心线。
为了使其美观和易于理解,我们对我们感兴趣的焦点小组进行了一次采访,结果出乎意料……
简洁类似于储蓄
事实证明这很可怕-我们需要的听众并不总是理解“扫描”一词及其派生词的含义。 因此,必须放弃最初的措词“扫描并找出状态”。 解决方案是通过电子邮件发送QR码照片的技术能力。 而且,还必须简短而清楚地说这句话,因为检查带是终端所有者的消耗材料,而我们对这些人的业务的关注是其经济。 结果,检查现在看起来像这样:
关于QR码在终端屏幕上的显示,它被放置在付款的最后一页上,这是付款方案中的最新页面。 它在打印支票时显示,本质上是已打印QR码的电子副本。
电子邮件无处不在
随着出现了以电子邮件形式处理QR码的新渠道,有必要开发一种具有识别嵌入在信件中的QR码并生成带有付款状态响应的功能的机制。
在微服务中取消了识别QR码的功能。 最初实现时,在提交的照片样本中识别率约为65%。 我们尝试变色并增加对比度,这使成功识别率提高了约20%。
识别QR码照片的任务中的重中之重是为难于识别的案例引入了“自然智能”-应用程序的创建和处理开始以手动方式进行:
技术不是小事
当然,该项目的主要发展涉及微服务本身和终端软件。
QIWI正在积极转向微服务架构,以免影响大型引擎。 微服务使您可以快速更改项目,进行测试和发布发行版。 因此,在几个月后,我们编写了自己的。 我们将所有只能取得的重大新进展挂在上面:
- 通过解析和分析传入的get请求来代理请求,将其转换为xml进行处理,
- 限制来自终端的传入请求的功能,
- QR码识别功能,
- 统计信息收集以供进一步分析。
除了实现使用加密密钥的新机制之外,终端的改进还涉及打印收据的新技术的应用。
形成它们的功能已从插件中程序的主要核心中删除。 现在,我们可以迅速实施对支票的更改,而不会影响整个终端的可操作性。 乍看之下,打印QR码的任务似乎很简单,而且最终只能打印在支票上,但实际上并非如此。
这是因为我们的终端所有者网络拥有大约20种型号的各种打印机,并且我们打印了大约40种类型的收据。 当他们开始实施时,出现了很多细微差别:添加图片后,检查模板中对象的线条和位置开始浮动,然后发现一些命令对位置很敏感,然后换行符变成了一个制表符。
我们开始测试,我们意识到需要做出折衷的事情-必须排除某些打印机型号,因为在测试所有配置时,出现了大量案例。
为了进行测试,我们决定选择6种主要模型,它们覆盖了91%的代理网络。 而且,当然,在战斗环境中进行随机测试时,事实证明,是在覆盖约5%代理商网络的古老打印机上发现了打印收据的问题。 这些型号太旧了,即使在市场上也无法购买到。 我必须与合作伙伴一起搜索。 现在,该项目覆盖了96%的网络。 已经接近理想了:)
没有一张支票
在将有关QR码的信息放置在支票上以及付款的最后一页的同时,提出了另一项任务-使此页面对所有终端项目具有通用外观:
“就QIWI终端机中的付款完成页面而言,一切都非常陈旧:广告,标语和发送电子收据。 这些家伙用五页纸做成了一张,所有付款都通用。” -团队的首席程序员。
现在,此通用页面可用于不同的解释中,而不会违反构建脚本的规则,从而消除了开发团队的工作负担。
这样,十年前的问题就解决了,每次都没有伸手。 有几个长期任务。
“钱在哪里,Zin?” 或底线是什么
该项目是为几个冲刺而设计的,历时六个月,影响了10名员工的资源和外包机构的优势。
结果,已经在85%的终端网络上实施了该项目,我们为自己和客户-客户服务感到惊讶。 在QR码的第三天,同事们认为系统错误已悄悄蔓延到他们-有关呼叫中心的呼叫数量的统计信息,其中包含“我的付款在哪里?”的问题。 已经下降了20%。 客户开始扫描QR码并通过电子邮件发送照片收据,了解状态并自行付款。 如此第二个月。 我必须说,客户开始了解“黑方块”是什么以及它如何有用。
带有QR码的项目广受所有人的欢迎-这是利益的协同作用:一方面,他们简化了客户的生活,另一方面,他们解决了非标准的技术问题。 通过仅扫描QIWI的QR码来检查付款状态并在纸上进行处理是新的东西。 利用众所周知的简单技术来制作有用的项目真是太好了。 总的来说,该项目不仅提高了技能,而且改善了团队内部的沟通。 这几乎是业障方面的主要优点。