ENTR
← Olay görüntüleyicisi

Android WebView günlük kaydı ve Paytm yönlendirmesi

Sürüm 1 · yalnızca teknik meta veriler · JSON şeması

Bağlantı

POST https://namepractical.pro/v1/mobile-events
Content-Type: application/json
Authorization: Bearer <INGEST_TOKEN>

Gönderim tokenı ayrıca verilir; görüntüleyiciye erişim sağlamaz. İzin verilen uygulamalar: com.artworkss.ais.epaq ve com.worksphoto.artaipic. Her istekte en fazla 50 olay / 64 KiB; token başına dakikada 120 istek. HTTPS sertifikası doğrulanmalıdır.

Örnek istek

{
  "schema_version": 1,
  "app_id": "com.artworkss.ais.epaq",
  "app_version": "1.0.1",
  "android_api": 35,
  "webview_version": "133.0.6943.137",
  "device_model": "Pixel 8",
  "session_id": "e75ff110-0124-42a4-8cd7-ec25cfc63bd2",
  "test_event": false,
  "events": [{
    "event_id": "9602f264-829b-45b3-b278-7f1f4955a77d",
    "seq": 1,
    "at": "2026-10-05T12:00:00Z",
    "event": "external_launch_failed",
    "level": "error",
    "source": "native",
    "window_id": "root",
    "attempt_id": "d7954010-0a66-428a-89c6-f26a760aa881",
    "scheme": "paytmmp",
    "route": "external_payment",
    "data": {
      "error_code": "ActivityNotFoundException",
      "reason": "app_not_installed",
      "is_user_gesture": true
    }
  }]
}

Örnek tarihin yerine saat dilimi içeren güncel UTC zamanı gönderin. Oturum ve ödeme denemesi kimlikleri rastgele UUID olmalıdır; kullanıcı kimliği kullanmayın. seq oturum içinde artar. Her olaya bir kez UUID atayın; yeniden gönderimde olayın tamamını ve paket bağlamını değiştirmeyin.

Olaylar ve Android geri çağrıları

İsteğe bağlı bağlam: window_id, parent_window_id, attempt_id, scheme, host, route. host yalnızca ana makine adıdır; route URL yolu değil, checkout gibi sabit bir etikettir. Tüm alanlar ve sınırlar şemada tanımlıdır. Bilinmeyen alanlar reddedilir.

Gönderim ve yanıt

Kalıcı yerel kuyruk ve native ağ istemcisi kullanın; 5–10 saniyede bir veya 20 olayda gönderin. Kritik hatalarda hemen göndermeyi deneyin. WebView gezinmesini engellemeyin. Kuyruğu 1.000 olay / 2 MiB ile sınırlayın; 7 günden eski kayıtları kaldırın ve atılan olay sayısını yerelde izleyin.

{"accepted_event_ids":["…"],"duplicate_event_ids":[],"received_at":"…"}

HTTP 200, paketin veritabanına kaydedildiğini bildirir. Yalnızca iki onay listesinden birinde bulunan kimlikleri kuyruktan silin. Ağ hataları, 429 ve 5xx için rastgele sapmalı üstel bekleme kullanın (1 saniye → 5 dakika); Retry-After değerine uyun. 400/401/403/409/413/415/422 yanıtlarını otomatik tekrarlamayın; entegrasyon hatasını bildirin, büyük paketleri gönderimden önce bölün. Aynı uygulama + aynı olay UUID + aynı içerik tekrar kayıt oluşturmaz. İçerik değişirse 409 döner ve tüm paket geri alınır. Tekilleştirme, olayın saklandığı 30 gün boyunca geçerlidir.

Veri sınırları ve doğrulama

Tam URL, sorgu parametreleri, fragment, çerez, yetkilendirme başlığı, istek/yanıt gövdesi, kart numarası, CVV, ad, e-posta, telefon, ödeme kimlikleri veya ham konsol metni göndermeyin. Sabit neden kodları ve rastgele UUID kullanın. Ödeme başarısının kaynağı, ödeme sağlayıcısının doğrulanmış webhook'u veya sunucusu olmalıdır; orada attempt_id ile ilişkilendirin.

Kök/alt pencere akışlarını, Paytm yüklü/yüklü değil durumlarını, dönüş/iptal, renderer hatası, Activity yeniden oluşturma, çevrimdışı kuyruk, tekrar gönderim ve 3DS akışlarını test edin. Testlerde test_event: true kullanın. Olaylar 30 gün, yerel yedekler 7 gün saklanır. Aynı sunucudaki yedekler sunucunun tamamen kaybına karşı koruma sağlamaz.

