recca0120 / laravel-payum
Rich payment solutions for Laravel framework. Paypal, payex, authorize.net, be2bill, omnipay, recurring paymens, instant notifications and many more
Installs: 1 456
Dependents: 0
Suggesters: 0
Security: 0
Stars: 74
Watchers: 6
Forks: 26
Open Issues: 4
Requires
- php: >=5.5.9
- illuminate/database: ^5.1
- illuminate/events: ^5.1
- illuminate/filesystem: ^5.1
- illuminate/routing: ^5.1
- illuminate/session: ^5.1
- illuminate/support: ^5.1
- illuminate/view: ^5.1
- payum/core: ^1.3
- php-http/guzzle6-adapter: ^1.1
Requires (Dev)
- mockery/mockery: ~0.9.4
- nesbot/carbon: ~1.20
- phpunit/phpunit: ~4.8|~5.4
Suggests
- payum-tw/allpay: If you want to use allpay gateways
- payum-tw/esunbank: If you want to use esunbank gateways
- payum-tw/mypay: If you want to use mypay gateways
- payum/authorize-net-aim: If you want to use authorize.net gateway
- payum/be2bill: If you want to use be2bill gateway
- payum/omnipay-bridge: If you want to use omnipay provided gateways
- payum/payex: If you want to use payex gateway
- payum/paypal-express-checkout-nvp: If you want to use paypal express checkout nvp gateway
- payum/paypal-pro-checkout-nvp: If you want to use paypal pro checkout nvp gateway
- payum/stripe: If you want to use stripe gateways
README
Installing
To get the latest version of Laravel Exceptions, simply require the project using Composer:
composer require recca0120/laravel-payum
Instead, you may of course manually update your require block and run composer update
if you so choose:
{ "require": { "recca0120/laravel-payum": "^1.0.6" } }
Include the service provider within config/app.php
. The service povider is needed for the generator artisan command.
'providers' => [ ... Recca0120\LaravelPayum\LaravelPayumServiceProvider::class, ... ];
Config
return [ 'route' => [ 'prefix' => 'payment', 'as' => 'payment.', 'middleware' => ['web'], ], 'storage' => [ // options: eloquent, filesystem 'token' => 'filesystem', // options: eloquent, filesystem 'gatewayConfig' => 'filesystem', ], 'gatewayConfigs' => [ // 'customFactoryName' => [ // 'factory' => 'FactoryClass', // 'username' => 'username', // 'password' => 'password', // 'sandbox' => false // ], ], ];
VerifyCsrfToken
namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier; class VerifyCsrfToken extends BaseVerifier { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'payment/*' ]; }
Controller
namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Routing\Controller as BaseController; use Payum\Core\GatewayInterface; use Payum\Core\Model\PaymentInterface; use Payum\Core\Payum; use Payum\Core\Request\GetHumanStatus; use Payum\Core\Security\TokenInterface; use Payum\Core\Storage\StorageInterface; use Recca0120\LaravelPayum\Service\PayumService; class PaymentController extends BaseController { public function capture(PayumService $payumService) { return $payumService->capture('allpay', function ( PaymentInterface $payment, $gatewayName, StorageInterface $storage, Payum $payum ) { $payment->setNumber(uniqid()); $payment->setCurrencyCode('TWD'); $payment->setTotalAmount(2000); $payment->setDescription('A description'); $payment->setClientId('anId'); $payment->setClientEmail('foo@example.com'); $payment->setDetails([ 'Items' => [ [ 'Name' => '歐付寶黑芝麻豆漿', 'Price' => (int) '2000', 'Currency' => '元', 'Quantity' => (int) '1', 'URL' => 'dedwed', ], ], ]); }); } public function done(PayumService $payumService, $payumToken) { return $payumService->done($payumToken, function ( GetHumanStatus $status, PaymentInterface $payment, GatewayInterface $gateway, TokenInterface $token ) { return response()->json([ 'status' => $status->getValue(), 'client' => [ 'id' => $payment->getClientId(), 'email' => $payment->getClientEmail(), ], 'number' => $payment->getNumber(), 'description' => $payment->getCurrencyCode(), 'total_amount' => $payment->getTotalAmount(), 'currency_code' => $payment->getCurrencyCode(), 'details' => $payment->getDetails(), ]); }); } }
Router
Route::get('payment', [ 'as' => 'payment', 'uses' => 'PaymentController@capture', ]); Route::any('payment/done/{payumToken}', [ 'as' => 'payment.done', 'uses' => 'PaymentController@done', ]);
Eloquent
If you want use eloquent you need change config.php and create database
Migrate
publish vendor
artisan vendor:publish --provider="Recca0120\LaravelPayum\LaravelPayumServiceProvider"
migrate
artisan migrate
modify config
return [ 'route' => [ 'prefix' => 'payment', 'as' => 'payment.', 'middleware' => ['web'], ], 'storage' => [ // options: eloquent, eloquent 'token' => 'filesystem', // options: eloquent, filesystem 'gatewayConfig' => 'filesystem', ], // 'customFactoryName' => [ // 'factory' => 'FactoryClass', // 'username' => 'username', // 'password' => 'password', // 'sandbox' => false // ], 'gatewayConfigs' => [ 'offline' => [] ], ];