1. Go to this page and download the library: Download simplesquid/saloonphp-oauth library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
simplesquid / saloonphp-oauth example snippets
use Saloon\Http\Connector;
use Saloon\Traits\OAuth2\AuthorizationCodeGrant;
use SimpleSquid\SaloonOAuth\Concerns\HasAutoRefresh;
final class ExactOnlineConnector extends Connector
{
use AuthorizationCodeGrant;
use HasAutoRefresh;
public function __construct(private readonly int $userId) {}
protected function resolveTokenKey(): string
{
return "user:{$this->userId}:exact-online";
}
protected function defaultOauthConfig(): OAuthConfig
{
return OAuthConfig::make()
->setClientId(config('services.exact.client_id'))
->setClientSecret(config('services.exact.client_secret'))
->setRedirectUri(config('services.exact.redirect_uri'));
}
public function resolveBaseUrl(): string
{
return 'https://start.exactonline.nl/api';
}
}
use Saloon\Http\Connector;
use Saloon\Traits\OAuth2\ClientCredentialsGrant;
use SimpleSquid\SaloonOAuth\Concerns\HasClientCredentialsCache;
final class InternalApiConnector extends Connector
{
use ClientCredentialsGrant;
use HasClientCredentialsCache;
protected function defaultOauthConfig(): OAuthConfig
{
return OAuthConfig::make()
->setClientId(config('services.internal.client_id'))
->setClientSecret(config('services.internal.client_secret'));
}
public function resolveBaseUrl(): string
{
return 'https://api.internal.example.com';
}
}
use SimpleSquid\SaloonOAuth\Contracts\TokenStore;
public function callback(Request $request, TokenStore $store): RedirectResponse
{
$connector = new ExactOnlineConnector($request->user()->id);
$authenticator = $connector->getAccessToken(
code: $request->query('code'),
state: $request->query('state'),
expectedState: session('oauth_state'),
);
$store->put("user:{$request->user()->id}:exact-online", $authenticator);
return redirect()->route('dashboard');
}
$store->revoke("user:{$userId}:exact-online");
return [
// Database table name for token storage.
'table' => 'oauth_tokens',
// Eloquent model used by EloquentTokenStore.
'model' => \SimpleSquid\SaloonOAuth\Models\OAuthToken::class,
// Distributed lock settings. The cache store must implement LockProvider.
'lock' => [
'store' => null, // Cache store name (null = default). "file" does NOT support locking.
'ttl' => 30, // How long the lock is held before auto-releasing (seconds).
'wait' => 10, // How long to wait to acquire the lock (seconds).
],
// Seconds before actual expiry to trigger a proactive refresh.
'expiry_buffer' => 300,
];
namespace App\Models;
use SimpleSquid\SaloonOAuth\Models\OAuthToken;
class UserOAuthToken extends OAuthToken
{
public function user(): BelongsTo
{
return $this->belongsTo(User::class, 'user_id');
}
}