Repository files navigation

Very short description of the package

Payment Package provide a simple way to handle payment gateway in MENA.

Installation

This package requires Laravel 5.4 or higher. if your laravel is > 5.4 you can skip the two steps (2, 3) below (Package Auto Discovery 5.5+).

  1. You can install the package via composer:
composer require devinweb/payment
  1. Open your config/app.php and add the following to the providers array
Devinweb\Payment\PaymentServiceProvider::class,
  1. In the same config/app.php and add the following to the aliases array:
'Payment' => Devinweb\Payment\Facades\Payment::class,
  1. Run the command below to publish the package config file config/payfort-payment.php:
php artisan vendor:publish --provider="Devinweb\Payment\PaymentServiceProvider" --tag="config"

Payfort

To pay via payfort it's simple, but before process the payment it's requiered to setup your FrontEnd, you can check the payment-boilerplate Repository.

Configuration (Payfort)

Now you can add your payfort credentiels to app/config/payments/php

<?php'payfort' => [
'callback_urls' => [
'error-page' => '/api/error',
'success-page' => '/api/success',
],
'sandboxMode' => env('PAYFORT_SAND_BOX_MODE', true),
/** * language used to specify the response language returned from payfort */'language' => env('LANGUAGE', 'en'),
/** * your Merchant Identifier account (mid) */'merchantIdentifier' => env('MERCHANT_IDENTIFIER', ''),
/** * your access code */'accessCode' => env('ACCESS_CODE', ''),
/** * SHA Request passphrase */'SHARequestPhrase' => env('SHA_REQUEST_PASSPHRASE', ''),
/** * SHA Response passphrase */'SHAResponsePhrase' => env('SHA_RESPONSE_PASSPHRASE', ''),
/** * SHA Type (Hash Algorith) * expected Values ("sha1", "sha256", "sha512") */'SHAType' => env('SHA_TYPE', 'sha256'),
/** * command * expected Values ("AUTHORIZATION", "PURCHASE") */'command' => env('COMMAND', 'AUTHORIZATION'),
/** * order currency */'currency' => env('CURRENCY', 'USD'),
]

Routing (Payfort)

Next to use Payfort, you need three Routes:

  1. Used to submit data from the front end to the backend.
  2. The second if the payment is successfuly.
  3. For redirecting if payfort response with error.
<?php// App\Config\payments.php// you can configure you callback routes here'payfort' => [
'callback_urls' => [
'error-page' => '', // redirection to error page'success-page' => '', // redirection to success page
],
// ...
]

you can access to Payment using Payment facade.

<?phpuseIlluminate\Http\Request;
Route::post('/payment', function (Request$request) {
// ...$merchant_reference = rand(0, getrandmax());
return Payment::use('payfort', $merchant_reference)->pay();
});

Required Parameters (Payfort)

Each request should be contains amount, email, hold_name

<?php$request->add([
'amount' => '',
'email' => '',
'hold_name' => ''
])

Payfort Apple Pay

You can use this package to handle the apple pay transactions via Payfort.

Configuration (Payfort Apple Pay)

you should add payfort apple pay credentiels to the app/confing/payments/php

<?php'payfort_apple_pay' => [
'sandboxMode' => true,
'language' => 'ar',
'merchantIdentifier' => '',
'accessCode' => '',
'SHARequestPhrase' => '',
'SHAResponsePhrase' => '',
'SHAType' => 'sha256',
'command' => 'PURCHASE',
'currency' => 'SAR',
]

Usage (Payfort Apple Pay)

To pay via Payfort apple pay is the the same as before you can use.

return Payment::use('payfort_apple_pay', $merchant_reference)->pay();

Required Parameters (Payfort Apple Pay)

The parameters required to be attached in your request payload to use Apple Pay is:

{
"apple_data": "",
"apple_header": {
"apple_ephemeralPublicKey": "",
"apple_publicKeyHash": "",
"apple_transactionId": "-"
},
"apple_paymentMethod": {
"apple_displayName": "",
"apple_network": "",
"apple_type": ""
},
"apple_signature": "",
"apple_version": "EC_v1",
"digital_wallet": "APPLE_PAY",
//package requirements"amount": 240,
// optional data if you need them"email": "",
"name": "",
"phone": ""
}

Pay With ReactNative

if you want to process the payment via webView in your react native mobile app

