ms_dizzy_ Öncelikle elinizde Paraşüt'ün admini dışında ikinici bir kullanıcı olsun. Oluşturma imkanınız varsa parasut-api@domain.com şeklinde ayrı bir mail oluşturabilirsiniz ya da mevcut herhangi bir emaili kullanabilirsiniz, sadece güvenli ellerde olduğundan emin olun. Paraşüt'ün müşteri panelinde Ayarlar > Kullanıcılar kısmında bu maili kullanıcı olarak davet edin, davet ederken tüm yetkileri tam olarak verin. Bu kullanıcı API kullanıcı olacak, bunu sadece siz bileceksiniz ve şifresinin değişmemesi gerekiyor. Değişirse uygulamada da değişmesi gerekir çünkü. Size ayrı bir kullanıcı açtırmamın sebebi bu. Şimdi artık token alabilirsiniz:
config/servcies.php içerisinde parasut anahtarı tanımlayın:
'parasut' => [
// Paraşüt'ün size vereceği client_id
'client_id' => env('PARASUT_CLIENT_ID', 'client_id'),
// Paraşüt'ün size vereceği client_secret
'client_secret' => env('PARASUT_CLIENT_SECRET', 'client_secret'),
//Davet ettiğiniz API kullanıcısının maili
'username' => env('PARASUT_USERNAME', 'parasut-api@domain.com'),
// Davet ettiğiniz API kullanıcısının Paraşüt şifresi
'password' => env('PARASUT_PASSWORD', '12345'),
// Paraşüt firma ID'si. Paraşüt panele girince üstte https://uygulama.parasut.com/12345/
// şeklinde gördüğünüz ID yani. Token alırken değil ama işlemlerde kullanıyorsunuz.
'company_id' => env('PARASUT_COMPANY_ID', '12345'),
],
use \Illuminate\Support\Facades\Http;
$response = Http::post('https://api.parasut.com/oauth/token', [
'client_id' => config('service.parasut.client_id') ,
'client_secret' => config('service.parasut.client_secret') ,
'username' => config('service.parasut.username') ,
'password' => config('service.parasut.password') ,
'grant_type' => 'password',
'redirect_uri' => 'urn:ietf:wg:oauth:2.0:oob',
]);
$tokenInfo = $response->json();
Eğer her şey yolunda giderse $tokenInfo şöyle bir array olacak:
[
"access_token" => "jHtKPpXxlOak9SX0sHC2bGSu0nEoTTF7"
"token_type" => "Bearer"
"expires_in" => 6200
"refresh_token" => "FTzUCjXnVnzXBzuSfdBwXuGfPjdkIj1i"
"scope" => "public"
"created_at" => 1620493602
]
Bu obje olarak tutmanızı sağlayacak bir tane sınıf oluşturabilirsiniz:
class ParasutToken
{
public function __construct(
public string $accessToken,
public string $tokenType,
public int $expiresIn,
public string $refreshToken,
public string $scope,
public int $createdAt,
)
{}
public static function createFromResponse(array $response): static
{
return new static(
$response['access_token'],
$response['token_type'],
$response['expires_in'],
$response['refresh_token'],
$response['scope'],
$response['created_at'],
);
}
public function isExpired(): bool
{
return Date::createFromTimestamp($this->createdAt)
->addHours(2)
->isPast();
}
}
Şöyle kullanırsınız:
$response = Http::post('https://api.parasut.com/oauth/token', [
'client_id' => config('service.parasut.client_id') ,
'client_secret' => config('service.parasut.client_secret') ,
'username' => config('service.parasut.username') ,
'password' => config('service.parasut.password') ,
'grant_type' => 'password',
'redirect_uri' => 'urn:ietf:wg:oauth:2.0:oob',
]);
$token = ParasutToken::createFromResponse($response->json());
Paraşüt işlemleri için de artık token ile istek atabilirsiniz. Mesela fatura oluşturma:
$url = 'https://api.parasut.com/'.config('services.parasut.company_id. '/sales_invoices';
$response = Http::withToken($token->accessToken)->post($url, [
'data' => [
'type' => 'sales_invoices',
'attributes' => [
'item_type' => 'invoice',
'description' => 'Açıklama',
...
]
]
]);