Package Data | |
---|---|
Maintainer Username: | devpark |
Package Create Date: | 2016-09-22 |
Package Last Update: | 2023-08-04 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-22 15:02:39 |
Package Statistics | |
---|---|
Total Downloads: | 1,788 |
Monthly Downloads: | 5 |
Daily Downloads: | 0 |
Total Stars: | 5 |
Total Watchers: | 2 |
Total Forks: | 10 |
Total Open Issues: | 1 |
This module makes integration with Paybox payment gateway much easier. It supports currently 2 ways of making payments using Paybox system.
Run
composer require devpark/laravel-paybox-gateway
in console to install this module
Open config/app.php
and add
Devpark\PayboxGateway\Providers\PayboxServiceProvider::class,
in section providers
Run
php artisan vendor:publish --provider="Devpark\PayboxGateway\Providers\PayboxServiceProvider"
in your console to publish default configuration files and sample views
Open config/paybox.php
and configure it according to your needs. By default you should put the following variables into your .env
file and fill them with valid values:
PAYBOX_TEST
- whether Paybox test system should be used (it should be set to true
only for tests) ,PAYBOX_SITE
- Site number provided by PayboxPAYBOX_RANK
- Rank number provided by PayboxPAYBOX_ID
- Internal identifier provided by PayboxPAYBOX_BACK_OFFICE_PASSWORD
- Paybox back-office password. It's required only if you are going to make Capture
requests. Otherwise it's not recommended to fill it (it won't be used)PAYBOX_HMAC_KEY
- This is key you should generate in your Paybox back-officeDownload Paybox public key and put it in directory and name you specified in config/paybox.php
for public_key
key
In your routes file register routes with names defined in customer_return_routes_names
and transaction_verify_route_name
groups of your config/paybox.php
In order to use the system, you need to do a few things:
You need to launch the authorization request in order to init payment
You need to handle customer returning routes to display message to customer. By default there are 4 different routes depending on final situation on transaction. Be aware you should never use those routes to change status of payment because in fact it's not 100% sure at this stage. You should use handle transaction routes in order to do that
You should handle transaction verify route. Here you should change status of payment after receiving request and make any additional actions.
In case you use want to capture previously authorized payments, you should also handle capturing previous payments.
This is main request you need to launch to init payment.
The most basic sample code for authorization request could look like this:
$authorizationRequest = \App::make(\Devpark\PayboxGateway\Requests\AuthorizationWithCapture::class);
return $authorizationRequest->setAmount(100)->setCustomerEmail('test@example.com')
->setPaymentNumber(1)->send('paybox.send');
This code should be run in controller as it's returning view which will by default automatically redirect customer to Paybox website.
In above sample code the full payment is made. If you want to only authorize payment (which you will capture later) you should use AuthorizationWithoutCapture
class instead of AuthorizationWithCapture
If you want more customization take a look at public methods of \Devpark\PayboxGateway\Requests\Authorization
class.
For setAmount
default currency is Euro. If you want to use other currency, you should use currency constant from \Devpark\PayboxGateway\Currency
class as 2nd parameter. Also please notice that amount you should give to this function is real amount (with decimal places) and not converted already to Paybox format.
Also for setPaymentNumber
you should make sure the number you gave here is unique for each call. That's why you should probably create payments table for each order and depending on your system, you might need to assume there are more than one payment for your order (for example someone first cancelled it, but later if you gave him such option they decided to make the payment again).
You might want in this step adjust also view for sending request because in some cases it might be seen by a client. However you shouldn't change fields you send to Paybox in this step or it won't work.
In case you use AuthorizationWithoutCapture
you should make sure, you have \Devpark\PayboxGateway\ResponseField::PAYBOX_CALL_NUMBER
and \Devpark\PayboxGateway\ResponseField::TRANSACTION_NUMBER
in your return fields because those values will be needed when capturing payment later. You should also always have \Devpark\PayboxGateway\ResponseField::AUTHORIZATION_NUMBER
and \Devpark\PayboxGateway\ResponseField::SIGNATURE
in your return fields and signature should be always last parameter.
By default 4 sample views were created with sample English texts. You should create routes that will display those views (those routes will be launched using GET
HTTP method), adjust those views and in most cases it will be enough because the real status of payment will be verified using transaction verify route.
To make sure the payment was really successful you should use \Devpark\PayboxGateway\Responses\Verify
class. The simplest code could look like this:
$payment = Payment::where('number', $request->input('order_number'))->firstOrFail();
$payboxVerify = \App::make(\Devpark\PayboxGateway\Responses\Verify::class);
try {
$success = $payboxVerify->isSuccess($payment->amount);
if ($success) {
// process order here after making sure it was real payment
}
echo "OK";
}
catch (InvalidSignature $e) {
Log::alert('Invalid payment signature detected');
}
This code should be run in controller, because you should return non-empty response when receiving valid Paybox request for transaction verify route. As you see, first you need to find order by number and then you need to make sure that it was successful. If yes, you should make sure it was real payment before you process the order (if you use full payment it will be always true but in case in your application you use also authorization only payments with later capture you should make sure you won't process the order for authorization only payment).
In case you use Authorization via Paybox System followed by capture via Paybox Direct you are going to finally capture previously authorized payment (you have up-to 7 days to do that).
The simplest code could look like this:
$payment = PaymentModel::find($idOfAuthorizedPayment);
$captureRequest = \App::make(\Devpark\PayboxGateway\Requests\Capture::class);
$response = $captureRequest->setAmount($payment->amount)
->setPayboxCallNumber($payment->call_number)
->setPayboxTransactionNumber($payment->transaction_number)
->setDayRequestNumber(2)
->send();
if ($response->isSuccess()) {
// process order here
}
In above code you should make sure value you give for setDayRequestNumber
is unique number in current day from 1 to 2147483647. For setPayboxCallNumber
and setPayboxTransactionNumber
you should use values you received in handling Handling transaction verify route
step so you should probably save them in this step to use them here.
This package is licenced under the MIT license