functiononNavigationStateChange(){// this method will be invoked each time the url changed}functiononMessage(){// here you can handle the final result}return(<WebViewsource={{html: html()}}onNavigationStateChange={onNavigationStateChange}javaScriptEnabled={true}domStorageEnabled={true}onMessage={onMessage}startInLoadingState/>);

In your php controller or route you can use

<?phpreturn Payment::use('payfort')->viaReactNative()->pay();

Payfort Events

As we know payfort can notify the merchant, for all events you subscribed for on an transaction. we need the first to add your callback into payfort dashboard, then you can implement this callback in your application

<?phpuseIlluminate\Http\Request;
Route::match(['get', 'post'], '/payfort-callback', function(Request$request) {
return Payment::use('payfort')->webHook();
});

This webHook can invoks two events build in. There are two events available for you to listen for.

EventFiredParameter
Devinweb\Payment\Events\SuccessTransactionwhen payfort response with the successful dataarray success response
Devinweb\Payment\Events\FailTransactionwhen payfort response with the Fail dataarray fail_response

exemple

check this repos payment-boilerplate.

Success response

[
"response_code" => "18000",
"card_number" => "400555******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "d641d71c13da959cba92371d70c686b602e2b62796dfca5286c760c6b5d9e3b1",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "عملية ناجحة",
"merchant_reference" => "278245857",
"token_name" => "dced12c0eeeb444185dcc450b917d987",
"return_url" => "YOUR_RETURN_URL"
"card_bin" => "400555"
"status" => "18"
]

Fail response

[
"response_code" => "00016",
"card_number" => "400550******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "signature_value",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "رقم البطاقة غير صحيح",
"merchant_reference" => "158151963",
"return_url" => "YOUR_RETURN_URL",
"status" => "00",
"error_msg" => "رقم البطاقة غير صحيح",
]

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Credits

About Devinweb

Devinweb is a web app agency in Tetouan, Morocco. our website.

License

The MIT License (MIT). Please see License File for more information.

About

Pay with payfort gateway in MENA.

Topics

Resources

Contributing

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Very short description of the package

Payment Package provide a simple way to handle payment gateway in MENA.

Installation

This package requires Laravel 5.4 or higher. if your laravel is > 5.4 you can skip the two steps (2, 3) below (Package Auto Discovery 5.5+).

  1. You can install the package via composer:
composer require devinweb/payment
  1. Open your config/app.php and add the following to the providers array
Devinweb\Payment\PaymentServiceProvider::class,
  1. In the same config/app.php and add the following to the aliases array:
'Payment' => Devinweb\Payment\Facades\Payment::class,
  1. Run the command below to publish the package config file config/payfort-payment.php:
php artisan vendor:publish --provider="Devinweb\Payment\PaymentServiceProvider" --tag="config"

Payfort

To pay via payfort it's simple, but before process the payment it's requiered to setup your FrontEnd, you can check the payment-boilerplate Repository.

Configuration (Payfort)

Now you can add your payfort credentiels to app/config/payments/php

<?php'payfort' => [
'callback_urls' => [
'error-page' => '/api/error',
'success-page' => '/api/success',
],
'sandboxMode' => env('PAYFORT_SAND_BOX_MODE', true),
/** * language used to specify the response language returned from payfort */'language' => env('LANGUAGE', 'en'),
/** * your Merchant Identifier account (mid) */'merchantIdentifier' => env('MERCHANT_IDENTIFIER', ''),
/** * your access code */'accessCode' => env('ACCESS_CODE', ''),
/** * SHA Request passphrase */'SHARequestPhrase' => env('SHA_REQUEST_PASSPHRASE', ''),
/** * SHA Response passphrase */'SHAResponsePhrase' => env('SHA_RESPONSE_PASSPHRASE', ''),
/** * SHA Type (Hash Algorith) * expected Values ("sha1", "sha256", "sha512") */'SHAType' => env('SHA_TYPE', 'sha256'),
/** * command * expected Values ("AUTHORIZATION", "PURCHASE") */'command' => env('COMMAND', 'AUTHORIZATION'),
/** * order currency */'currency' => env('CURRENCY', 'USD'),
]

Routing (Payfort)

Next to use Payfort, you need three Routes:

  1. Used to submit data from the front end to the backend.
  2. The second if the payment is successfuly.
  3. For redirecting if payfort response with error.
<?php// App\Config\payments.php// you can configure you callback routes here'payfort' => [
'callback_urls' => [
'error-page' => '', // redirection to error page'success-page' => '', // redirection to success page
],
// ...
]

you can access to Payment using Payment facade.

<?phpuseIlluminate\Http\Request;
Route::post('/payment', function (Request$request) {
// ...$merchant_reference = rand(0, getrandmax());
return Payment::use('payfort', $merchant_reference)->pay();
});

Required Parameters (Payfort)

Each request should be contains amount, email, hold_name

<?php$request->add([
'amount' => '',
'email' => '',
'hold_name' => ''
])

Payfort Apple Pay

You can use this package to handle the apple pay transactions via Payfort.

Configuration (Payfort Apple Pay)

you should add payfort apple pay credentiels to the app/confing/payments/php

<?php'payfort_apple_pay' => [
'sandboxMode' => true,
'language' => 'ar',
'merchantIdentifier' => '',
'accessCode' => '',
'SHARequestPhrase' => '',
'SHAResponsePhrase' => '',
'SHAType' => 'sha256',
'command' => 'PURCHASE',
'currency' => 'SAR',
]

Usage (Payfort Apple Pay)

To pay via Payfort apple pay is the the same as before you can use.

return Payment::use('payfort_apple_pay', $merchant_reference)->pay();

Required Parameters (Payfort Apple Pay)

The parameters required to be attached in your request payload to use Apple Pay is:

{
"apple_data": "",
"apple_header": {
"apple_ephemeralPublicKey": "",
"apple_publicKeyHash": "",
"apple_transactionId": "-"
},
"apple_paymentMethod": {
"apple_displayName": "",
"apple_network": "",
"apple_type": ""
},
"apple_signature": "",
"apple_version": "EC_v1",
"digital_wallet": "APPLE_PAY",
//package requirements"amount": 240,
// optional data if you need them"email": "",
"name": "",
"phone": ""
}

Pay With ReactNative

if you want to process the payment via webView in your react native mobile app

