- Add Adyen API credentials to Shop model (api_key, merchant_account, client_key, hmac_key, enabled) - Add adyen_psp_reference to Invoice model for payment tracking - Add Adyen checkout views (create-session, complete-checkout) - Add Adyen webhook handler with HMAC verification - Add shop settings UI for Adyen credentials - Add request.adyen_enabled and request.adyen_globally_enabled - Update ADYEN.md with verification details and implementation status - Add 21 tests (8 unit, 5 integration, 5 functional + 3 invoice)
132 lines
4.1 KiB
Markdown
132 lines
4.1 KiB
Markdown
# 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 |
|