# Adyen Payments

Adyen is a payment processor that supports cards, wallets, and local payment methods.

**Status: Implemented**

## Overview

Adyen provides similar functionality to Stripe with a server-side API for processing payments. The integration pattern would be similar to our existing Stripe implementation.

## Privacy/Verification Requirements

Like PayPal and Stripe, Adyen requires business verification. However, Adyen's process is generally less invasive than PayPal's:

**What Adyen requires:**
- Business registration documents (company registration, articles of incorporation)
- Proof of identity for account holders (government ID photo)
- Bank account verification for payouts
- Proof of address (utility bill, bank statement)

**What Adyen does NOT require (unlike PayPal):**
- No face scanning / biometric capture
- No selfies or photos of your face
- Auto-verification attempted first before manual document requests

**Onboarding process:**
1. Self-serve signup at adyen.com
2. Adyen attempts automatic verification first
3. If auto-verification fails, they request documents via dashboard
4. Once verified, you can process live payments

Similar KYC (Know Your Customer) requirements as other payment processors, but less invasive than PayPal. If privacy is a priority, use crypto payments (XMR/DOGE) instead.

## Technical Integration

### Python Library

Official library: https://github.com/Adyen/adyen-python-api-library

```bash
pip install Adyen
```

### Basic Usage

```python
import Adyen

adyen = Adyen.Adyen()
adyen.client.xapikey = "YOUR_API_KEY"
adyen.client.platform = "test"  # or "live"

# Create payment
result = adyen.checkout.payments_api.payments({
    "amount": {"currency": "USD", "value": 1000},  # $10.00 in cents
    "reference": f"invoice_{invoice.uuid_str}",
    "merchantAccount": "YOUR_MERCHANT_ACCOUNT",
    "paymentMethod": {
        "type": "scheme",
        "number": "4111111111111111",
        "expiryMonth": "03",
        "expiryYear": "2030",
        "cvc": "737"
    },
    "returnUrl": "https://your-site.com/checkout/result"
})
```

### Required Credentials

Each shop would need:

| Credential | Description |
|------------|-------------|
| `adyen_api_key` | API key from Adyen dashboard |
| `adyen_merchant_account` | Merchant account identifier |
| `adyen_client_key` | Client-side key for Drop-in/Components |
| `adyen_hmac_key` | HMAC key for webhook verification |

### Webhooks

Adyen uses HMAC-SHA256 for webhook verification:

```python
import hashlib
import hmac
import base64

def verify_hmac(hmac_key, hmac_signature, payload):
    expected = hmac.new(
        binascii.unhexlify(hmac_key),
        payload.encode('utf-8'),
        hashlib.sha256
    ).digest()
    expected_signature = base64.b64encode(expected).decode('utf-8')
    return hmac.compare_digest(hmac_signature, expected_signature)
```

### Key Events

- `AUTHORISATION` - Payment authorized
- `CAPTURE` - Payment captured
- `REFUND` - Refund processed
- `CHARGEBACK` - Dispute/chargeback created

## Implementation Plan

To add Adyen support:

1. Add shop columns: `adyen_api_key`, `adyen_merchant_account`, `adyen_client_key`, `adyen_hmac_key`, `adyen_enabled`
2. Add invoice columns: `adyen_psp_reference` (payment reference)
3. Create checkout view similar to Stripe PaymentIntent flow
4. Add webhook handler with HMAC verification
5. Add shop settings UI for Adyen credentials

## Resources

- Python Library: https://github.com/Adyen/adyen-python-api-library
- Example Integration: https://github.com/adyen-examples/adyen-python-online-payments
- API Explorer: https://docs.adyen.com/api-explorer/
- Build Your Integration: https://docs.adyen.com/online-payments/build-your-integration
- Webhooks: https://docs.adyen.com/development-resources/webhooks

## Comparison with Other Processors

| Feature | Stripe | PayPal | Adyen |
|---------|--------|--------|-------|
| Python Library | `stripe` | `requests` | `Adyen` |
| Webhook Auth | Signature secret | Signature verification API | HMAC-SHA256 |
| Test Mode | `sk_test_*` keys | Sandbox mode | Test merchant account |
| KYC Required | Yes | Yes (invasive) | Yes |
| Self-serve signup | Yes | Yes | Yes |
