راهنمای احراز هویت
SDK از سه روش اصلی احراز هویت پشتیبانی میکند و تمام احراز هویت از طریق کلاسهای احراز هویت که رابط BaseAuth
را پیادهسازی میکنند، مدیریت میشود.
- توکن دسترسی شخصی - برای برنامههای شخصی و اختصاصی
- جریان کد مجوز - برای سناریوهای احراز هویت کاربر در پلتفرمهای Third-Party
- اعتبارنامههای کلاینت - برای برنامههای با ماهیت و دسترسی حقوقی
برای توضیحات بیشتر درمورد روشهای احراز هویت به سند احراز هویت در API باسلام مراجعه کنید.
فهرست مطالب
توکن دسترسی شخصی
در توسعه برنامههای شخصی برای یک غرفه و کاربر، بعد از دریافت توکن دسترسی از پنل توسعهدهندگان ، میتوانید مشخصات توکن دریافت شده را توسط PersonalToken
مدیریت کنید.
<?php
use Basalam\SDK\BasalamClient;
use Basalam\SDK\Auth\PersonalToken;
function personalTokenExample(): object
{
// مقداردهی اولیه با توکنهای موجود
$auth = new PersonalToken(
token: 'your_access_token',
refreshToken: 'your_refresh_token'
);
// ایجاد کلاینت احراز هویت شده
$client = new BasalamClient($auth);
// دریافت اطلاعات کاربر جاری
$user = $client->getCurrentUser();
return $user;
}
جریان کد مجوز (برای احراز هویت کاربر)
در زمان پیادهسازی یک برنامه Third-Party که نیازمند دریافت مجوز و دسترسی از کاربران است، بعد از ساخت کلاینت برنامه در پنل توسعهدهندگان ، از طریق کلاس AuthorizationCode
برای مدیریت فرآیند دریافت مجوز از کاربر اقدام کنید.
<?php
use Basalam\SDK\BasalamClient;
use Basalam\SDK\Auth\AuthorizationCode;
use Basalam\SDK\Auth\Scope;
// مرحله ۱: ایجاد شیء احراز هویت
$auth = new AuthorizationCode(
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
redirectUri: 'https://your-app.com/callback',
scopes: [
Scope::CUSTOMER_WALLET_READ,
Scope::CUSTOMER_ORDER_READ
]
);
// مرحله ۲: دریافت URL مجوز
$authUrl = $auth->getAuthorizationUrl(state: 'optional_state_parameter');
echo "Visit: {$authUrl}\n";
// مرحله ۳: تبادل کد با توکنها (بعد از دریافت کد از کاربر از آدرس برگشتی ثبتشده در کلاینت)
$tokenInfo = $auth->getToken(code: 'authorization_code_from_callback');
// مرحله ۴: ایجاد کلاینت احراز هویت شده
$client = new BasalamClient($auth);
مثال استفاده
<?php
// مثال با استفاده از Laravel
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redirect;
use Basalam\SDK\Auth\AuthorizationCode;
class AuthController extends Controller
{
public function login()
{
$auth = new AuthorizationCode(
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
redirectUri: 'https://your-app.com/callback'
);
$authUrl = $auth->getAuthorizationUrl(state: 'user_session_id');
return Redirect::to($authUrl);
}
public function callback(Request $request)
{
$code = $request->get('code');
$state = $request->get('state');
$auth = new AuthorizationCode(
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
redirectUri: 'https://your-app.com/callback'
);
// تبادل کد با توکنها
$tokenInfo = $auth->getToken(code: $code);
// ذخیره امن توکنها
// ... ذخیره $tokenInfo->accessToken, $tokenInfo->refreshToken
return 'Authentication successful!';
}
}
اعتبارنامه کلاینت
برای استفاده از APIهایی با ماهیت حقوقی مانند کیف پول، پس از احراز هویت کلاینت ساخته شده با grant_type="client_credentials"
با استفاده از کلاس ClientCredentials
برای استفاده از متدهای مربوطه اقدام کنید.
پیکربندی اولیه
<?php
use Basalam\SDK\BasalamClient;
use Basalam\SDK\Auth\ClientCredentials;
use Basalam\SDK\Auth\Scope;
// احراز هویت پایه
$auth = new ClientCredentials(
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
scopes: [
Scope::CUSTOMER_WALLET_READ,
Scope::VENDOR_PRODUCT_WRITE
]
);
// ایجاد کلاینت
$client = new BasalamClient($auth);
مثال استفاده
<?php
function clientCredentialsExample(): object
{
$auth = new ClientCredentials(
clientId: 'your-client-id',
clientSecret: 'your-client-secret'
);
$client = new BasalamClient($auth);
// دریافت موجودی کاربر
$balance = $client->getBalance(userId: 123);
return $balance;
}
مدیریت توکن
دریافت اطلاعات توکن
<?php
function tokenManagementExample(): object
{
$auth = new ClientCredentials(
clientId: 'your-client-id',
clientSecret: 'your-client-secret'
);
// دریافت توکن - اگر منقضی نشده باشد از توکن موجود استفاده میکند
$tokenInfo = $auth->getToken();
return $tokenInfo;
}
محدودههای دسترسی
محدودههای دسترسی تعریف میکنند که برنامه شما چه مجوزهایی دارد. علاوه بر سند دسترسیها، در SDK نیز لیست دسترسیها توسط کلاس Scope
فراهم شده است. محدودههای موجود شامل:
<?php
use Basalam\SDK\Auth\Scope;
// محدودههای رایج
Scope::CUSTOMER_WALLET_READ; // خواندن کیف پول مشتری
Scope::CUSTOMER_WALLET_WRITE; // نوشتن در کیف پول مشتری
Scope::VENDOR_PRODUCT_READ; // خواندن محصولات غرفهدار
Scope::VENDOR_PRODUCT_WRITE; // نوشتن محصولات غرفهدار
Scope::CUSTOMER_ORDER_READ; // خواندن سفارشات مشتری
Scope::CUSTOMER_ORDER_WRITE; // نوشتن سفارشات مشتری
استفاده از محدودهها
<?php
use Basalam\SDK\Auth\ClientCredentials;
use Basalam\SDK\Auth\Scope;
$auth = new ClientCredentials(
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
scopes: [
Scope::CUSTOMER_WALLET_READ,
Scope::VENDOR_PRODUCT_WRITE,
Scope::CUSTOMER_ORDER_READ
]
);