1. Go to this page and download the library: Download andydefer/laravel-pawapay library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
andydefer / laravel-pawapay example snippets
// routes/api.php
declare(strict_types=1);
use AndyDefer\LaravelPawapay\Callbacks\HandlesCallback;
use AndyDefer\PhpPawapay\Enums\Country;
use AndyDefer\PhpPawapay\Enums\Currency;
use AndyDefer\PhpPawapay\Enums\Language;
use AndyDefer\PhpPawapay\Enums\PayerType;
use AndyDefer\PhpPawapay\Enums\Provider;
use AndyDefer\PhpPawapay\Services\PawapayService;
return [
'api_token' => env('PAWAPAY_API_TOKEN', ''),
'base_url' => env('PAWAPAY_BASE_URL', 'https://api.sandbox.pawapay.io/'),
'service_fqcn' => PawapayService::class,
'handle_callback_fqcn' => HandlesCallback::class,
'currencies' => Currency::cases(),
'languages' => Language::cases(),
'countries' => Country::cases(),
'providers' => Provider::cases(),
'payer_types' => PayerType::cases(),
];
declare(strict_types=1);
namespace AndyDefer\LaravelPawapay\Contracts;
use AndyDefer\PhpPawapay\Collections\CountryCollection;
use AndyDefer\PhpPawapay\Collections\CurrencyCollection;
use AndyDefer\PhpPawapay\Collections\LanguageCollection;
use AndyDefer\PhpPawapay\Collections\PayerTypeCollection;
use AndyDefer\PhpPawapay\Collections\ProviderCollection;
use AndyDefer\PhpPawapay\Enums\PawaPayBaseUrl;
interface PawapayConfigInterface
{
public function getApiToken(): string;
public function getBaseUrl(): PawaPayBaseUrl;
public function getServiceFqcn(): string;
public function getHandleCallbackFqcn(): string;
public function getCurrencies(): CurrencyCollection;
public function getLanguages(): LanguageCollection;
public function getCountries(): CountryCollection;
public function getProviders(): ProviderCollection;
public function getPayerTypes(): PayerTypeCollection;
}
interface PawapayInterface
{
public function initiateDeposit(InitiateDepositRecord $record): InitiateDepositData|ErrorResponseData;
public function checkDepositStatus(CheckDepositStatusRecord $record): CheckDepositStatusData|ErrorResponseData;
public function resendDepositCallback(ResendDepositCallbackRecord $record): ResendDepositCallbackData|ErrorResponseData;
public function createPaymentPage(CreatePaymentPageRecord $record): CreatePaymentPageData|ErrorResponseData;
}
interface HandlesCallbacksInterface
{
public function handleDeposit(DepositCallbackStruct $struct): void;
public function handlePayout(PayoutCallbackStruct $struct): void;
public function handleRefund(RefundCallbackStruct $struct): void;
public function handleCheckout(CheckoutCallbackStruct $struct): void;
}
final class AfyaPawapayHandler extends HandlesCallback
{
public function handleDeposit(DepositCallbackStruct $struct): void
{
// Traitement spécifique au dépôt
}
}
declare(strict_types=1);
namespace App\Services;
use AndyDefer\PhpPawapay\Datas\ErrorResponseData;
use AndyDefer\PhpPawapay\Datas\InitiateDepositData;
use AndyDefer\PhpPawapay\Records\InitiateDepositRecord;
use AndyDefer\PhpPawapay\Services\PawapayService;
use AndyDefer\PhpVo\Enums\HttpStatusCode;
/**
* Afya-specific PawaPay service.
*
* Relies on the parent service hooks to plug application-level behaviour
* without altering the PawaPay contract.
*/
final class AfyaPawapayService extends PawapayService
{
protected function beforeInitiateDeposit(InitiateDepositRecord $record): ?ErrorResponseData
{
if ($record->amount->toFloat() > 10_000) {
return ErrorResponseData::from([
'message' => 'Montant trop élevé',
'status' => HttpStatusCode::FORBIDDEN,
'errorCode' => 'AMOUNT_TOO_HIGH',
]);
}
return null;
}
protected function afterInitiateDeposit(InitiateDepositRecord $record, InitiateDepositData $data): ?ErrorResponseData
{
// Par exemple : persister la tentative de dépôt et notifier l'utilisateur.
return null;
}
}
protected function beforeInitiateDeposit(InitiateDepositRecord $record): ?ErrorResponseData
{
$orderId = $record->data?->get('order_id');
if ($orderId !== null) {
// Résoudre la commande applicative à partir de l'identifiant transmis par le client.
}
return null;
}
declare(strict_types=1);
namespace App\Callbacks;
use AndyDefer\LaravelPawapay\Callbacks\HandlesCallback;
use AndyDefer\PhpPawapay\Structures\Callbacks\CheckoutCallbackStruct;
use AndyDefer\PhpPawapay\Structures\Callbacks\DepositCallbackStruct;
use AndyDefer\PhpPawapay\Structures\Callbacks\PayoutCallbackStruct;
use AndyDefer\PhpPawapay\Structures\Callbacks\RefundCallbackStruct;
final class AfyaPawapayHandler extends HandlesCallback
{
public function handleDeposit(DepositCallbackStruct $struct): void
{
// 1. Vérifier la signature du callback
// 2. Dédupliquer par depositId
// 3. Persister le paiement
// 4. Notifier le client
}
public function handleCheckout(CheckoutCallbackStruct $struct): void
{
// Traiter les checkouts
}
}
public function handleDeposit(DepositCallbackStruct $struct): void
{
$alreadyProcessed = ProcessedCallback::where('external_id', $struct->depositId->getValue())
->where('operation', 'deposit')
->exists();
if ($alreadyProcessed) {
return;
}
DB::transaction(function () use ($struct) {
ProcessedCallback::create([
'external_id' => $struct->depositId->getValue(),
'operation' => 'deposit',
]);
// Traitement métier
});
}
declare(strict_types=1);
namespace AndyDefer\LaravelPawapay\Tests\Fixtures\Configs;
use AndyDefer\LaravelPawapay\Contracts\PawapayConfigInterface;
use AndyDefer\PhpPawapay\Collections\CountryCollection;
use AndyDefer\PhpPawapay\Collections\CurrencyCollection;
use AndyDefer\PhpPawapay\Collections\LanguageCollection;
use AndyDefer\PhpPawapay\Collections\PayerTypeCollection;
use AndyDefer\PhpPawapay\Collections\ProviderCollection;
use AndyDefer\PhpPawapay\Enums\Country;
use AndyDefer\PhpPawapay\Enums\Currency;
use AndyDefer\PhpPawapay\Enums\Language;
use AndyDefer\PhpPawapay\Enums\PawaPayBaseUrl;
use AndyDefer\PhpPawapay\Enums\PayerType;
use AndyDefer\PhpPawapay\Enums\Provider;
use AndyDefer\PhpPawapay\Services\PawapayService;
final class RestrictedPawapayConfig implements PawapayConfigInterface
{
public function getApiToken(): string
{
return 'test-token';
}
public function getBaseUrl(): PawaPayBaseUrl
{
return PawaPayBaseUrl::SANDBOX;
}
public function getServiceFqcn(): string
{
return PawapayService::class;
}
public function getHandleCallbackFqcn(): string
{
return \AndyDefer\LaravelPawapay\Callbacks\HandlesCallback::class;
}
public function getCurrencies(): CurrencyCollection
{
return CurrencyCollection::from([Currency::USD]);
}
public function getLanguages(): LanguageCollection
{
return LanguageCollection::from([Language::FR]);
}
public function getCountries(): CountryCollection
{
return CountryCollection::from([Country::COD]);
}
public function getProviders(): ProviderCollection
{
return ProviderCollection::from([Provider::VODACOM_MPESA_COD]);
}
public function getPayerTypes(): PayerTypeCollection
{
return PayerTypeCollection::from([PayerType::MMO]);
}
}
$this->app->instance(PawapayConfigInterface::class, new RestrictedPawapayConfig);