# Paiement PayPal

Encaissement par compte PayPal ou carte bancaire sans compte.

## Ce qu'il faut récupérer

Tout se trouve sur `developer.paypal.com`, pas sur le site PayPal
habituel. Connectez-vous avec votre compte marchand.

### 1. L'application

**Apps & Credentials**

Un sélecteur en haut bascule entre deux environnements :

| Environnement | Ce qui se passe |
|---------------|-----------------|
| Sandbox | Aucun argent ne bouge |
| Live | Paiements réels |

Créez une application dans l'environnement voulu. PayPal affiche
alors :

**Client ID** — une longue chaîne, visible en permanence.

**Secret** — masqué par défaut, un lien le révèle. C'est lui qu'il
faut copier dans le réglage « Secret client ».

### 2. L'adresse de notification

Elle s'affiche dans **Boutique › Réglages › Paiement**, avec un bouton
de copie :

```
https://votre-site.fr/paiement/paypal/notification
```

### 3. L'identifiant de notification

Dans la page de votre application, section **Webhooks** : cliquez
**Add Webhook**, collez l'adresse ci-dessus, puis cochez ces
événements :

| Événement | Ce qu'il déclenche |
|-----------|--------------------|
| `PAYMENT.CAPTURE.COMPLETED` | Le règlement est enregistré |
| `PAYMENT.CAPTURE.REFUNDED` | Remboursement enregistré |
| `PAYMENT.CAPTURE.DENIED` | Paiement refusé |
| `CUSTOMER.DISPUTE.CREATED` | Litige ouvert par le client |

Une fois créé, PayPal affiche un **Webhook ID** — une chaîne comme
`5XY12345AB678901C`. Copiez-la dans le réglage « Identifiant de
notification ».

Sans lui, **aucune notification n'est acceptée** : PayPal ne signe pas
ses messages comme Stripe, il faut lui redemander si chacun est
authentique, et cette vérification exige l'identifiant.

## Une différence importante avec Stripe

PayPal encaisse en **deux temps** : l'accord du client ne prélève rien,
il faut ensuite *capturer* la commande.

C'est le retour du client sur votre site qui déclenche la capture. Si
le client ferme son navigateur avant de revenir, la notification
rattrape le cas.

## Tester

**Sandbox › Accounts** contient deux comptes de test créés
automatiquement : un marchand et un acheteur.

Cliquez sur l'acheteur pour voir son adresse électronique et son mot de
passe — c'est avec eux que vous vous connectez lors du paiement de
test.

Les cartes de test fonctionnent aussi, sans compte : PayPal en propose
dans la même section.

## Rapprochement bancaire

PayPal n'a pas de versement groupé comme Stripe : le solde est
disponible immédiatement, et vous virez quand vous voulez.

La commission figure dans la réponse de capture et est enregistrée avec
le règlement. Vous voyez donc ce que le client a payé et ce qui vous
reste.

## Passer en production

1. Basculez le sélecteur de mode dans les réglages
2. Créez une **application Live** sur `developer.paypal.com`
3. Remplacez l'identifiant et le secret par ceux de cette application
4. **Créez un second webhook** en Live, et remplacez son identifiant

Comme chez Stripe, l'oubli du point 4 fait que les paiements passent
sans jamais être confirmés.
