iOS - merci-app/whatsapp-pay-docs GitHub Wiki
No iOS, o WPP transmite os dados para o app do emissor através de uma URL. O app do emissor responde utilizando uma URL de callback.
Seguem abaixo as etapas para implementar a ativação de token WPP + App2App@iOS.
1) Configuração do URL type
É necessário configurar o URL type que será usado pelo WPP para enviar o payload de ativação de token, dentro da aba Info do target do aplicativo, conforme imagem abaixo:
Importante: as informações devem respeitar as configurações do setup.
2) Tratamento de URL de ativação de token
No AppDelegate
, é necessário implementar o tratamento das URLs configuradas no passo anterior, conforme explicado aqui.
Tendo como exemplo as configurações de exemplo, a url que o WPP irá abrir será:
bank-app://token-activation/a2a?a2apayload=...&wpcallback=...
E o tratamento de URL pode ser implementado da seguinte forma:
func application(_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// Checks if incoming URL fits token activation requirements
guard let components = NSURLComponents(url: url, resolvingAgainstBaseURL: true),
let scheme = url.scheme,
let payloadBase64 = components.queryItems?.first(where: { item in
item.name == "a2apayload"
})?.value,
let callbackUrl = components.queryItems?.first(where: { item in
item.name == "wpcallback"
})?.value,
scheme == "bank-app",
url.host == "token-activation",
components.path == "/a2a"
else {
return false
}
// TODO: Store callbackUrl for later use
// TODO: Proceeds with token activation payload decoding and store it for later use
return true
}
3) Decode do payload de ativação de token
O próximo passo é decodificar o payload de ativação de token.
Para isso, é útil criar um model para armazenar os dados:
struct App2AppTokenActivationPayload : Decodable {
let panReferenceID: String?
let tokenRequestorID: String?
let tokenReferenceID: String?
let walletAccountID: String?
let deviceID: String?
let deviceIndex: String?
let reasonCode: String?
}
Assim podemos implementar a função que decodifica o payload enviado pelo WPP:
private func decode(base64: String): App2AppTokenActivationPayload? {
guard let encodedData = base64.data(using: .utf8),
let decodedData = Data(base64Encoded: encodedData),
let json = String(data: decodedData, encoding: .utf8),
let tokenActivationPayload = try? JSONDecoder().decode(App2AppTokenActivationPayload.self, from: decodedData)
else {
// Error while decoding payload
return nil
}
return tokenActivationPayload
}
4) Executar a API de ativação de token
Com as informações obtidas nas etapas passo 2 e 3, o próximo passo é se comunicar com o BFF para que o mesmo execute a API de ativação de token.
Observaçao: antes de prosseguir com esta etapa, uma boa prática e apresentar uma tela pedindo a confirmação do usuário e requisitar autenticação com senha/biometria.
5) Abrir a URL de callback
Após executar a API de ativação de token com sucesso, é necessário abrir a URL de callback fornecida pelo WPP no passo 2. Dessa forma, o fluxo de ativação de token é encerrado e o controle retorna para o WPP.
Pseudo-code dos passos 4 e 5:
// Call BFF API that execute Token activation
ActivateToken(payload: App2AppTokenActivationPayload) { result in
switch result {
case .failure(let error):
// Handle failure
case .success(let response):
UIApplication.shared.open(callbackUrl) {
}
}
}