functiononNavigationStateChange(){// this method will be invoked each time the url changed}functiononMessage(){// here you can handle the final result}return(<WebViewsource={{html: html()}}onNavigationStateChange={onNavigationStateChange}javaScriptEnabled={true}domStorageEnabled={true}onMessage={onMessage}startInLoadingState/>);

In your php controller or route you can use

<?phpreturn Payment::use('payfort')->viaReactNative()->pay();

Payfort Events

As we know payfort can notify the merchant, for all events you subscribed for on an transaction. we need the first to add your callback into payfort dashboard, then you can implement this callback in your application

<?phpuseIlluminate\Http\Request;
Route::match(['get', 'post'], '/payfort-callback', function(Request$request) {
return Payment::use('payfort')->webHook();
});

This webHook can invoks two events build in. There are two events available for you to listen for.

EventFiredParameter
Devinweb\Payment\Events\SuccessTransactionwhen payfort response with the successful dataarray success response
Devinweb\Payment\Events\FailTransactionwhen payfort response with the Fail dataarray fail_response

exemple

check this repos payment-boilerplate.

Success response

[
"response_code" => "18000",
"card_number" => "400555******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "d641d71c13da959cba92371d70c686b602e2b62796dfca5286c760c6b5d9e3b1",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "عملية ناجحة",
"merchant_reference" => "278245857",
"token_name" => "dced12c0eeeb444185dcc450b917d987",
"return_url" => "YOUR_RETURN_URL"
"card_bin" => "400555"
"status" => "18"
]

Fail response

[
"response_code" => "00016",
"card_number" => "400550******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "signature_value",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "رقم البطاقة غير صحيح",
"merchant_reference" => "158151963",
"return_url" => "YOUR_RETURN_URL",
"status" => "00",
"error_msg" => "رقم البطاقة غير صحيح",
]

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Credits

About Devinweb

Devinweb is a web app agency in Tetouan, Morocco. our website.

License

The MIT License (MIT). Please see License File for more information.

About

Pay with payfort gateway in MENA.

Topics

Resources

Contributing

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Very short description of the package

Payment Package provide a simple way to handle payment gateway in MENA.

Installation

This package requires Laravel 5.4 or higher. if your laravel is > 5.4 you can skip the two steps (2, 3) below (Package Auto Discovery 5.5+).

  1. You can install the package via composer:
composer require devinweb/payment
  1. Open your config/app.php and add the following to the providers array
Devinweb\Payment\PaymentServiceProvider::class,
  1. In the same config/app.php and add the following to the aliases array:
'Payment' => Devinweb\Payment\Facades\Payment::class,
  1. Run the command below to publish the package config file config/payfort-payment.php:
php artisan vendor:publish --provider="Devinweb\Payment\PaymentServiceProvider" --tag="config"

Payfort

To pay via payfort it's simple, but before process the payment it's requiered to setup your FrontEnd, you can check the payment-boilerplate Repository.

Configuration (Payfort)

Now you can add your payfort credentiels to app/config/payments/php

<?php'payfort' => [
'callback_urls' => [
'error-page' => '/api/error',
'success-page' => '/api/success',
],
'sandboxMode' => env('PAYFORT_SAND_BOX_MODE', true),
/** * language used to specify the response language returned from payfort */'language' => env('LANGUAGE', 'en'),
/** * your Merchant Identifier account (mid) */'merchantIdentifier' => env('MERCHANT_IDENTIFIER', ''),
/** * your access code */'accessCode' => env('ACCESS_CODE', ''),
/** * SHA Request passphrase */'SHARequestPhrase' => env('SHA_REQUEST_PASSPHRASE', ''),
/** * SHA Response passphrase */'SHAResponsePhrase' => env('SHA_RESPONSE_PASSPHRASE', ''),
/** * SHA Type (Hash Algorith) * expected Values ("sha1", "sha256", "sha512") */'SHAType' => env('SHA_TYPE', 'sha256'),
/** * command * expected Values ("AUTHORIZATION", "PURCHASE") */'command' => env('COMMAND', 'AUTHORIZATION'),
/** * order currency */'currency' => env('CURRENCY', 'USD'),
]

Routing (Payfort)

Next to use Payfort, you need three Routes:

  1. Used to submit data from the front end to the backend.
  2. The second if the payment is successfuly.
  3. For redirecting if payfort response with error.
<?php// App\Config\payments.php// you can configure you callback routes here'payfort' => [
'callback_urls' => [
'error-page' => '', // redirection to error page'success-page' => '', // redirection to success page
],
// ...
]

you can access to Payment using Payment facade.

<?phpuseIlluminate\Http\Request;
Route::post('/payment', function (Request$request) {
// ...$merchant_reference = rand(0, getrandmax());
return Payment::use('payfort', $merchant_reference)->pay();
});

Required Parameters (Payfort)

Each request should be contains amount, email, hold_name

<?php$request->add([
'amount' => '',
'email' => '',
'hold_name' => ''
])

Payfort Apple Pay

You can use this package to handle the apple pay transactions via Payfort.

Configuration (Payfort Apple Pay)

you should add payfort apple pay credentiels to the app/confing/payments/php

<?php'payfort_apple_pay' => [
'sandboxMode' => true,
'language' => 'ar',
'merchantIdentifier' => '',
'accessCode' => '',
'SHARequestPhrase' => '',
'SHAResponsePhrase' => '',
'SHAType' => 'sha256',
'command' => 'PURCHASE',
'currency' => 'SAR',
]

Usage (Payfort Apple Pay)

To pay via Payfort apple pay is the the same as before you can use.

return Payment::use('payfort_apple_pay', $merchant_reference)->pay();

Required Parameters (Payfort Apple Pay)

The parameters required to be attached in your request payload to use Apple Pay is:

{
"apple_data": "",
"apple_header": {
"apple_ephemeralPublicKey": "",
"apple_publicKeyHash": "",
"apple_transactionId": "-"
},
"apple_paymentMethod": {
"apple_displayName": "",
"apple_network": "",
"apple_type": ""
},
"apple_signature": "",
"apple_version": "EC_v1",
"digital_wallet": "APPLE_PAY",
//package requirements"amount": 240,
// optional data if you need them"email": "",
"name": "",
"phone": ""
}

Pay With ReactNative

if you want to process the payment via webView in your react native mobile app

