Client Callback (Intent)
Genel Bakış
Bu doküman, iş ortakları için Ödeal uygulaması ile Intent URL entegrasyonunun güncel teknik detaylarını açıklamaktadır. Entegrasyon, JSON veri alışverişi ile ödeme işlemlerini gerçekleştirmeyi sağlar.
Ön Gereksinimler
1. Profil Tipi Ayarı
Ödeal uygulamasında giriş yapan kullanıcının profil tipi EXTERNAL_BASKET_WITH_APP olmalıdır.
Dikkat
Bu ayar olmadan ödeme alınması mümkün değildir.
2. Intent URL Tanımlaması ve Kayıt Süreci
Örnek URL Formatı:
https://www.samplejsonapp.ode.al3. Manifest Ayarları
İş ortağı uygulamasının AndroidManifest.xml dosyasına Intent Filter eklenmelidir. launchMode değeri singleTop olmalıdır.
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop"
android:theme="@style/Theme.MyApplication">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="www.samplejsonapp.ode.al"
android:scheme="https" />
</intent-filter>
</activity>Entegrasyon Akışı ve Veri Yönleri
Gönderme Yöntemi (İş Ortağı → Ödeal)
Adım 1: Ödeal Uygulamasını Çağırma
val intent = Intent().apply {
action = Intent.ACTION_VIEW
data = Uri.parse("https://basket.ode.al/basketReferanceCode")
}
startActivity(intent)Ödeal Uygulaması İçerisinde
Adım 2: Veri Alma (SplashActivity)
İş ortağı uygulamasından gelen basketReferenceCode değerinin son / karakterinden sonraki kısmı alınır.
String basketReferenceCode = data.substring(data.lastIndexOf("/") + 1);Adım 3: Sepet Verilerini Getirme
Alınan basketReferenceCode ile basket endpoint'ine istek atılır. Dönen response ile sepet doldurulur.
private void getBasket(String basketReferenceCode) {
BasketRequest request = new BasketRequest();
if (dataManager.haveTerminalActivationInfo())
request.setOrganisationId(dataManager.getOrganisationFromActivation().getOrganisationId());
request.setBasketReferenceCode(basketReferenceCode);
lembasManager.getRequestObservable(request).subscribe(new LembasObserver<BasketResponse>() {
@Override
public void onNext(BasketResponse response) {
dataManager.employeeReferenceCode = response.getEmployeeReferenceCode();
dataManager.setBasketResponse(response);
if (response.getCustomerInfo() != null) {
dataManager.setAppToAppTckNo(response.getCustomerInfo().getTckNo());
}
if (dataManager.getBasketReferenceCode() != null)
LogsUtils.logMetaPut("basket success", dataManager.getBasketReferenceCode());
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
versionNameTextView.setText(packageInfo.versionName);
} catch (PackageManager.NameNotFoundException e) {
Timber.e(e, "PackageManager");
}
if (dataManager.haveBasketReferenceCode() && dataManager.hasBasketWithApp()) {
if (dataManager.getSessionId() == null) {
String phone = dataManager.getPhone();
Intent intent = LandingActivity.newInstance(getApplicationContext(), phone);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
if (getApplicationContext() != null) {
getApplicationContext().startActivity(intent);
finish();
} else {
startActivity(LandingActivity.newInstance(SplashActivity.this));
finish();
}
} else {
initUserInterface();
}
} else {
String phone = dataManager.getPhone();
Intent intent = LandingActivity.newInstance(getApplicationContext(), phone);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
if (getApplicationContext() != null) {
getApplicationContext().startActivity(intent);
finish();
} else {
startActivity(LandingActivity.newInstance(SplashActivity.this));
finish();
}
}
dispose();
}
@Override
public void onError(LembasFault lembasFault) {
super.onError(lembasFault);
if (!dataManager.getBasketReferenceCode().isEmpty()) {
LogsUtils.logMetaPut("basket error", dataManager.getBasketReferenceCode());
}
Toast.makeText(SplashActivity.this, lembasFault.visibleMessage, Toast.LENGTH_SHORT).show();
initUserInterface();
dispose();
}
});
}Adım 4: Ödeme İşlemi
- Ödeal uygulaması ödeme sayfasına yönlendirir
- Kullanıcı ödeme işlemini gerçekleştirir (POS, Nakit, Kart vb.)
- İşlem sonucu belirlenir (Başarılı/Başarısız)
Dönüş Yöntemi (Ödeal → İş Ortağı)
Adım 5: Sonuç Verilerini Hazırlama
String intentUri = dataManager.getCloseAfterPayment();
intentUri += "?basketReferenceCode=" + dataManager.getBasketReferenceCode();
intentUri += "&reason=Ödeme iptal edildi";
intentUri += "&result=" + false;
paymentDataModel.setIntentUriForReturnApp(Uri.parse(intentUri));
intent = new Intent(Intent.ACTION_VIEW, paymentDataModel.getIntentUriForReturnApp());Adım 6: İş Ortağında Sonuç İşleme
Gönderilen URI içerisinden ilgili alanlar alınıp kullanılabilir:
basketReferenceCode: Sepet referans kodureason: İşlem sonucu açıklamasıresult: İşlem başarı durumu (true/false)
Parametre Kullanımı
Dönen URL parametrelerini parse ederek işlem sonucuna göre kullanıcıya geri bildirim verebilirsiniz.
Entegrasyon Akış Şeması
İş Ortağı App Ödeal App
| |
|---> Intent (basketRef) ------>|
| |
| [Sepet Getir]
| |
| [Ödeme İşlemi]
| |
|<--- Intent (Sonuç) -----------|
|
[Sonuç İşleme]
