Payum for Laravel 5
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,
...
];
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
// ],
],
];
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/*'
];
}
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(),
]);
});
}
}
Route::get('payment', [
'as' => 'payment',
'uses' => 'PaymentController@capture',
]);
Route::any('payment/done/{payumToken}', [
'as' => 'payment.done',
'uses' => 'PaymentController@done',
]);
If you want use eloquent you need change config.php and create database
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' => []
],
];