functiononNavigationStateChange(){// this method will be invoked each time the url changed}functiononMessage(){// here you can handle the final result}return(<WebViewsource={{html: html()}}onNavigationStateChange={onNavigationStateChange}javaScriptEnabled={true}domStorageEnabled={true}onMessage={onMessage}startInLoadingState/>);

In your php controller or route you can use

<?phpreturn Payment::use('payfort')->viaReactNative()->pay();

Payfort Events

As we know payfort can notify the merchant, for all events you subscribed for on an transaction. we need the first to add your callback into payfort dashboard, then you can implement this callback in your application

<?phpuseIlluminate\Http\Request;
Route::match(['get', 'post'], '/payfort-callback', function(Request$request) {
return Payment::use('payfort')->webHook();
});

This webHook can invoks two events build in. There are two events available for you to listen for.

EventFiredParameter
Devinweb\Payment\Events\SuccessTransactionwhen payfort response with the successful dataarray success response
Devinweb\Payment\Events\FailTransactionwhen payfort response with the Fail dataarray fail_response

exemple

check this repos payment-boilerplate.

Success response

[
"response_code" => "18000",
"card_number" => "400555******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "d641d71c13da959cba92371d70c686b602e2b62796dfca5286c760c6b5d9e3b1",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "عملية ناجحة",
"merchant_reference" => "278245857",
"token_name" => "dced12c0eeeb444185dcc450b917d987",
"return_url" => "YOUR_RETURN_URL"
"card_bin" => "400555"
"status" => "18"
]

Fail response

[
"response_code" => "00016",
"card_number" => "400550******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "signature_value",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "رقم البطاقة غير صحيح",
"merchant_reference" => "158151963",
"return_url" => "YOUR_RETURN_URL",
"status" => "00",
"error_msg" => "رقم البطاقة غير صحيح",
]

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Credits

About Devinweb

Devinweb is a web app agency in Tetouan, Morocco. our website.

License

The MIT License (MIT). Please see License File for more information.

About

Pay with payfort gateway in MENA.

Topics

Resources

Contributing

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Very short description of the package

Payment Package provide a simple way to handle payment gateway in MENA.

Installation

This package requires Laravel 5.4 or higher. if your laravel is > 5.4 you can skip the two steps (2, 3) below (Package Auto Discovery 5.5+).

  1. You can install the package via composer:
composer require devinweb/payment
  1. Open your config/app.php and add the following to the providers array
Devinweb\Payment\PaymentServiceProvider::class,
  1. In the same config/app.php and add the following to the aliases array:
'Payment' => Devinweb\Payment\Facades\Payment::class,
  1. Run the command below to publish the package config file config/payfort-payment.php:
php artisan vendor:publish --provider="Devinweb\Payment\PaymentServiceProvider" --tag="config"

Payfort

To pay via payfort it's simple, but before process the payment it's requiered to setup your FrontEnd, you can check the payment-boilerplate Repository.

Configuration (Payfort)

Now you can add your payfort credentiels to app/config/payments/php

<?php'payfort' => [
'callback_urls' => [
'error-page' => '/api/error',
'success-page' => '/api/success',
],
'sandboxMode' => env('PAYFORT_SAND_BOX_MODE', true),
/** * language used to specify the response language returned from payfort */'language' => env('LANGUAGE', 'en'),
/** * your Merchant Identifier account (mid) */'merchantIdentifier' => env('MERCHANT_IDENTIFIER', ''),
/** * your access code */'accessCode' => env('ACCESS_CODE', ''),
/** * SHA Request passphrase */'SHARequestPhrase' => env('SHA_REQUEST_PASSPHRASE', ''),
/** * SHA Response passphrase */'SHAResponsePhrase' => env('SHA_RESPONSE_PASSPHRASE', ''),
/** * SHA Type (Hash Algorith) * expected Values ("sha1", "sha256", "sha512") */'SHAType' => env('SHA_TYPE', 'sha256'),
/** * command * expected Values ("AUTHORIZATION", "PURCHASE") */'command' => env('COMMAND', 'AUTHORIZATION'),
/** * order currency */'currency' => env('CURRENCY', 'USD'),
]

Routing (Payfort)

Next to use Payfort, you need three Routes:

  1. Used to submit data from the front end to the backend.
  2. The second if the payment is successfuly.
  3. For redirecting if payfort response with error.
<?php// App\Config\payments.php// you can configure you callback routes here'payfort' => [
'callback_urls' => [
'error-page' => '', // redirection to error page'success-page' => '', // redirection to success page
],
// ...
]

you can access to Payment using Payment facade.

<?phpuseIlluminate\Http\Request;
Route::post('/payment', function (Request$request) {
// ...$merchant_reference = rand(0, getrandmax());
return Payment::use('payfort', $merchant_reference)->pay();
});

Required Parameters (Payfort)

Each request should be contains amount, email, hold_name

<?php$request->add([
'amount' => '',
'email' => '',
'hold_name' => ''
])

Payfort Apple Pay

You can use this package to handle the apple pay transactions via Payfort.

Configuration (Payfort Apple Pay)

you should add payfort apple pay credentiels to the app/confing/payments/php

<?php'payfort_apple_pay' => [
'sandboxMode' => true,
'language' => 'ar',
'merchantIdentifier' => '',
'accessCode' => '',
'SHARequestPhrase' => '',
'SHAResponsePhrase' => '',
'SHAType' => 'sha256',
'command' => 'PURCHASE',
'currency' => 'SAR',
]

Usage (Payfort Apple Pay)

To pay via Payfort apple pay is the the same as before you can use.

return Payment::use('payfort_apple_pay', $merchant_reference)->pay();

Required Parameters (Payfort Apple Pay)

The parameters required to be attached in your request payload to use Apple Pay is:

{
"apple_data": "",
"apple_header": {
"apple_ephemeralPublicKey": "",
"apple_publicKeyHash": "",
"apple_transactionId": "-"
},
"apple_paymentMethod": {
"apple_displayName": "",
"apple_network": "",
"apple_type": ""
},
"apple_signature": "",
"apple_version": "EC_v1",
"digital_wallet": "APPLE_PAY",
//package requirements"amount": 240,
// optional data if you need them"email": "",
"name": "",
"phone": ""
}

Pay With ReactNative

if you want to process the payment via webView in your react native mobile app

