# Configurar Alipay y WeChat QR

Esta guía explica cómo integrar **Alipay** y **WeChat Pay** mediante flujos basados en QR. En lugar de leer una tarjeta física, el cliente presenta un código QR que tu TPV escanea y envía al Get Smart SDK Payment Service a través del repositorio correspondiente.

Antes de utilizar estos métodos de pago alternativos (APM), asegúrate de que el TPV esté inicializado con `InitializationRepository.initTpv()` y que cada método esté habilitado en la configuración del terminal.

## Alipay

Para procesar pagos de Alipay, utiliza el `AlipayRepository`. El flujo típico es:

1. El cliente presenta un código QR de Alipay.
2. Tu aplicación escanea el código y extrae el `qrId`.
3. Llamas a `makePayment` en `AlipayRepository` con el importe y los datos del QR.

### Repositorio
- **Repositorio**: `AlipayRepository`

### Pago con Alipay

**Función**: `makePayment`

> **Restricción del entorno de prueba**: En el entorno de integración/prueba, los pagos de Alipay solo se aceptan si el importe es exactamente **3,33€**.

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

    // Handle RepositoryResult<AlipayResult> here...
}
```

### Devolución con Alipay

**Función**: `makeRefund`

**Parámetros:**

- `amount`: Importe a devolver.
- `originalOperationId`: El ID del pago original con Alipay.
- `languageIso6391`: Idioma de la interfaz.

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

    // Handle RepositoryResult<AlipayResult> here...
}
```

## WeChat Pay

Para procesar pagos de WeChat, utiliza el `WeChatRepository`. El flujo es similar al de Alipay y también se basa en el escaneo del código QR del cliente.

### Repositorio
- **Repositorio**: `WeChatRepository`

### Pago con WeChat

**Función**: `makePayment`

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

    // Handle RepositoryResult<WeChatResult> here...
}
```

### Devolución con WeChat

**Función**: `makeRefund`

**Parámetros:**

- `amount`: Importe a devolver.
- `originalOperationId`: El ID del pago original con WeChat.
- `languageIso6391`: Idioma de la interfaz.

```kotlin
suspend fun refundWeChat(amount: Money, originalId: String) {
    val result = weChatRepository.makeRefund(
        amount = amount,
        originalOperationId = originalId,
        languageIso6391 = LanguageIso6391.ES
    )

    // Handle RepositoryResult<WeChatResult> here...
}
```

## Próximos pasos

- Para métodos basados en número de teléfono, consulta **Configurar Pagos Bizum**.
- Para comprender la gestión de respuestas compartidas, consulta **Conceptos clave / Tratar Respuestas y Errores**.