Home

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

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