functiononNavigationStateChange(){// this method will be invoked each time the url changed}functiononMessage(){// here you can handle the final result}return(<WebViewsource={{html: html()}}onNavigationStateChange={onNavigationStateChange}javaScriptEnabled={true}domStorageEnabled={true}onMessage={onMessage}startInLoadingState/>);

In your php controller or route you can use

<?phpreturn Payment::use('payfort')->viaReactNative()->pay();

Payfort Events

As we know payfort can notify the merchant, for all events you subscribed for on an transaction. we need the first to add your callback into payfort dashboard, then you can implement this callback in your application

<?phpuseIlluminate\Http\Request;
Route::match(['get', 'post'], '/payfort-callback', function(Request$request) {
return Payment::use('payfort')->webHook();
});

This webHook can invoks two events build in. There are two events available for you to listen for.

EventFiredParameter
Devinweb\Payment\Events\SuccessTransactionwhen payfort response with the successful dataarray success response
Devinweb\Payment\Events\FailTransactionwhen payfort response with the Fail dataarray fail_response

exemple

check this repos payment-boilerplate.

Success response

[
"response_code" => "18000",
"card_number" => "400555******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "d641d71c13da959cba92371d70c686b602e2b62796dfca5286c760c6b5d9e3b1",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "عملية ناجحة",
"merchant_reference" => "278245857",
"token_name" => "dced12c0eeeb444185dcc450b917d987",
"return_url" => "YOUR_RETURN_URL"
"card_bin" => "400555"
"status" => "18"
]

Fail response

[
"response_code" => "00016",
"card_number" => "400550******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "signature_value",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "رقم البطاقة غير صحيح",
"merchant_reference" => "158151963",
"return_url" => "YOUR_RETURN_URL",
"status" => "00",
"error_msg" => "رقم البطاقة غير صحيح",
]

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Credits

About Devinweb

Devinweb is a web app agency in Tetouan, Morocco. our website.

License

The MIT License (MIT). Please see License File for more information.

About

Pay with payfort gateway in MENA.

Topics

Resources

Contributing

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Very short description of the package

Payment Package provide a simple way to handle payment gateway in MENA.

Installation

This package requires Laravel 5.4 or higher. if your laravel is > 5.4 you can skip the two steps (2, 3) below (Package Auto Discovery 5.5+).

  1. You can install the package via composer:
composer require devinweb/payment
  1. Open your config/app.php and add the following to the providers array
Devinweb\Payment\PaymentServiceProvider::class,
  1. In the same config/app.php and add the following to the aliases array:
'Payment' => Devinweb\Payment\Facades\Payment::class,
  1. Run the command below to publish the package config file config/payfort-payment.php:
php artisan vendor:publish --provider="Devinweb\Payment\PaymentServiceProvider" --tag="config"

Payfort

To pay via payfort it's simple, but before process the payment it's requiered to setup your FrontEnd, you can check the payment-boilerplate Repository.

Configuration (Payfort)

Now you can add your payfort credentiels to app/config/payments/php

<?php'payfort' => [
'callback_urls' => [
'error-page' => '/api/error',
'success-page' => '/api/success',
],
'sandboxMode' => env('PAYFORT_SAND_BOX_MODE', true),
/** * language used to specify the response language returned from payfort */'language' => env('LANGUAGE', 'en'),
/** * your Merchant Identifier account (mid) */'merchantIdentifier' => env('MERCHANT_IDENTIFIER', ''),
/** * your access code */'accessCode' => env('ACCESS_CODE', ''),
/** * SHA Request passphrase */'SHARequestPhrase' => env('SHA_REQUEST_PASSPHRASE', ''),
/** * SHA Response passphrase */'SHAResponsePhrase' => env('SHA_RESPONSE_PASSPHRASE', ''),
/** * SHA Type (Hash Algorith) * expected Values ("sha1", "sha256", "sha512") */'SHAType' => env('SHA_TYPE', 'sha256'),
/** * command * expected Values ("AUTHORIZATION", "PURCHASE") */'command' => env('COMMAND', 'AUTHORIZATION'),
/** * order currency */'currency' => env('CURRENCY', 'USD'),
]

Routing (Payfort)

Next to use Payfort, you need three Routes:

  1. Used to submit data from the front end to the backend.
  2. The second if the payment is successfuly.
  3. For redirecting if payfort response with error.
<?php// App\Config\payments.php// you can configure you callback routes here'payfort' => [
'callback_urls' => [
'error-page' => '', // redirection to error page'success-page' => '', // redirection to success page
],
// ...
]

you can access to Payment using Payment facade.

<?phpuseIlluminate\Http\Request;
Route::post('/payment', function (Request$request) {
// ...$merchant_reference = rand(0, getrandmax());
return Payment::use('payfort', $merchant_reference)->pay();
});

Required Parameters (Payfort)

Each request should be contains amount, email, hold_name

<?php$request->add([
'amount' => '',
'email' => '',
'hold_name' => ''
])

Payfort Apple Pay

You can use this package to handle the apple pay transactions via Payfort.

Configuration (Payfort Apple Pay)

you should add payfort apple pay credentiels to the app/confing/payments/php

<?php'payfort_apple_pay' => [
'sandboxMode' => true,
'language' => 'ar',
'merchantIdentifier' => '',
'accessCode' => '',
'SHARequestPhrase' => '',
'SHAResponsePhrase' => '',
'SHAType' => 'sha256',
'command' => 'PURCHASE',
'currency' => 'SAR',
]

Usage (Payfort Apple Pay)

To pay via Payfort apple pay is the the same as before you can use.

return Payment::use('payfort_apple_pay', $merchant_reference)->pay();

Required Parameters (Payfort Apple Pay)

The parameters required to be attached in your request payload to use Apple Pay is:

{
"apple_data": "",
"apple_header": {
"apple_ephemeralPublicKey": "",
"apple_publicKeyHash": "",
"apple_transactionId": "-"
},
"apple_paymentMethod": {
"apple_displayName": "",
"apple_network": "",
"apple_type": ""
},
"apple_signature": "",
"apple_version": "EC_v1",
"digital_wallet": "APPLE_PAY",
//package requirements"amount": 240,
// optional data if you need them"email": "",
"name": "",
"phone": ""
}

Pay With ReactNative

if you want to process the payment via webView in your react native mobile app

