Download the PHP package andydefer/laravel-pawapay without Composer

On this page you can find all versions of the php package andydefer/laravel-pawapay. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package laravel-pawapay

Laravel PawaPay

Intégration Laravel du SDK PawaPay pour les paiements Mobile Money en Afrique.


Table des matières

  1. Introduction
  2. Installation
  3. Configuration
  4. Routes exposées
  5. Utilisation
  6. Contrats et extension
  7. Hooks du service PawaPay
  8. Gestion des erreurs
  9. Traitement des callbacks entrants
  10. Tests
  11. Sécurité
  12. Compatibilité

1. Introduction

Objectif

andydefer/laravel-pawapay expose les opérations PawaPay (dépôts Mobile Money, statuts, webhooks, pages de paiement) sous forme d'endpoints HTTP Laravel prêts à l'emploi.

Le package s'appuie sur andydefer/php-pawapay, qui contient toute la logique métier et les objets typés (Record, Data, ErrorResponseData). Laravel PawaPay n'ajoute que la couche transport : routes, validation, injection.

Ce que le package fournit

Ce que le package ne fait pas


2. Installation

Le PawapayServiceProvider est découvert automatiquement par Laravel.


3. Configuration

3.1 Publier les fichiers

3.2 Charger les routes

Les routes ne sont pas chargées automatiquement. Charge-les explicitement depuis ton application :

Tu contrôles ainsi le préfixe, les middlewares et l'ordre de chargement.

3.3 Fichier de configuration

3.4 Clés de configuration

Clé Type Défaut Description
api_token string '' Token d'authentification fourni par PawaPay
base_url string URL sandbox URL de base de l'API PawaPay
service_fqcn class-string PawapayService::class Implémentation de PawapayInterface
handle_callback_fqcn class-string HandlesCallback::class Implémentation de HandlesCallbacksInterface
currencies array<int, Currency\|string> Toutes les cases Devises acceptées par les FormRequest
languages array<int, Language\|string> Toutes les cases Langues acceptées par les FormRequest
countries array<int, Country\|string> Toutes les cases Pays acceptés par les FormRequest
providers array<int, Provider\|string> Toutes les cases Providers acceptés par InitiateDepositRequest
payer_types array<int, PayerType\|string> Toutes les cases Types de payeur acceptés par InitiateDepositRequest

3.5 Variables d'environnement

3.6 Restreindre les valeurs autorisées

Toute valeur absente de ces listes est rejetée par les FormRequest avec un 422.

3.7 Cas concret : configuration Afya (RDC)


4. Routes exposées

Le fichier routes/laravel-pawapay.php déclare cinq endpoints, tous en POST, sous le préfixe pawapay.

Méthode URI Nom Description
POST /pawapay/initiate-deposit pawapay.initiate-deposit Initier un dépôt Mobile Money
POST /pawapay/check-deposit-status pawapay.check-deposit-status Vérifier l'état d'un dépôt
POST /pawapay/resend-deposit-callback pawapay.resend-deposit-callback Renvoyer le webhook d'un dépôt
POST /pawapay/create-payment-page pawapay.create-payment-page Créer une page de paiement hébergée
POST /pawapay/callback pawapay.callback Recevoir un callback PawaPay

Note sur la route callback

La route callback utilise EmptyRequest (du package laravel-actions) et non un FormRequest dédié. Pawapay n'est pas un client à valider : le payload est vérifié par le handler applicatif (handle_callback_fqcn), pas par les règles Laravel.

Ne protège pas la route callback avec auth:sanctum. C'est Pawapay qui l'appelle en externe. La sécurité repose sur la vérification de signature dans le handler.


5. Utilisation

5.1 Initier un dépôt

Requête :

Paramètres :

Champ Type Requis Contrainte
deposit_id uuid ✅ UUID v4
phone_number string ✅ E.164 sans +, 9 à 15 caractères
provider Provider ✅ Doit figurer dans pawapay.providers
amount numeric ✅ > 0
currency Currency ✅ Doit figurer dans pawapay.currencies
payer_type PayerType ✅ Doit figurer dans pawapay.payer_types
pre_authorisation_code string ❌ Libre
client_reference_id string ❌ 4 à 64 caractères
customer_message string ❌ 4 à 22 caractères
metadata array ❌ 10 clés maximum

Les champs non listés dans rules() mais présents dans la requête sont collectés dans le data bag du Record (voir section 6.4).

Réponse succès (200) :

Statuts : ACCEPTED, REJECTED, DUPLICATE_IGNORED.

5.2 Vérifier un dépôt

Réponse succès (200) :

Statuts de recherche : FOUND, NOT_FOUND, REJECTED.

Statuts de dépôt : ACCEPTED, PROCESSING, IN_RECONCILIATION, COMPLETED, FAILED, REJECTED.

5.3 Renvoyer un webhook

Réponse succès (200) :

Statuts : ACCEPTED, REJECTED.

5.4 Créer une page de paiement

Paramètres :

Champ Type Requis Contrainte
deposit_id uuid ✅ UUID v4
return_url url ✅ URL valide
amount numeric ✅ > 0
currency Currency ✅ Doit figurer dans pawapay.currencies
phone_number string ✅ E.164 sans +, 9 à 15 caractères
language Language ✅ Doit figurer dans pawapay.languages
country Country ✅ Doit figurer dans pawapay.countries
customer_message string ❌ 4 à 22 caractères
metadata array ❌ 10 clés maximum

Réponse succès (200) :

Redirige l'utilisateur vers redirectUrl pour qu'il effectue le paiement.


6. Contrats et extension

6.1 PawapayConfigInterface

Contrat de la configuration. Utilisé par les Action pour résoudre le service et le handler, et par les FormRequest pour valider les valeurs autorisées.

6.2 PawapayInterface

Contrat du service PawaPay. Les Action ne connaissent que cette interface.

6.3 HandlesCallbacksInterface

Contrat du handler de callbacks entrants. Quatre méthodes, une par type d'opération.

6.4 Remplacer le service PawaPay

Option A — Modifier service_fqcn.

Contraintes :

Option B — Binder l'interface.

L'option B n'a d'effet que si service_fqcn reste égal à PawapayService::class.

6.5 Remplacer le handler de callbacks

Option A — Modifier handle_callback_fqcn.

La classe doit implémenter HandlesCallbacksInterface et avoir un constructeur auto-résolvable.

Option B — Étendre HandlesCallback.

Le package fournit un stub vide AndyDefer\LaravelPawapay\Callbacks\HandlesCallback. Étends-le pour ne surcharger que les méthodes utiles.

6.6 Le data bag des Record

Chaque FormRequest construit un Record avec un data bag optionnel. Ce bag contient tous les champs présents dans la requête mais non listés dans rules(). Il permet à l'application hôte d'attacher des informations contextuelles (identifiant interne, marqueur, note) sans étendre le Record du SDK.

order_id et customer_segment ne sont pas dans rules(). Ils aboutissent dans $record->data, un StrictAssociative accessible depuis les hooks du service ou depuis toute couche applicative qui consomme le Record.


7. Hooks du service PawaPay

Le service andydefer/php-pawapay expose dix hooks protected — deux par opération + deux pour les callbacks — que l'application hôte peut surcharger pour greffer sa logique métier sans réécrire le comportement PawaPay.

Les hooks sont appelés dans cet ordre, à chaque invocation de l'opération :

7.1 Liste des hooks

Hook Signature Déclenché
beforeInitiateDeposit (InitiateDepositRecord $record): ?ErrorResponseData Avant l'appel initiateDeposit
afterInitiateDeposit (InitiateDepositRecord $record, InitiateDepositData $data): ?ErrorResponseData Après l'appel initiateDeposit
beforeCheckDepositStatus (CheckDepositStatusRecord $record): ?ErrorResponseData Avant l'appel checkDepositStatus
afterCheckDepositStatus (CheckDepositStatusRecord $record, CheckDepositStatusData $data): ?ErrorResponseData Après l'appel checkDepositStatus
beforeResendDepositCallback (ResendDepositCallbackRecord $record): ?ErrorResponseData Avant l'appel resendDepositCallback
afterResendDepositCallback (ResendDepositCallbackRecord $record, ResendDepositCallbackData $data): ?ErrorResponseData Après l'appel resendDepositCallback
beforeCreatePaymentPage (CreatePaymentPageRecord $record): ?ErrorResponseData Avant l'appel createPaymentPage
afterCreatePaymentPage (CreatePaymentPageRecord $record, CreatePaymentPageData $data): ?ErrorResponseData Après l'appel createPaymentPage
beforeHandleCallback (Struct $struct, CallbackOperationType $operation): void Avant le dispatch d'un callback
afterHandleCallback (Struct $struct, CallbackOperationType $operation): void Après le dispatch d'un callback

7.2 Créer un service applicatif

Puis déclare-le dans la config :

Les Action du package résolvent automatiquement cette classe via le conteneur.

7.3 Accéder au data bag depuis un hook

7.4 Ce qu'il ne faut pas faire dans un hook


8. Gestion des erreurs

Le package distingue trois niveaux.

8.1 Validation (HTTP 422)

Les FormRequest rejettent les payloads invalides avant toute exécution.

Situation Message type
Champ requis manquant The deposit id field is required.
UUID invalide The deposit id field must be a valid UUID.
Provider non autorisé The selected provider is invalid.
Devise non autorisée The selected currency is invalid.
Langue non autorisée The selected language is invalid.
Pays non autorisé The selected country is invalid.
Type de payeur non autorisé The selected payer type is invalid.
Montant ≤ 0 The amount field must be at least 0.01.
return_url invalide The return url field must be a valid URL.
customer_message trop court The customer message field must be at least 4 characters.
customer_message trop long The customer message field must not be greater than 22 characters.

8.2 Refus PawaPay

Deux cas, distingués par le type de retour du service.

Cas A — Data avec failureReason non-null (HTTP 200).

Cas B — ErrorResponseData (HTTP non-200).

L'action propage le code HTTP embarqué.

Codes d'erreur possibles :

Code Signification
NO_AUTHENTICATION Aucun token fourni
AUTHENTICATION_ERROR Token API invalide
AUTHORISATION_ERROR Token non autorisé sur cet endpoint
HTTP_SIGNATURE_ERROR Signature HTTP invalide
INVALID_INPUT Corps de requête invalide
MISSING_PARAMETER Paramètre obligatoire manquant
UNSUPPORTED_PARAMETER Paramètre non supporté
INVALID_PARAMETER Paramètre invalide
AMOUNT_OUT_OF_BOUNDS Montant hors bornes pour le provider
INVALID_AMOUNT Montant non supporté par le provider
INVALID_PHONE_NUMBER Numéro incompatible avec le provider
INVALID_CURRENCY Devise non supportée par le provider
INVALID_PROVIDER Provider inconnu
DUPLICATE_METADATA_FIELD Champ metadata dupliqué
DEPOSITS_NOT_ALLOWED Dépôts non autorisés pour ce compte
PAYOUTS_NOT_ALLOWED Payouts non autorisés pour ce compte
REFUNDS_NOT_ALLOWED Refunds non autorisés pour ce compte
PROVIDER_TEMPORARILY_UNAVAILABLE Provider momentanément indisponible
PAYMENT_NOT_APPROVED Client n'a pas approuvé le paiement
INSUFFICIENT_BALANCE Solde client insuffisant
PAYMENT_IN_PROGRESS Paiement en cours, callback non disponible
PAYER_NOT_FOUND Payeur introuvable
RECIPIENT_NOT_FOUND Bénéficiaire introuvable
MANUALLY_CANCELLED Paiement annulé manuellement
PAWAPAY_WALLET_OUT_OF_FUNDS Wallet PawaPay à sec
DEPOSIT_ALREADY_REFUNDED Dépôt déjà remboursé
AMOUNT_TOO_LARGE Montant trop élevé
REFUND_IN_PROGRESS Remboursement en cours
WALLET_LIMIT_REACHED Plafond wallet atteint
UNSPECIFIED_FAILURE Échec non spécifié
UNKNOWN_ERROR Erreur non catégorisée

8.3 Erreurs techniques

Levées par le conteneur ou le service si :


9. Traitement des callbacks entrants

Pawapay envoie les callbacks (deposit, payout, refund, checkout) sur l'endpoint unique POST /pawapay/callback. Le SDK détecte l'opération à partir des champs présents dans le payload et dispatche vers la méthode correspondante du handler.

9.1 Comportement du package

CallbackAction :

  1. Lit le payload brut depuis la Request injectée.
  2. Détecte l'opération via CallbackOperationType::fromPayload().
  3. Hydrate le Struct correspondant.
  4. Résout le service via service_fqcn et le handler via handle_callback_fqcn.
  5. Appelle $service->handleCallback($struct, $handler).
  6. Retourne 204 No Content.

9.2 Champs discriminants

Champ discriminant Opération Ordre de vérification
checkoutId CHECKOUT 1 (prioritaire)
depositId DEPOSIT 2
payoutId PAYOUT 3
refundId REFUND 4

checkoutId est vérifié en premier car un checkout contient aussi un objet deposit imbriqué.

9.3 Écrire un handler

Puis déclare-le :

9.4 Sécurité des callbacks

Le package ne fait pas :

Ces trois responsabilités doivent être implémentées dans le handler (handle_callback_fqcn) avant de traiter le callback. Une exception levée dans le handler se traduit par un 500, ce qui indique à Pawapay de réessayer.

9.5 Idempotence recommandée

Utilise une table processed_callbacks avec une contrainte unique sur l'identifiant du callback (depositId, payoutId, refundId ou checkoutId) :


10. Tests

Le package fournit un IntegrationTestCase basé sur orchestra/testbench. Chaque test enregistre le vrai endpoint via action_route(...) et remplace le client HTTP bas niveau par un MockPawapayClient.

Pour injecter une configuration alternative, utilise une classe de test dédiée :

Puis dans un test :


11. Sécurité


12. Compatibilité

Version Support
PHP 8.1+ ✅ Complet
Laravel 10 ✅ Complet
Laravel 11 ✅ Complet
Laravel 12 ✅ Complet
Laravel 9 ⚠️ Dépend de andydefer/laravel-actions

Licence

MIT © Andy Defer


All versions of laravel-pawapay with dependencies

PHP Build Version
Package Version
Requires php Version ^8.1
andydefer/laravel-actions Version ^2.12.7
andydefer/php-pawapay Version ^0.18.7
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package andydefer/laravel-pawapay contains the following files

Loading the files please wait ...