
No início de 2017, nós, a equipe de desenvolvimento de software da QIWI Terminals, reunimos os desejos dos departamentos da empresa - aprendemos quais tarefas globais nossos colegas gostariam de resolver com a nossa ajuda, para facilitar a vida.
Fiquei muito satisfeito com a solicitação do serviço ao cliente que trabalha com chamadas e reclamações de pagadores:
“Existe um problema: o cliente faz um pagamento no terminal, mas ainda não chega ao processamento - o terminal pode congelar ou a Internet que trabalha através do modem GSM cai. E acontece que o cliente tem um cheque, mas não há pagamento no sistema. Seria bom nesses casos aprender como entregar pagamentos ao QIWI.
Há também um grupo de clientes ansiosos que, imediatamente após efetuar um pagamento, discam para um número de central de atendimento para garantir que tudo esteja bem com ele. Seria ótimo cortar os ossos para tais chamadas. ”Por isso, tivemos uma tarefa complexa: aprender a criar um pagamento no caso de uma falha de comunicação com o terminal e reduzir o número de chamadas recebidas dos clientes, inventando uma ferramenta de autoatendimento para verificar o status do pagamento. O caso é claro. Eles começaram a procurar uma solução conveniente para o cliente e sem riscos à segurança.
O cliente, de acordo com a tradição, ofereceu sua opção - imprimir no recibo uma sequência de caracteres que o pagador poderia dizer ao operador e, por sua vez, entender se é nosso pagamento ou não, filtrar a fraude ou realizar a operação manualmente.
O conceito da ideia era claro, mas irrealizável, e fomos um pouco mais longe: decidimos incorporar os dados de pagamento no código QR, imprimi-los no recibo e duplicar o Terminal QIWI na tela para maior precisão. Ao digitalizar o código QR com a câmera do dispositivo, o cliente pode descobrir o status da operação. E em caso de não pagamento no QIWI, o sistema o cria automaticamente. Assim, o cliente não apenas descobre se o dinheiro chegou, mas também o conduz de forma independente, independentemente do estado do terminal.
À primeira vista, a solução era óbvia: pegue uma solicitação existente com pagamento, envolva-a em um código QR, escreva uma página da web com informações de transação e solicitações de proxy de microsserviço entre o terminal, o processamento e a web. Supunha-se que o projeto funcionasse nos métodos existentes de autenticação de terminal e usaria os métodos de pagamento existentes no processamento.
A idéia surgiu imediatamente, revelando o potencial criativo da equipe. Começamos a exagerar e a criar opções adicionais para colocar um logotipo, slogan e até publicidade em um código QR, além dos dados de pagamento:
Um projeto para alguns sprints, não mais. Lá estava.
Primeira frustração
Aceitamos um pagamento existente e formamos um código QR:
Como resultado, nem o último iPhone7 da época conseguiu lê-lo. No cheque, o código QR, composto apenas por dados de pagamento e assinatura, mal cabia na metade da folha A4. A linha de solicitação de pagamento era muito longa. Essa foi a primeira tristeza.
Foi necessário resolver dois problemas principais:
- reduza o número de caracteres em uma solicitação de pagamento, ou seja, forneça uma solução na qual possamos sair da solicitação xml existente para uma mais compacta;
- escolha um algoritmo de criptografia e um comprimento de chave que forneça alta resistência e confiabilidade criptográficas com um tamanho de assinatura menor.
O critério para avaliar o número ideal de caracteres para o código QR era um - ele deveria ser lido pelas câmeras da maioria dos telefones celulares.
Em algumas reuniões de trabalho, foi encontrada uma solução:
- em vez da solicitação xml, decidimos usar uma solicitação get com parâmetros de pagamento e separadores entre eles;
- construiu uma assinatura nas curvas elípticas para encurtar o comprimento.
A vantagem de usar a solicitação de recebimento era que as câmeras de telefones celulares ou programas especiais, vendo o link no código QR, abriam imediatamente no navegador, o que tornava possível efetuar um pagamento em uma ação. Para reduzir o tamanho da solicitação get, tivemos que substituir o nome do parâmetro por delimitadores.
Como resultado do conjunto de ações, a solicitação de pagamento foi reduzida de aproximadamente 1.100 para 200 caracteres. Além disso, eu tive que aplicar o nível mais baixo de correção de erros do código QR - L.
Para a implementação, foi necessário desenvolver componentes no sistema:
- crie uma nova API para efetuar pagamentos por meio de um código QR;
- introduzir um novo mecanismo para trabalhar com chaves criptográficas entre o terminal e o processamento;
- implementar um microsserviço no qual a funcionalidade de solicitações de proxy, verificando a integridade dos dados recebidos, bem como a função de bloquear solicitações suspeitas e coletar estatísticas de operação, serão suspensas;
- desenvolver uma página da web para exibir informações de pagamento;
- Desenvolver um sistema de limites e verificações para um novo canal de pagamento.
Para o esquema de trabalho existente:

Planejamos adicionar uma alternativa:

No decorrer do projeto, pareceria pequeno, mas exigia a solução de problemas, o que de fato levou muito tempo, adiando a data de lançamento.
Pesquisa UX, ou trabalho veio de onde eles não esperaram
Eu queria fazer tudo como as pessoas, então eles trouxeram especialistas em UX para implementar o projeto para resolver problemas:
- em qual parte da tela do terminal QIWI colocar o código QR e como explicar sua utilidade para o cliente?
- onde colocar o código QR no cheque e como introduzir explicações semelhantes?
- Como criar um layout de uma página da web com status de pagamento, para que fique claro nos guias da empresa?
Obviamente, para a parte avançada dos clientes, explicações adicionais sobre o código QR não são necessárias, elas apenas precisam indicar o resultado. Mas queríamos cobrir a parte dos clientes para quem o código QR é uma abreviação mágica ou apenas um "quadrado preto". São eles que, de fato, interrompem a linha do call center.
Para torná-lo bonito e compreensível, foi realizada uma entrevista dentro do grupo focal de interesse para nós, com resultados inesperados ...
Brevidade é semelhante à economia
Pareceu assustador - o público que precisávamos nem sempre entendia o significado da palavra “Scan” e seus derivados. Portanto, o texto original “Digitalizar e descobrir o status” teve que ser abandonado. A solução foi a capacidade técnica de enviar uma foto do código QR por e-mail. E também foi necessário dizer isso de forma breve e clara, porque a fita de verificação é o material dispensável dos proprietários dos terminais e nossa preocupação com os negócios dessas pessoas é sua economia. Como resultado, a verificação agora fica assim:
Quanto à exibição do código QR na tela do terminal, ele foi colocado na página final do pagamento - a mais recente no cenário de pagamento. Ele é exibido no momento em que o cheque é impresso e é essencialmente uma duplicata eletrônica do código QR impresso.
O e-mail é onipresente
Em conexão com o surgimento de um novo canal para o processamento de códigos QR na forma de e-mail, tornou-se necessário o desenvolvimento de mecânicas com a função de reconhecer códigos QR incorporados em cartas e gerar uma resposta com o status do pagamento.
A função de reconhecer códigos QR foi executada no microsserviço. Na implementação inicial, a taxa de reconhecimento era de cerca de 65% na amostra apresentada de fotografias. Tentamos brincar com descoloração e aumento do contraste - isso deu aproximadamente + 20% de reconhecimento bem-sucedido.
A cereja no topo do bolo na tarefa de reconhecer fotos do código QR foi a introdução da “inteligência natural” para casos difíceis e pouco reconhecidos - a criação de aplicativos e seu processamento começaram a ser realizados no modo manual:
Técnico não trivial
Os principais desenvolvimentos nesse projeto, é claro, diziam respeito ao próprio microsserviço e ao software do terminal.
O QIWI está mudando ativamente para uma arquitetura de microsserviço para não tocar no mecanismo massivo. O microsserviço permite que você faça alterações rapidamente nos projetos, realize testes e libere versões. Portanto, em alguns meses, escrevemos os nossos. Penduramos nele todos os principais desenvolvimentos que só poderiam ser feitos:
- proxy de solicitações analisando e analisando solicitações de recebimento recebidas, convertendo-as em xml para processamento,
- funcionalidade para limitar solicitações recebidas de terminais,
- Funcionalidade de reconhecimento de código QR,
- coleta de estatísticas para análise posterior.
Além da implementação de um novo mecanismo para trabalhar com chaves criptográficas, as melhorias nos terminais tocaram na aplicação de uma nova tecnologia para impressão de recibos.
A funcionalidade para a sua formação foi retirada do núcleo principal do programa no plugin. Agora, poderíamos implementar alterações na verificação imediatamente, sem tocar na operacionalidade do terminal como um todo. A tarefa de imprimir um código QR, que, à primeira vista, parece bastante simples e se resume a imprimir uma imagem em um cheque, não é realmente assim.
Isso ocorre porque a rede de nossos proprietários de terminais possui cerca de 20 modelos de uma ampla variedade de impressoras e imprimimos cerca de 40 tipos de recibos. Quando eles começaram a implementação, surgiram muitas nuances: as linhas e a localização dos objetos no modelo de verificação começaram a flutuar quando a imagem foi adicionada, alguns comandos se mostraram sensíveis ao local e a quebra de linha se transformou em uma guia.
Começamos o teste, percebemos a necessidade de um compromisso - alguns modelos de impressoras precisavam ser excluídos, porque ao testar todas as configurações, um imenso número de casos surgiu.
Para os testes, decidimos escolher 6 modelos principais, que cobriam 91% da rede de agentes. E, é claro, no momento da realização de testes aleatórios em um ambiente de combate, foi em impressoras antigas que cobriam cerca de 5% da rede de agentes que foram descobertos problemas com recibos de impressão. Os modelos eram tão antigos que, mesmo no mercado, não podiam mais ser comprados. Eu tive que procurar com parceiros. Agora o projeto cobre 96% da rede. Já um pouco mais perto do ideal :)
Nem uma única verificação
Paralelamente à colocação das informações sobre o código QR no cheque e na página final do pagamento, outra tarefa foi apresentada - trazer esta página a uma visão universal de todos os projetos de terminal:
“Em termos de páginas de conclusão de pagamento nos terminais QIWI, tudo era bastante arcaico: publicidade, banners e envio de recibos eletrônicos. De cinco páginas, os caras fizeram uma, universal para todos os pagamentos. ” - Programador líder da equipe.
Agora, essa página universal é usada em diferentes interpretações, sem violar a regra de construção de um script, fechando a dívida cármica da equipe de desenvolvimento.
Assim, foi resolvido o problema de dez anos atrás, ao qual as mãos nem sempre chegavam. Havia várias tarefas de longa duração.
"Onde está o dinheiro, Zin?" ou o que está na linha de fundo
O projeto, projetado para alguns sprints, levou seis meses, afetando os recursos de 10 funcionários e a margem da agência de terceirização.
Como resultado, tendo implementado o projeto em 85% da rede de terminais, surpreendemos a nós mesmos e ao atendimento ao cliente. No terceiro dia do código QR, os colegas pensaram que um erro do sistema havia surgido neles - estatísticas sobre o número de chamadas para o call center com a pergunta "Onde está o meu pagamento?" já caiu 20%. Os clientes começaram a digitalizar o código QR e enviar recibos de fotos por e-mail, descobrindo o status e efetuando um pagamento por conta própria. E assim pelo segundo mês. Devo dizer que os clientes começaram a entender o que é o "quadrado preto" e como é útil.
O projeto com um código QR foi apreciado por todos que foram informados sobre ele - foi uma sinergia de interesses: por um lado, eles simplificaram a vida do cliente e, por outro, resolveram um problema técnico não-padrão. Verificar o status de um pagamento e conduzi-lo em um pedaço de papel, simplesmente digitalizando um código QR para QIWI é algo novo. Foi ótimo usar tecnologias conhecidas e simples para fazer um projeto útil. Em geral, o projeto não apenas aumentou as habilidades, mas também melhorou a comunicação dentro da própria equipe. E isso é quase a principal vantagem do karma.