Dokümantasyon
OAuth entegrasyonu, API referansı ve örnek kodlar.
1. Bi'öğrenci İle Giriş Yap (OAuth 2.0)
Uygulamanıza üye olmak veya giriş yapmak isteyen öğrencileri Bi'öğrenci üzerinden doğrulayın ve temel bilgilerine (ad, e-posta, öğrenci durumu vs.) güvenle erişin.
Entegrasyon Kod Örnekleri
Platformunuza uygun yöntemi seçin.
A Yetkilendirme Bağlantısı Oluşturun
Kullanıcının "Bi'öğrenci ile Giriş Yap" butonuna
tıkladığında yönlendirileceği adres. Gerekli yetkileri (scope)
aralarında boşluk bırakarak belirtebilirsiniz.
https://biogrenci.com/oauth/authorize?
response_type=code&
client_id={BİZE_AİT_CLIENT_ID}&
redirect_uri=https://siteniz.com/oauth/callback&
scope=profile%20student_status%20email&
state={GUVENLIK_KODU}
state parametresi CSRF
koruması için gereklidir.
B Access Token Alın
Kullanıcı hesabına giriş yapıp izin verdiğinde, verdiğiniz
dönüş URL'sine (redirect_uri) ?code=XYZ&state=...
parametreleriyle yönlendirilir. Code'u token ile takas edin.
curl -X POST "https://biogrenci.com/api/oauth/token" \
-H "Content-Type: application/json" \
-d '{
"grant_type": "authorization_code",
"client_id": "{BİZE_AİT_CLIENT_ID}",
"client_secret": "{BİZE_AİT_CLIENT_SECRET}",
"redirect_uri": "https://siteniz.com/oauth/callback",
"code": "{DONEN_CODE_DEGERI}"
}'
access_token (genellikle 24
saat geçerli) ve refresh_token döndürür.
C Token Yenileme (Refresh)
access_token'in süresi dolduğunda,
refresh_token ile yeni bir access token alın.
curl -X POST "https://biogrenci.com/api/oauth/token" \
-H "Content-Type: application/json" \
-d '{
"grant_type": "refresh_token",
"client_id": "{BİZE_AİT_CLIENT_ID}",
"client_secret": "{BİZE_AİT_CLIENT_SECRET}",
"refresh_token": "{ELINIZDEKI_REFRESH_TOKEN}"
}'
A PKCE Kodları Üretin (SPA & Mobil için Zorunlu)
Tarayıcı tabanlı uygulamalarda (React, Angular vs.) Secret
güvenlik riski olduğundan PKCE (Proof Key for Code Exchange) kullanılır. Arka
planda rastgele bir code_verifier dizgesi oluşturun ve SHA-256
algoritmasıyla şifreleyerek code_challenge elde edin.
B Yetkilendirme Bağlantısı
Bağlantıda PKCE parametreleri zorunludur.
https://biogrenci.com/oauth/authorize?
response_type=code&
client_id={BİZE_AİT_CLIENT_ID}&
redirect_uri=http://localhost:3000/callback&
scope=profile%20student_status&
state={GUVENLIK_KODU}&
code_challenge={PKCE_HAsh}&
code_challenge_method=S256
UserInfo (Kullanıcı Bilgisi) İsteği
Elde ettiğiniz access_token ile kullanıcının izin
verdiği bilgileri almak için istek atılır. Dönecek alanlar istediğiniz scope
(kapsam) türüne göre değişir.
curl -X GET "https://biogrenci.com/api/oauth/userinfo" \
-H "Authorization: Bearer {ELINIZDEKI_ACCESS_TOKEN}"
Yetki Kapsamları (Scopes) Nedir?
Giriş işlemi esnasında URL'deki scope= alanına
yazdığınız anahtar kelimelerdir. Veri güvenliği gereği sadece uygulamanızın **gerçekten ihtiyacı
olan** kapsamları istemelisiniz.
| Scope Adı | Hassasiyet | UserInfo Apisinden Dönecek Alanlar |
|---|---|---|
openid |
Düşük | sub (Benzersiz kullanıcı ID'si) |
profile |
Düşük |
name (Ad Soyad), first_name, last_name,
phone,
phone_verified, date_of_birth, gender,
avatar (Profil resmi linki)
|
email |
Düşük | email, email_verified |
student_status |
Orta | student_verified (Kişi sistemimizde hala doğrulanmış m?),
student_type (Örn: lisans, yüksek lisan vb.)
|
student |
Eski Sistem | Eski API'ler için student.is_verified olarak obje döndürür. |
education |
Orta |
Eğitim detaylarını education objesi altında döner: (university
isimleri, faculty, department, program isimleri, class_level vb.)
|
verification |
Hassas | verification.tckn (Türkiye Cumhuriyeti Kimlik Numarası gibi ekstra
özel bilgiler) |
opportunities.read |
Düşük | Bi'öğrenci fırsatlarını listelemeye ve bu token sahibi kullanıcı adına kod almaya yarayan yetki (Partner API). Detaylar aşağıda. |
Tam Kapsamlı (Profile, Email, Student_Status, Education) UserInfo Örneği
{
"sub": 1234,
"name": "Ahmet Yılmaz",
"first_name": "Ahmet",
"last_name": "Yılmaz",
"phone": "5551234567",
"phone_verified": true,
"date_of_birth": "2000-05-15",
"gender": "male",
"avatar": "https://s3.url/...",
"email": "ahmet@example.com",
"email_verified": true,
"student_verified": true,
"student_type": "lisans",
"education": {
"university": "Boğaziçi Üniversitesi",
"faculty": "Mühendislik Fakültesi",
"department": "Bilgisayar Mühendisliği",
"program": null,
"class_level": "3",
"education_type": "Örgün",
"education_duration_years": 4,
"city": {
"id": 34,
"name": "İstanbul"
}
}
}
2. Fırsatları Platformunuzda Listeleme (Partner API)
Uygulamanıza üye olan veya sizin sisteminizi kullanan gençlerin, platformunuzu terk etmeden aktif Bi'öğrenci fırsatlarını görebilmesi içindir.
opportunities.read scope'u
aktif edilmiş bir hesaba ait Access Token ile istek atması zorunludur.
Mevcut Uç Noktalar (Endpoints)
Base URL:https://biogrenci.com/api/partnerHeader:
Authorization: Bearer {token} (Sadece
Claim işlemi için zorunludur)
| Metod | Endpoint | Açıklama |
|---|---|---|
| GET | /opportunities |
Aktif fırsatların sayfalanmış (paginated) halini getirir. |
| GET | /opportunities/{id} |
Sadece belirtilen id'li fırsatın tüm metin ve kural detaylarını getirir. |
| GET | /opportunities/categories |
Sistemdeki kategori filtrelerini ID'leriyle getirir (Yeme İçme, Giyim vs). |
| GET | /opportunities/brands |
Sistemdeki marka filtrelerini getirir. |
GET /opportunities Liste Parametreleri
URL sonuna sorgu dizisi (query string) olarak ekleyebilirsiniz
(Örnek: ?type=kupon&sort=popular)
category_id(int) Belirli kategoriye göre listele.brand_id(int) Belirli markaya göre listele.type(string) Fırsat tipi: kupon, affiliate, qrsearch(string) Başlık/Açıklamada metin arama.sort(string) Sıralama şekli: featured, popular, newest, alphabeticalpage,per_pageSayfalama ayarları. (Varsayılan per_page: 20)
3. Fırsatlardan Yararlanma (Kod Alma)
Listenizden bir fırsatı seçen kullanıcının, sizin uygulamanız
içindeyken indirim kuponu talep etmesi (claim) özelliğidir. Yanıt, fırsatın tipine
(type) göre farklı alanlar içerir.
Kod Talep Et
curl -X POST "https://biogrenci.com/api/partner/opportunities/{id}/claim" \
-H "Authorization: Bearer {KULLANICININ_ACCESS_TOKEN}" \
-H "Accept: application/json"
kupon Kupon Tipi Fırsat Yanıtı
Kullanıcıya bir kupon kodu verilir. Kopyalama butonu ile
gösterilmelidir. Eğer redirect_url alanı varsa altına "Fırsata Git"
butonu koyun.
{
"success": true,
"data": {
"type": "kupon",
"coupon_code": "XYZ123ABC",
"claimed_before": false,
"expires_at": "2026-10-01T23:59:59Z",
"redirect_url": "https://marka.com/ogrenci?utm_source=biogrenci",
"utm_tracking": true
}
}
coupon_code→ Kullanıcıya gösterilecek kupon kodu.redirect_url(opsiyonel) → Kuponun kullanılacağı marka sitesi linki. Varsa "Fırsata Git" butonu koyun.expires_at→ Kuponun son kullanma tarihi.claimed_before→trueise kullanıcı bu kuponu daha önce almış.
qr QR Kod Tipi Fırsat Yanıtı
Kullanıcıya QR kodu gösterilmelidir. qr_code
alanı SVG formatındadır ve doğrudan HTML olarak render edilebilir.
{
"success": true,
"data": {
"type": "qr",
"coupon_code": "QR789DEF",
"qr_code": "<svg ...>...</svg>",
"claimed_before": false,
"expires_at": "2026-12-31T23:59:59Z"
}
}
qr_code→ SVG formatında QR kod. HTML'e doğrudan yerleştirin.coupon_code→ QR kodun altında metin olarak da gösterilebilir.
affiliate Affiliate Tipi Fırsat Yanıtı
Kupon kodu yoktur. Kullanıcıya "Fırsata Git" butonu
gösterilmeli ve redirect_url adresine yönlendirilmelidir.
{
"success": true,
"data": {
"type": "affiliate",
"redirect_url": "https://marka.com/ogrenci-indirimi",
"claimed_before": false
}
}
redirect_url→ Kullanıcıyı indirimli sayfaya yönlendiren link.
Başarısız Claim Yanıtı
{
"success": false,
"message": "Bu fırsatın kuponları tükenmiş.",
"error": "COUPONS_DEPLETED"
}
unauthenticated— Token eksik veya geçersiz.insufficient_scope— Token yetki kapsamı yetersiz.COUPONS_DEPLETED— Kuponlar tükendi.OPPORTUNITY_EXPIRED— Fırsatın süresi dolmuş.USER_USAGE_LIMIT_REACHED— Kullanıcı limiti dolmuş.student_verification_required— Öğrenci doğrulaması gerekiyor.
Genel Hata Kodları Sonuçları
Aşağıdaki HTTP Error tablosu sistemde oluşabilecek hata türlerini açıklar.
| HTTP | Hata Kodu | Açıklama | Çözüm & Aksiyon |
|---|---|---|---|
| 400 | invalid_request |
Eksik veya geçersiz parametre | Bağlantı URL'nizi veya Post nesnenizi kontrol edin. |
| 400 | invalid_grant |
Code veya Refresh Token süresi dolmuş veya hatalı. | Access token yenileme işlemi başarısız olduğu için baştan `authorize` girişi istenir. |
| 401 | unauthenticated |
Access token eksik veya süresi dolmuş | Kullaniciya ait refresh token kullanarak `access_token` ı yenileyin. |
| 403 | insufficient_scope |
Token bu endpoint için yetkisiz (Örn: fırsat çekemiyor) | `authorize` linkinizdeki `scope=` alanında doğru/esik yetkiler var mı inceleyin. |
| 429 | too_many_requests |
Saniye başı API Limit aşıldı | Retry-After header değerine kadar saniye bazında bekleyin. |