A modern, easy and fluent way to allow your clients to pay with PayPal.
Via Composer
$ composer require hypnodev/larapal
Publish the configuration with command:
$ php artisan vendor:publish --provider="hypnodev\Larapal\LarapalServiceProvider"
Add these keys in your .env:
PAYPAL_MODE=sandbox
PAYPAL_SANDBOX_ID=
PAYPAL_SANDBOX_SECRET=
PAYPAL_PRODUCTION_ID=
PAYPAL_PRODUCTION_SECRET=
If you don't have yet credentials for PayPal API, please refer to Get Started - PayPal Developer
Add BillableWithPaypal
trait to your User model
<?php
namespace App;
use hypnodev\Larapal\Traits\BillableWithPaypal;
// ...
class User extends Authenticatable
{
use Notifiable, BillableWithPaypal;
// ...
}
This will add chargeWithPaypal
, subscribeWithPaypal
, getPaypalCurrency
, getShippingFields
to your user.
Then you can charge your user with method:
<?php
auth()->user()->chargeWithPaypal('Charge description', [ // Array of items
['name' => 'pkg base', 'description' => 'base package', 'price' => 10.00, 'tax' => 2]
]);
// If your charge has shipping, you need to add an extra param with name and amount
auth()->user()->chargeWithPaypal('Charge description', [ // Array of items
['name' => 'pkg base', 'description' => 'base package', 'price' => 10.00, 'tax' => 2]
], [ // Shipping
'name' => 'Courier name',
'amount' => 100.50,
'address' => [ // Optional, you can skip this key
'address' => '4178 Libby Street',
'city' => 'Hermosa Beach',
'state' => 'CA',
'postal_code' => '90254',
'country' => 'USA'
]
]);
Or for subscription:
auth()->user()->subscribeWithPaypal('Plan id');
You can create a plan under "App Center" in your PayPal Merchant Dashboard
If you need to charge user with another currency different from the configuration, you can override getPaypalCurrency
method:
<?php
namespace App;
use hypnodev\Larapal\Traits\BillableWithPaypal;
// ...
class User extends Authenticatable
{
use Notifiable, BillableWithPaypal;
// ...
/**
* @inheritDoc
*/
protected function getPaypalCurrency(): string
{
return 'USD';
}
}
You can set default shipping info with getShippingFields
method
<?php
namespace App;
use hypnodev\Larapal\Traits\BillableWithPaypal;
// ...
class User extends Authenticatable
{
use Notifiable, BillableWithPaypal;
// ...
/**
* @inheritDoc
*/
protected function getShippingFields(): array
{
return [
'address' => $this->shipping_address,
'city' => $this->shipping_city,
'state' => $this->shipping_state,
'postal_code' => $this->shipping_postal_code,
'country' => $this->shipping_country
];
}
}
Please see the changelog for more information on what has changed recently.
$ composer test
Please see contributing.md for details and a todolist.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
license. Please see the license file for more information.