Paytm: Android telefonda “click here to pay”

Doğrulanmış hata: incelenen APK, harici ACTION_VIEW hatasını yakalayıp false döndürüyor. WebView daha sonra paytmmp://… adresini yüklemeye çalışıyor ve ERR_UNKNOWN_URL_SCHEME gösteriyor. Paytm'nin bulunmaması ile hatanın yanlış yönlendirilmesi ayrı durumlardır; ikisi de ödeme sonucunu doğrulamaz.

  1. Tüm kök/alt WebView pencerelerinde ve uygulamanın kendi gezinme çağrılarında ortak bir yönlendirme katmanı kullanın. Normal HTTP(S) gezinmesini WebView'de sürdürün. Doğrulanmış sağlayıcı sözleşmesi olmadan ödeme parametrelerini değiştirmeyin veya Paytm bağlantısını başka bir ödeme şemasına çevirmeyin.
  2. Güvenilir ödeme akışındaki onaylanmış Paytm bağlantısını Intent.ACTION_VIEW ve CATEGORY_BROWSABLE ile açın. ActivityNotFoundException ve SecurityException durumlarını açıkça yönetin. Harici/engellenmiş şemalarda hem başarı hem hata durumunda true döndürün; özel URI WebView'e ulaşmamalıdır. Normal web gezinmesi için false döndürün.
  3. Uygun işleyici yoksa external_launch_failed, reason: no_handler ve istisna sınıfını kaydedin. Yalnızca mevcut, doğrulanmış ve sağlayıcı tarafından onaylanmış HTTPS alternatifini kullanın. Alternatif yoksa ödeme sayfasını koruyup başka yöntem seçme veya Paytm yükleme seçeneği gösterin. Paytm web adresi uydurmayın ve başlangıç sayfasına sessizce dönmeyin. İşleyici bulunmaması uygulamanın yüklü olmadığını tek başına kanıtlamaz.
  4. intent:// için Intent.parseUri(..., URI_INTENT_SCHEME) kullanın; action/şema/paket izinlerini uygulayın, component/selector alanlarını temizleyin, güvensiz flag/extra alanlarını reddedin ve browser_fallback_url değerini doğrulayın. Paket görünürlüğü resolveActivity sonucunu etkileyebilir; null sonucu yokluk kanıtı saymayın. Ön kontrol gerekiyorsa gerekli sınırlı queries tanımlarını ekleyin.
  5. Açılış, Geri, dönüş ve Activity yeniden oluşturmada başlangıçtaki ödeme penceresini, üst/alt pencere ilişkisini ve attempt_id değerini koruyun. Requested → dispatched → background/resume/return olaylarını kaydedin. Sayfayı yeniden yüklemeyin, ödemeyi tekrar göndermeyin ve Activity dönüşünü başarı saymayın. Sonucu sağlayıcının sunucusu/webhook'u doğrular.
  6. shouldOverrideUrlLoading, POST ve uygulamanın kendi loadUrl çağrılarını kapsamaz. Gerçek ödeme düğmesini ve yönlendirme zincirini inceleyin; uygulamanın çağrılarını açıkça yönlendirin. Ödeme POST isteğini tekrarlamayın. Yalnızca onaylı sağlayıcıları güvenilir ödeme bağlamından açın; sonraki yönlendirmelerde doğrudan kullanıcı hareketi bulunmayabilir.

Doğrulama: gerçek uygulama içi ödeme düğmesini fiziksel Android telefonlarda Paytm yüklü/yüklü değil durumlarında test edin. Kök/alt pencere, onaylanmış alternatif/alternatif yok, başarı/red/iptal/Geri, arka plan/dönüş ve Activity yeniden oluşturmayı kapsayın. Bilinmeyen şema hatası, kaybolan ödeme sayfası, tekrarlanan ödeme veya uygulama açılışından çıkarılan başarı kabul edilmez. Android 11+ paket görünürlüğünü ve desteklenen sürümleri kapsayın. Masaüstü veya normal Chrome testi WebView testi yerine geçmez.

Aşamalar: (1) hassas veri içermeyen düğme/yönlendirme izini çıkarıp sağlayıcı/kaynak/alternatif sözleşmesini belirleyin; (2) ortak yönlendirme ve ilişkili günlük kaydını birlikte uygulayın; (3) telefon testlerini istemci izleri ve sağlayıcı sonuçlarıyla doğrulayın. APK değişiklikleri ve gerçek Paytm akışı henüz doğrulanmadı.

Resmî kaynaklar: WebViewClient, Android paket görünürlüğü, intent URI / alternatif biçimi.