functiononNavigationStateChange(){// this method will be invoked each time the url changed}functiononMessage(){// here you can handle the final result}return(<WebViewsource={{html: html()}}onNavigationStateChange={onNavigationStateChange}javaScriptEnabled={true}domStorageEnabled={true}onMessage={onMessage}startInLoadingState/>);

In your php controller or route you can use

<?phpreturn Payment::use('payfort')->viaReactNative()->pay();

Payfort Events

As we know payfort can notify the merchant, for all events you subscribed for on an transaction. we need the first to add your callback into payfort dashboard, then you can implement this callback in your application

<?phpuseIlluminate\Http\Request;
Route::match(['get', 'post'], '/payfort-callback', function(Request$request) {
return Payment::use('payfort')->webHook();
});

This webHook can invoks two events build in. There are two events available for you to listen for.

EventFiredParameter
Devinweb\Payment\Events\SuccessTransactionwhen payfort response with the successful dataarray success response
Devinweb\Payment\Events\FailTransactionwhen payfort response with the Fail dataarray fail_response

exemple

check this repos payment-boilerplate.

Success response

[
"response_code" => "18000",
"card_number" => "400555******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "d641d71c13da959cba92371d70c686b602e2b62796dfca5286c760c6b5d9e3b1",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "عملية ناجحة",
"merchant_reference" => "278245857",
"token_name" => "dced12c0eeeb444185dcc450b917d987",
"return_url" => "YOUR_RETURN_URL"
"card_bin" => "400555"
"status" => "18"
]

Fail response

[
"response_code" => "00016",
"card_number" => "400550******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "signature_value",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "رقم البطاقة غير صحيح",
"merchant_reference" => "158151963",
"return_url" => "YOUR_RETURN_URL",
"status" => "00",
"error_msg" => "رقم البطاقة غير صحيح",
]

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Credits

About Devinweb

Devinweb is a web app agency in Tetouan, Morocco. our website.

License

The MIT License (MIT). Please see License File for more information.

About

Pay with payfort gateway in MENA.

Topics

Resources

Contributing

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Very short description of the package

Payment Package provide a simple way to handle payment gateway in MENA.

Installation

This package requires Laravel 5.4 or higher. if your laravel is > 5.4 you can skip the two steps (2, 3) below (Package Auto Discovery 5.5+).

  1. You can install the package via composer:
composer require devinweb/payment
  1. Open your config/app.php and add the following to the providers array
Devinweb\Payment\PaymentServiceProvider::class,
  1. In the same config/app.php and add the following to the aliases array:
'Payment' => Devinweb\Payment\Facades\Payment::class,
  1. Run the command below to publish the package config file config/payfort-payment.php:
php artisan vendor:publish --provider="Devinweb\Payment\PaymentServiceProvider" --tag="config"

Payfort

To pay via payfort it's simple, but before process the payment it's requiered to setup your FrontEnd, you can check the payment-boilerplate Repository.

Configuration (Payfort)

Now you can add your payfort credentiels to app/config/payments/php

<?php'payfort' => [
'callback_urls' => [
'error-page' => '/api/error',
'success-page' => '/api/success',
],
'sandboxMode' => env('PAYFORT_SAND_BOX_MODE', true),
/** * language used to specify the response language returned from payfort */'language' => env('LANGUAGE', 'en'),
/** * your Merchant Identifier account (mid) */'merchantIdentifier' => env('MERCHANT_IDENTIFIER', ''),
/** * your access code */'accessCode' => env('ACCESS_CODE', ''),
/** * SHA Request passphrase */'SHARequestPhrase' => env('SHA_REQUEST_PASSPHRASE', ''),
/** * SHA Response passphrase */'SHAResponsePhrase' => env('SHA_RESPONSE_PASSPHRASE', ''),
/** * SHA Type (Hash Algorith) * expected Values ("sha1", "sha256", "sha512") */'SHAType' => env('SHA_TYPE', 'sha256'),
/** * command * expected Values ("AUTHORIZATION", "PURCHASE") */'command' => env('COMMAND', 'AUTHORIZATION'),
/** * order currency */'currency' => env('CURRENCY', 'USD'),
]

Routing (Payfort)

Next to use Payfort, you need three Routes:

  1. Used to submit data from the front end to the backend.
  2. The second if the payment is successfuly.
  3. For redirecting if payfort response with error.
<?php// App\Config\payments.php// you can configure you callback routes here'payfort' => [
'callback_urls' => [
'error-page' => '', // redirection to error page'success-page' => '', // redirection to success page
],
// ...
]

you can access to Payment using Payment facade.

<?phpuseIlluminate\Http\Request;
Route::post('/payment', function (Request$request) {
// ...$merchant_reference = rand(0, getrandmax());
return Payment::use('payfort', $merchant_reference)->pay();
});

Required Parameters (Payfort)

Each request should be contains amount, email, hold_name

<?php$request->add([
'amount' => '',
'email' => '',
'hold_name' => ''
])

Payfort Apple Pay

You can use this package to handle the apple pay transactions via Payfort.

Configuration (Payfort Apple Pay)

you should add payfort apple pay credentiels to the app/confing/payments/php

<?php'payfort_apple_pay' => [
'sandboxMode' => true,
'language' => 'ar',
'merchantIdentifier' => '',
'accessCode' => '',
'SHARequestPhrase' => '',
'SHAResponsePhrase' => '',
'SHAType' => 'sha256',
'command' => 'PURCHASE',
'currency' => 'SAR',
]

Usage (Payfort Apple Pay)

To pay via Payfort apple pay is the the same as before you can use.

return Payment::use('payfort_apple_pay', $merchant_reference)->pay();

Required Parameters (Payfort Apple Pay)

The parameters required to be attached in your request payload to use Apple Pay is:

{
"apple_data": "",
"apple_header": {
"apple_ephemeralPublicKey": "",
"apple_publicKeyHash": "",
"apple_transactionId": "-"
},
"apple_paymentMethod": {
"apple_displayName": "",
"apple_network": "",
"apple_type": ""
},
"apple_signature": "",
"apple_version": "EC_v1",
"digital_wallet": "APPLE_PAY",
//package requirements"amount": 240,
// optional data if you need them"email": "",
"name": "",
"phone": ""
}

Pay With ReactNative

if you want to process the payment via webView in your react native mobile app

