- 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)
4.1 KiB
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:
- Self-serve signup at adyen.com
- Adyen attempts automatic verification first
- If auto-verification fails, they request documents via dashboard
- 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
pip install Adyen
Basic Usage
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:
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 authorizedCAPTURE- Payment capturedREFUND- Refund processedCHARGEBACK- Dispute/chargeback created
Implementation Plan
To add Adyen support:
- Add shop columns:
adyen_api_key,adyen_merchant_account,adyen_client_key,adyen_hmac_key,adyen_enabled - Add invoice columns:
adyen_psp_reference(payment reference) - Create checkout view similar to Stripe PaymentIntent flow
- Add webhook handler with HMAC verification
- 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 |