# Configurar Alipay e WeChat QR

Este guia explica como integrar o **Alipay** e o **WeChat Pay** utilizando fluxos baseados em QR Code. Em vez de ler um cartão físico, o cliente apresenta um código QR que seu TPV escaneia e envia ao Get Smart SDK Payment Service através do repositório correspondente.

Antes de usar esses métodos de pagamento alternativos (APMs), certifique-se de que o TPV foi inicializado com `InitializationRepository.initTpv()` e que cada método está habilitado na configuração do terminal.

## Alipay

Para processar pagamentos Alipay, utilize o `AlipayRepository`. O fluxo típico é:

1. O cliente apresenta um código QR do Alipay.
2. Seu app escaneia o código e extrai o `qrId`.
3. Você chama `makePayment` no `AlipayRepository` com o valor e os dados do QR.

### Repositório
- **Repositório**: `AlipayRepository`

### Pagamento Alipay

**Função**: `makePayment`

**Parâmetros:**
- **`amount`**: O objeto `Money`.
- **`tip`**: O valor da gorjeta (pode ser zero ou omitido).
- **`qrId`**: A string do código escaneado do QR do cliente.
- **`transactionName`**: Um rótulo para a transação.
- **`qrIdType`**: O tipo de código QR (ex: `QrIdType.ALIPAY`).
- **`languageIso6391`**: Idioma da interface do serviço.

> **Restrição de Ambiente de Teste**: No ambiente de integração/teste, os pagamentos Alipay só são aceitos se o valor for exatamente **3,33€**.

```kotlin
suspend fun pagarComAlipay(amount: Money, scannedQr: String) {
    val result = alipayRepository.makePayment(
        amount = amount,
        tip = Money(BigDecimal.ZERO, Currency.getInstance("EUR")),
        qrId = scannedQr,
        transactionName = "Venda #123",
        qrIdType = QrIdType.ALIPAY,
        languageIso6391 = LanguageIso6391.PT
    )

    // Trate o RepositoryResult<AlipayResult> aqui...
}
```

### Estorno Alipay

**Função**: `makeRefund`

```kotlin
suspend fun estornarAlipay(amount: Money, originalId: String) {
    val result = alipayRepository.makeRefund(
        amount = amount,
        originalOperationId = originalId,
        languageIso6391 = LanguageIso6391.PT
    )
}
```

---

## WeChat Pay

Para processar pagamentos WeChat, utilize o `WeChatRepository`. O fluxo é similar ao Alipay e também depende do escaneamento do código QR do cliente.

### Repositório
- **Repositório**: `WeChatRepository`

### Pagamento WeChat

**Função**: `makePayment`

<Callout type="note">

Testar o WeChat no ambiente de integração pode ser limitado devido à falta de um kit de teste do provedor.

</Callout>

```kotlin
suspend fun pagarComWeChat(amount: Money, scannedQr: String) {
    val result = weChatRepository.makePayment(
        amount = amount,
        tip = Money(BigDecimal.ZERO, Currency.getInstance("EUR")),
        qrId = scannedQr,
        transactionName = "Venda #124",
        languageIso6391 = LanguageIso6391.PT
    )
}
```

## Próximos Passos

- Para métodos baseados em número de telefone, consulte **Configurar Pagamentos Bizum**.
- Para entender o tratamento de erros compartilhado, veja **Conceitos Principais / Tratar Respostas e Erros**.