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
- Profil Tipi Ayarı
- Ödeal uygulamasında giriş yapan kullanıcının profil tipi EXTERNAL_BASKET_WITH_APP olmalıdır.
- 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.al
- Manifest Ayarları
İş ortağı uygulamasının AndroidManifest.xml dosyasına Intent Filter eklenmelidir: launchMode 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ÖNTEMİ (İş 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 UYGULAMASI İÇERİSİNDE
Adım 2: Veri Alma ve İşleme (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: Veri Alma ve İşleme (SplashActivity)
Alınan basketReferenceCode ile basket endpointine 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ÖNTEMİ (Ö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.