Skip to content

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.al

3. Manifest Ayarları

İş ortağı uygulamasının AndroidManifest.xml dosyasına Intent Filter eklenmelidir. launchMode değeri singleTop olmalıdır.

xml
<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

kotlin
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.

java
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.

java
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

  1. Ödeal uygulaması ödeme sayfasına yönlendirir
  2. Kullanıcı ödeme işlemini gerçekleştirir (POS, Nakit, Kart vb.)
  3. İşlem sonucu belirlenir (Başarılı/Başarısız)

Dönüş Yöntemi (Ödeal → İş Ortağı)

Adım 5: Sonuç Verilerini Hazırlama

java
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 kodu
  • reason: İş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]

Ödeal A.Ş.