functiononNavigationStateChange(){// this method will be invoked each time the url changed}functiononMessage(){// here you can handle the final result}return(<WebViewsource={{html: html()}}onNavigationStateChange={onNavigationStateChange}javaScriptEnabled={true}domStorageEnabled={true}onMessage={onMessage}startInLoadingState/>);

In your php controller or route you can use

<?phpreturn Payment::use('payfort')->viaReactNative()->pay();

Payfort Events

As we know payfort can notify the merchant, for all events you subscribed for on an transaction. we need the first to add your callback into payfort dashboard, then you can implement this callback in your application

<?phpuseIlluminate\Http\Request;
Route::match(['get', 'post'], '/payfort-callback', function(Request$request) {
return Payment::use('payfort')->webHook();
});

This webHook can invoks two events build in. There are two events available for you to listen for.

EventFiredParameter
Devinweb\Payment\Events\SuccessTransactionwhen payfort response with the successful dataarray success response
Devinweb\Payment\Events\FailTransactionwhen payfort response with the Fail dataarray fail_response

exemple

check this repos payment-boilerplate.

Success response

[
"response_code" => "18000",
"card_number" => "400555******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "d641d71c13da959cba92371d70c686b602e2b62796dfca5286c760c6b5d9e3b1",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "عملية ناجحة",
"merchant_reference" => "278245857",
"token_name" => "dced12c0eeeb444185dcc450b917d987",
"return_url" => "YOUR_RETURN_URL"
"card_bin" => "400555"
"status" => "18"
]

Fail response

[
"response_code" => "00016",
"card_number" => "400550******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "signature_value",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "رقم البطاقة غير صحيح",
"merchant_reference" => "158151963",
"return_url" => "YOUR_RETURN_URL",
"status" => "00",
"error_msg" => "رقم البطاقة غير صحيح",
]

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Credits

About Devinweb

Devinweb is a web app agency in Tetouan, Morocco. our website.

License

The MIT License (MIT). Please see License File for more information.

About

Pay with payfort gateway in MENA.

Topics

Resources

Contributing

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Very short description of the package

Payment Package provide a simple way to handle payment gateway in MENA.

Installation

This package requires Laravel 5.4 or higher. if your laravel is > 5.4 you can skip the two steps (2, 3) below (Package Auto Discovery 5.5+).

  1. You can install the package via composer:
composer require devinweb/payment
  1. Open your config/app.php and add the following to the providers array
Devinweb\Payment\PaymentServiceProvider::class,
  1. In the same config/app.php and add the following to the aliases array:
'Payment' => Devinweb\Payment\Facades\Payment::class,
  1. Run the command below to publish the package config file config/payfort-payment.php:
php artisan vendor:publish --provider="Devinweb\Payment\PaymentServiceProvider" --tag="config"

Payfort

To pay via payfort it's simple, but before process the payment it's requiered to setup your FrontEnd, you can check the payment-boilerplate Repository.

Configuration (Payfort)

Now you can add your payfort credentiels to app/config/payments/php

<?php'payfort' => [
'callback_urls' => [
'error-page' => '/api/error',
'success-page' => '/api/success',
],
'sandboxMode' => env('PAYFORT_SAND_BOX_MODE', true),
/** * language used to specify the response language returned from payfort */'language' => env('LANGUAGE', 'en'),
/** * your Merchant Identifier account (mid) */'merchantIdentifier' => env('MERCHANT_IDENTIFIER', ''),
/** * your access code */'accessCode' => env('ACCESS_CODE', ''),
/** * SHA Request passphrase */'SHARequestPhrase' => env('SHA_REQUEST_PASSPHRASE', ''),
/** * SHA Response passphrase */'SHAResponsePhrase' => env('SHA_RESPONSE_PASSPHRASE', ''),
/** * SHA Type (Hash Algorith) * expected Values ("sha1", "sha256", "sha512") */'SHAType' => env('SHA_TYPE', 'sha256'),
/** * command * expected Values ("AUTHORIZATION", "PURCHASE") */'command' => env('COMMAND', 'AUTHORIZATION'),
/** * order currency */'currency' => env('CURRENCY', 'USD'),
]

Routing (Payfort)

Next to use Payfort, you need three Routes:

  1. Used to submit data from the front end to the backend.
  2. The second if the payment is successfuly.
  3. For redirecting if payfort response with error.
<?php// App\Config\payments.php// you can configure you callback routes here'payfort' => [
'callback_urls' => [
'error-page' => '', // redirection to error page'success-page' => '', // redirection to success page
],
// ...
]

you can access to Payment using Payment facade.

<?phpuseIlluminate\Http\Request;
Route::post('/payment', function (Request$request) {
// ...$merchant_reference = rand(0, getrandmax());
return Payment::use('payfort', $merchant_reference)->pay();
});

Required Parameters (Payfort)

Each request should be contains amount, email, hold_name

<?php$request->add([
'amount' => '',
'email' => '',
'hold_name' => ''
])

Payfort Apple Pay

You can use this package to handle the apple pay transactions via Payfort.

Configuration (Payfort Apple Pay)

you should add payfort apple pay credentiels to the app/confing/payments/php

<?php'payfort_apple_pay' => [
'sandboxMode' => true,
'language' => 'ar',
'merchantIdentifier' => '',
'accessCode' => '',
'SHARequestPhrase' => '',
'SHAResponsePhrase' => '',
'SHAType' => 'sha256',
'command' => 'PURCHASE',
'currency' => 'SAR',
]

Usage (Payfort Apple Pay)

To pay via Payfort apple pay is the the same as before you can use.

return Payment::use('payfort_apple_pay', $merchant_reference)->pay();

Required Parameters (Payfort Apple Pay)

The parameters required to be attached in your request payload to use Apple Pay is:

{
"apple_data": "",
"apple_header": {
"apple_ephemeralPublicKey": "",
"apple_publicKeyHash": "",
"apple_transactionId": "-"
},
"apple_paymentMethod": {
"apple_displayName": "",
"apple_network": "",
"apple_type": ""
},
"apple_signature": "",
"apple_version": "EC_v1",
"digital_wallet": "APPLE_PAY",
//package requirements"amount": 240,
// optional data if you need them"email": "",
"name": "",
"phone": ""
}

Pay With ReactNative

if you want to process the payment via webView in your react native mobile app

