Skip to content

Instantly share code, notes, and snippets.

@dtorras
Created May 13, 2022 09:41
Show Gist options
  • Save dtorras/1b7bb59c7aafba50c60b5d41ac83aa6b to your computer and use it in GitHub Desktop.
Save dtorras/1b7bb59c7aafba50c60b5d41ac83aa6b to your computer and use it in GitHub Desktop.
Bizum payment with creagia/redsys-php
<?php
use Creagia\Redsys\Enums\ConsumerLanguage;
use Creagia\Redsys\Enums\PayMethod;
use Creagia\Redsys\Exceptions\DeniedRedsysPaymentNotification;
use Creagia\Redsys\RedsysNotification;
use Creagia\Redsys\Support\RequestParameters;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Route;
use Creagia\Redsys\Enums\Currency;
use Creagia\Redsys\Enums\TransactionType;
use Creagia\Redsys\RedsysClient;
use Creagia\Redsys\RedsysRequest;
Route::get('/', function () {
return view('welcome');
});
Route::get('ok', function (Request $request) {
return dd($request->all());
});
Route::get('ko', function (Request $request) {
return 'ko';
});
Route::get('redirect', function () {
Log::debug('Redirect');
$redsysClient = new RedsysClient(
merchantCode: env('REDSYS_MERCHANT_CODE'),
secretKey: env('REDSYS_KEY'),
terminal: env('REDSYS_TERMINAL'),
environment: \Creagia\Redsys\Enums\Environment::Test,
);
$redsysRequest = new RedsysRequest($redsysClient);
$redsysRequest->createPaymentRequest(
amount: 5.45,
orderNumber: time(),
currency: Currency::EUR,
transactionType: TransactionType::Autorizacion,
requestParameters: new RequestParameters(
merchantUrl: url('notification'),
merchantName : 'Merchant name',
urlOk: url('ok'),
urlKo: url('ko'),
consumerLanguage: ConsumerLanguage::Auto->value,
payMethods: PayMethod::Bizum->value,
productDescription: 'Product description',
),
);
return $redsysRequest->getFormHtml();
});
Route::post('notification', function (Request $request) {
Log::debug('Payment notification');
Log::debug(json_encode($request->all()));
$redsysClient = new RedsysClient(
merchantCode: env('REDSYS_MERCHANT_CODE'),
secretKey: env('REDSYS_KEY'),
terminal: env('REDSYS_TERMINAL'),
environment: \Creagia\Redsys\Enums\Environment::Test,
);
$redsysNotification = new RedsysNotification($redsysClient);
$redsysNotification->setParametersFromResponse($_POST);
try {
$notificationData = $redsysNotification->checkResponse();
Log::debug('Authorised payment');
Log::debug(json_encode($notificationData->toArray()));
} catch (DeniedRedsysPaymentNotification $e) {
$errorMessage = $e->getMessage();
Log::debug("Denied payment with {$errorMessage}");
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment