Antes de começar
- Use a chave de API de uma aplicação sandbox. As aplicações de produção nunca chegam ao VASP de teste.
- Ative a Travel Rule com um nome legal:
- Opcionalmente, subscreva um destino de webhook para
travel_rule.status.updated. O sandbox envia-o, marcado com"environment": "sandbox".
O VASP de teste da Didit
GET /v1/sandbox/scenarios/ devolve o perfil do VASP de teste e todos os cenários do seu objeto travel_rule, para que os seus testes leiam os valores de acionamento em vez de os fixarem no código:
Todos os valores são dados de teste. O VASP de teste não é membro de nenhuma rede da Travel Rule, e nenhum resultado no sandbox mostra que uma contraparte ou rede real pode ser contactada.
Cenários de saída
Todas as transaçõestravelRule de saída de uma aplicação sandbox que precise de uma troca são encaminhadas para o VASP de teste. Escolha o resultado através do endereço de carteira do beneficiário (as maiúsculas e minúsculas não importam) ou através de um nome de beneficiário no formato Didit Test VASP <suffix>; a carteira prevalece quando ambos estão definidos. Sem nenhum dos dois, ou com um sufixo que a tabela não lista, a transferência é concluída (accept).
Uma transferência que não precisa de troca nunca chega ao VASP de teste: uma abaixo do seu threshold_amount, uma para a carteira verificada do seu utilizador e uma cuja carteira da contraparte tenha sido declarada por si como autocustodiada. Um VASP de contraparte que escolheu manualmente no diretório, por si ou pelo seu utilizador final, é avaliado pelas rotas que uma aplicação de produção usaria: quando a entrada tem uma (um endpoint TRP verificado, uma rede pela qual a sua aplicação envia ou um contacto de conformidade), a transferência vai para o VASP de teste; quando não tem nenhuma, a transferência termina em COUNTERPARTY_VASP_NOT_FOUND, como aconteceria numa aplicação de produção.
rail da transferência é TEST_VASP, e a lista de transferências indica Didit Test VASP como VASP beneficiário. Acompanhe-a nos webhooks travel_rule.status.updated ou leia GET /v3/transactions/{transaction_id}/.
name_mismatchcompara o nome do beneficiário que enviou com o nome do titular que o VASP de teste devolve, segundo a sua regra de nome para o tipo de entidade do beneficiário (matching_rules.individual.nameoumatching_rules.company.name, que seguemname_matching_strictnessaté os definir). A transferência e a entrada da cronologia que a decidiu incluemname_match(comcompared_with: "counterparty_vasp") edata_matchcommismatched_fields: ["name"].not_reachablemantém a transferência emAWAITING_COUNTERPARTYenquanto tenta novamente, comdelivery.statusRETRYINGelast_errortest VASP is not answering, e depois passa-a paraCOUNTERPARTY_VASP_NOT_REACHABLE. Envie{"action": "resend"}depois para a executar novamente.self_hostedfaz com que o VASP de teste responda que a carteira é autocustodiada. Registe a prova com o widget de verificação de propriedade da carteira (criado para si enquantoauto_wallet_verificationestiver ativo) ou comPOST .../travel-rule/ownership/com{"confirmed": true}: a carteira é adicionada à sua agenda de endereços em nome do beneficiário, e a correspondência de nomes decide a transferência. Uma correspondência conclui-a e marca a carteira como verificada;{"confirmed": false}recusa-a.
Transferências recebidas do VASP de teste
Para testar o lado de receção, peça ao VASP de teste que lhe envie uma transferência comPOST /v3/travel-rule/test-vasp/inbound/. Indique uma das carteiras do livro de endereços da sua aplicação: a transferência é decidida pelo mesmo caminho de entrada que uma real, com base no seu livro de endereços, no seu modo de propriedade e nas suas regras de nome.
A resposta
201 inclui transaction_id, txn_id, scenario, travel_rule_status, detail, test_vasp: true e a transferência travel_rule. Uma aplicação de produção recebe 400 ("The Didit Test VASP is only available on sandbox applications."), outro scenario recebe 400, e uma aplicação com a Travel Rule desativada recebe 409.
Decida uma transferência que esteja a aguardar através de
POST .../travel-rule/ownership/, como faria com uma real: {"confirmed": true} conclui-a e {"confirmed": false} recusa-a.
Um depósito que você próprio reporta com POST /v3/transactions/ não é uma transferência enviada pelo VASP de teste: fica AWAITING_COUNTERPARTY à espera do seu VASP de origem, e a cronologia indica o endpoint acima. Não dispara nenhum webhook até expirar após confirmation_timeout_hours. POST /v3/travel-rule/inbound/ continua a liquidar um registo posterior ao depósito contra o seu livro de endereços, como numa aplicação de produção.
Webhooks no sandbox
travel_rule.status.updated é enviado para aplicações sandbox em cada alteração de estado, com "environment": "sandbox". Uma transferência a que o VASP de teste respondeu inclui também rail: "TEST_VASP", test_vasp: true e test_vasp_scenario. O resto do sandbox continua a comportar-se como descrito em Monitorização de transações no sandbox: as regras não são avaliadas, transaction.created e transaction.status.updated não são enviados, e nada é faturado.
O que o sandbox não comprova
- Que uma contraparte real, uma adesão a uma rede ou o servidor TRP público da Didit funciona. Nenhum deles é contactado.
- Que as suas credenciais de rede são válidas. Uma adesão ligada só é comprovada pela primeira troca em produção.
- As rotas do diretório de VASPs reais: numa aplicação sandbox, cada rota aparece como
unavailablecomreason: sandbox_application, e cada linha comreachable: false.