functiononNavigationStateChange(){// this method will be invoked each time the url changed}functiononMessage(){// here you can handle the final result}return(<WebViewsource={{html: html()}}onNavigationStateChange={onNavigationStateChange}javaScriptEnabled={true}domStorageEnabled={true}onMessage={onMessage}startInLoadingState/>);

In your php controller or route you can use

<?phpreturn Payment::use('payfort')->viaReactNative()->pay();

Payfort Events

As we know payfort can notify the merchant, for all events you subscribed for on an transaction. we need the first to add your callback into payfort dashboard, then you can implement this callback in your application

<?phpuseIlluminate\Http\Request;
Route::match(['get', 'post'], '/payfort-callback', function(Request$request) {
return Payment::use('payfort')->webHook();
});

This webHook can invoks two events build in. There are two events available for you to listen for.

EventFiredParameter
Devinweb\Payment\Events\SuccessTransactionwhen payfort response with the successful dataarray success response
Devinweb\Payment\Events\FailTransactionwhen payfort response with the Fail dataarray fail_response

exemple

check this repos payment-boilerplate.

Success response

[
"response_code" => "18000",
"card_number" => "400555******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "d641d71c13da959cba92371d70c686b602e2b62796dfca5286c760c6b5d9e3b1",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "عملية ناجحة",
"merchant_reference" => "278245857",
"token_name" => "dced12c0eeeb444185dcc450b917d987",
"return_url" => "YOUR_RETURN_URL"
"card_bin" => "400555"
"status" => "18"
]

Fail response

[
"response_code" => "00016",
"card_number" => "400550******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "signature_value",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "رقم البطاقة غير صحيح",
"merchant_reference" => "158151963",
"return_url" => "YOUR_RETURN_URL",
"status" => "00",
"error_msg" => "رقم البطاقة غير صحيح",
]

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Credits

About Devinweb

Devinweb is a web app agency in Tetouan, Morocco. our website.

License

The MIT License (MIT). Please see License File for more information.

About

Pay with payfort gateway in MENA.

Topics

Resources

Contributing

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Very short description of the package

Payment Package provide a simple way to handle payment gateway in MENA.

Installation

This package requires Laravel 5.4 or higher. if your laravel is > 5.4 you can skip the two steps (2, 3) below (Package Auto Discovery 5.5+).

  1. You can install the package via composer:
composer require devinweb/payment
  1. Open your config/app.php and add the following to the providers array
Devinweb\Payment\PaymentServiceProvider::class,
  1. In the same config/app.php and add the following to the aliases array:
'Payment' => Devinweb\Payment\Facades\Payment::class,
  1. Run the command below to publish the package config file config/payfort-payment.php:
php artisan vendor:publish --provider="Devinweb\Payment\PaymentServiceProvider" --tag="config"

Payfort

To pay via payfort it's simple, but before process the payment it's requiered to setup your FrontEnd, you can check the payment-boilerplate Repository.

Configuration (Payfort)

Now you can add your payfort credentiels to app/config/payments/php

<?php'payfort' => [
'callback_urls' => [
'error-page' => '/api/error',
'success-page' => '/api/success',
],
'sandboxMode' => env('PAYFORT_SAND_BOX_MODE', true),
/** * language used to specify the response language returned from payfort */'language' => env('LANGUAGE', 'en'),
/** * your Merchant Identifier account (mid) */'merchantIdentifier' => env('MERCHANT_IDENTIFIER', ''),
/** * your access code */'accessCode' => env('ACCESS_CODE', ''),
/** * SHA Request passphrase */'SHARequestPhrase' => env('SHA_REQUEST_PASSPHRASE', ''),
/** * SHA Response passphrase */'SHAResponsePhrase' => env('SHA_RESPONSE_PASSPHRASE', ''),
/** * SHA Type (Hash Algorith) * expected Values ("sha1", "sha256", "sha512") */'SHAType' => env('SHA_TYPE', 'sha256'),
/** * command * expected Values ("AUTHORIZATION", "PURCHASE") */'command' => env('COMMAND', 'AUTHORIZATION'),
/** * order currency */'currency' => env('CURRENCY', 'USD'),
]

Routing (Payfort)

Next to use Payfort, you need three Routes:

  1. Used to submit data from the front end to the backend.
  2. The second if the payment is successfuly.
  3. For redirecting if payfort response with error.
<?php// App\Config\payments.php// you can configure you callback routes here'payfort' => [
'callback_urls' => [
'error-page' => '', // redirection to error page'success-page' => '', // redirection to success page
],
// ...
]

you can access to Payment using Payment facade.

<?phpuseIlluminate\Http\Request;
Route::post('/payment', function (Request$request) {
// ...$merchant_reference = rand(0, getrandmax());
return Payment::use('payfort', $merchant_reference)->pay();
});

Required Parameters (Payfort)

Each request should be contains amount, email, hold_name

<?php$request->add([
'amount' => '',
'email' => '',
'hold_name' => ''
])

Payfort Apple Pay

You can use this package to handle the apple pay transactions via Payfort.

Configuration (Payfort Apple Pay)

you should add payfort apple pay credentiels to the app/confing/payments/php

<?php'payfort_apple_pay' => [
'sandboxMode' => true,
'language' => 'ar',
'merchantIdentifier' => '',
'accessCode' => '',
'SHARequestPhrase' => '',
'SHAResponsePhrase' => '',
'SHAType' => 'sha256',
'command' => 'PURCHASE',
'currency' => 'SAR',
]

Usage (Payfort Apple Pay)

To pay via Payfort apple pay is the the same as before you can use.

return Payment::use('payfort_apple_pay', $merchant_reference)->pay();

Required Parameters (Payfort Apple Pay)

The parameters required to be attached in your request payload to use Apple Pay is:

{
"apple_data": "",
"apple_header": {
"apple_ephemeralPublicKey": "",
"apple_publicKeyHash": "",
"apple_transactionId": "-"
},
"apple_paymentMethod": {
"apple_displayName": "",
"apple_network": "",
"apple_type": ""
},
"apple_signature": "",
"apple_version": "EC_v1",
"digital_wallet": "APPLE_PAY",
//package requirements"amount": 240,
// optional data if you need them"email": "",
"name": "",
"phone": ""
}

Pay With ReactNative

if you want to process the payment via webView in your react native mobile app

functiononNavigationStateChange(){// this method will be invoked each time the url changed}functiononMessage(){// here you can handle the final result}return(<WebViewsource={{html: html()}}onNavigationStateChange={onNavigationStateChange}javaScriptEnabled={true}domStorageEnabled={true}onMessage={onMessage}startInLoadingState/>);

In your php controller or route you can use

<?phpreturn Payment::use('payfort')->viaReactNative()->pay();

Payfort Events

As we know payfort can notify the merchant, for all events you subscribed for on an transaction. we need the first to add your callback into payfort dashboard, then you can implement this callback in your application

<?phpuseIlluminate\Http\Request;
Route::match(['get', 'post'], '/payfort-callback', function(Request$request) {
return Payment::use('payfort')->webHook();
});

This webHook can invoks two events build in. There are two events available for you to listen for.

EventFiredParameter
Devinweb\Payment\Events\SuccessTransactionwhen payfort response with the successful dataarray success response
Devinweb\Payment\Events\FailTransactionwhen payfort response with the Fail dataarray fail_response

exemple

check this repos payment-boilerplate.

Success response

[
"response_code" => "18000",
"card_number" => "400555******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "d641d71c13da959cba92371d70c686b602e2b62796dfca5286c760c6b5d9e3b1",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "عملية ناجحة",
"merchant_reference" => "278245857",
"token_name" => "dced12c0eeeb444185dcc450b917d987",
"return_url" => "YOUR_RETURN_URL"
"card_bin" => "400555"
"status" => "18"
]

Fail response

[
"response_code" => "00016",
"card_number" => "400550******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "signature_value",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "رقم البطاقة غير صحيح",
"merchant_reference" => "158151963",
"return_url" => "YOUR_RETURN_URL",
"status" => "00",
"error_msg" => "رقم البطاقة غير صحيح",
]

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Credits

About Devinweb

Devinweb is a web app agency in Tetouan, Morocco. our website.

License

The MIT License (MIT). Please see License File for more information.

About

Pay with payfort gateway in MENA.

Topics

Resources

Contributing

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages