make_post_sell/docs/ADYEN.md
Russell Ballestrini 4210bc1421 Add Adyen payment integration
- 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)
2025-12-22 17:16:54 -05:00

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:

  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

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 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

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