PTT Kargo for WooCommerce
WooCommerce mağazanız ile PTT Kargo Web Servisleri arasında tam otomatik, çift yönlü ve kurumsal düzeyde entegrasyon sağlayan resmi standartlarda WordPress eklentisi.
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/kaanirmak/ptt-woo/archive/refs/heads/main.zipPTT Kargo – WooCommerce Entegrasyonu
WooCommerce mağazanız ile PTT Kargo Web Servisleri arasında tam otomatik, çift yönlü ve kurumsal düzeyde entegrasyon sağlayan resmi standartlarda WordPress eklentisi.
Bu eklenti; siparişlerin PTT sistemine tek tıkla veya otomatik aktarılmasını (kabulEkle2), 13 haneli barkod üretilmesini, canlı kargo hareketlerinin (safahatlar) sorgulanmasını (GonderiTakipV2) ve kargo teslim edildiğinde sipariş durumunun otomatik güncellenmesini sağlar.
📋 İçindekiler
- Öne Çıkan Özellikler
- Entegre PTT Web Servisleri
- Sistem Gereksinimleri
- Kurulum Kılavuzu
- Yapılandırma ve Ayarlar
- Kullanım Senaryoları
- Mimari ve Veritabanı Yapısı
- Geliştirici Rehberi (Hooks & API)
- Hata Kodları ve Sorun Giderme
- Katkıda Bulunma
- Lisans
✨ Öne Çıkan Özellikler
- 🚀 Otomatik & Manuel Kargo Kabulü: Sipariş durumu değiştiğinde (örn. "İşleniyor") otomatik veya sipariş detayından tek tıkla PTT'ye bildirim.
- 🏷️ 13 Haneli Barkod & Check-Digit Doğrulama: 12 haneli barkod kökünden resmi PTT 1-3-1-3 Modulo 10 algoritmasıyla 13. kontrol hanesi (check-digit) otomatik hesaplanır.
- 📦 Esnek Anlaşma Desteği:
- Desi Bazlı: PTT'nin sisteme otomatik barkod ataması modu.
- Sabit Barkod Havuzu: Firmanıza tahsis edilen barkod aralığını (örn:
280000000000-280000010000) sayarak tüketme ve kalan barkod uyarısı verme modu.
- 🗺️ Akıllı İl / İlçe Eşleştirme (Fuzzy Match): WooCommerce müşteri adreslerini PTT il/ilçe kodlarıyla Türkçe karakter ve yazım toleranslı olarak otomatik eşleştirir.
- 💰 Ek Hizmet Yönetimi (ekhizmet):
- Kapıda Ödeme (
OS): Kapıda nakit/kredi kartı siparişlerinde tahsilat tutarını PTT'ye otomatik iletme. - Değer Konulmuş / Sigortalı Gönderi (
DK): Sipariş bedeline göre sigorta değeri tanımlama. - Alıcıdan Tahsil (
UA): Kargo ücretini alıcının ödeyeceği senaryolar için ek hizmet desteği.
- Kapıda Ödeme (
- 🔄 Canlı Kargo Takibi & Safahat Akışı: PTT
GonderiTakipV2servisiyle kargonun kabul, transfer, dağıtım ve teslimat aşamalarını anlık gösterme. - ⏰ Otomatik Sipariş Durum Güncellemesi: WP-Cron ile periyodik kargo sorgulaması yapılır; kargo teslim edildiğinde WooCommerce siparişi otomatik "Tamamlandı" durumuna geçer.
- 🖨️ Termal & Standart Etiket Çıktısı: 100x150 mm kargo termal etiketleri veya standart A4 formatında yazdırılabilir barkodlu teslimat formu.
- 🛡️ Kurumsal Güvenlik & Şifreleme: Web servis şifreleri WordPress veritabanında
AES-256-CBCalgoritmasıyla şifrelenir; sistem loglarında hassas veriler otomatik maskelenir. - ⚡ WooCommerce HPOS Uyumlu: High-Performance Order Storage (Özel Sipariş Tabloları) mimarisiyle %100 uyumludur.
- 🌐 Çift Yönlü SOAP / cURL Desteği: Sunucunuzda PHP
SoapClientbulunmasa dahi Raw XMLcURLmotoruyla kesintisiz çalışır.
🔌 Entegre PTT Web Servisleri
| Servis Adı | WSDL Endpoint | Kullanılan Metotlar / Amaç |
|---|---|---|
| PttVeriYukleme | https://pttws.ptt.gov.tr/PttVeriYukleme/services/Sorgu?wsdl |
kabulEkle2 (Kargo kabulü), referansVeriSil / barkodVeriSil (Kayıt iptali) |
| GonderiTakipV2 | https://pttws.ptt.gov.tr/GonderiTakipV2/services/Sorgu?wsdl |
gonderiSorgu2 (Barkod ile takip), gonderiSorgu_referansno, getDropPointInfo (Şube bilgisi) |
| PttBilgi | https://pttws.ptt.gov.tr/PttBilgi/services/Sorgu?wsdl |
ilceSorgula (İl/ilçe veritabanı senkronizasyonu), ekHizmetSorgula |
💻 Sistem Gereksinimleri
- WordPress: 5.8 veya üzeri
- WooCommerce: 5.0 veya üzeri (WooCommerce 9.x ve HPOS desteklenir)
- PHP: 7.4, 8.0, 8.1, 8.2 veya 8.3
- PHP Eklentileri:
curl,openssl,simplexml,soap(isteğe bağlı, cURL fallback mevcuttur)
🚀 Kurulum Kılavuzu
1. Manuel Yükleme (ZIP veya FTP)
- Bu depoyu indirin veya ZIP formatında paketleyin.
- Klasör adının
ptt-wooveyaptt-kargo-woocommerceolduğundan emin olun. - Klasörü WordPress sitenizin
/wp-content/plugins/dizinine yükleyin. - WordPress Yönetim Paneli > Eklentiler bölümünden PTT Kargo – WooCommerce Entegrasyonu eklentisini etkinleştirin.
2. Git ile Klonlama
cd /path/to/wordpress/wp-content/plugins/
git clone https://github.com/kaanirmak/ptt-woo.git
⚙️ Yapılandırma ve Ayarlar
Eklenti etkinleştirildikten sonra WooCommerce > Ayarlar > PTT Kargo sekmesine gidin.
┌─────────────────────────────────────────────────────────────┐
│ WooCommerce > Ayarlar > PTT Kargo │
├─────────────────────────────────────────────────────────────┤
│ [x] Entegrasyonu Etkinleştir │
│ Ortam: ( ) Canlı (Prod) (o) Test Ortamı │
│ │
│ Müşteri ID (musteriId): [ 904XXXXXX ] │
│ Kullanıcı Adı: [ PttWs ] │
│ Şifre: [ •••••••••••••• ] │
│ [ Bağlantıyı Test Et ] -> "Bağlantı Başarılı (200 OK)" │
│ │
│ Anlaşma Tipi: [ Sabit Barkod Havuzu Bazlı v ] │
│ Başlangıç Barkodu: [ 280000000000 ] │
│ Bitiş Barkodu: [ 280000010000 ] │
│ Sonraki Barkod Sırası: [ 280000000142 ] │
│ │
│ İl / İlçe Eşleştirme: [ İl/İlçe Verilerini Senkronize Et]│
└─────────────────────────────────────────────────────────────┘
Temel Ayar Parametreleri:
- Çalışma Ortamı: Geliştirme/test aşamasında
Test Ortamı, canlı siparişlerdeCanlı (Prod)seçiniz. - Kimlik Bilgileri: PTT Başmüdürlüğü veya kargo yetkiliniz tarafından size iletilen
musteriId,kullanicivesifrebilgilerini giriniz. - Anlaşma Türü:
- Desi Bazlı: PTT her sipariş için kendi barkodunu üretir.
- Sabit Barkod Havuzu: Size tahsis edilen 12 haneli numara aralığını girin; eklenti check-digit hesaplayarak 13 haneli barkod oluşturur.
- Ek Hizmet Ayarları: Kapıda ödeme siparişlerinde
OSek hizmetini ve tutarını otomatik aktarabilirsiniz. - Özel Depo / Gönderici Bilgileri: Farklı bir depo veya şube adresi üzerinden gönderim yapıyorsanız gönderici bilgilerini tanımlayabilirsiniz.
📖 Kullanım Senaryoları
1. Tekil Sipariş Kargo Kabulü
- Sipariş Düzenleme ekranına girin.
- Sağ taraftaki PTT Kargo İşlemleri meta kutusundan kargo desisini, ağırlığını ve ek hizmetleri kontrol edin.
- "PTT'ye Gönder (Kargo Kabulü)" butonuna tıklayın.
- PTT sistemi kargo kabulünü onaylar, 13 haneli barkod üretilir ve takip bağlantısı siparişe işlenir.
sequenceDiagram
autonumber
actor Admin as Mağaza Yöneticisi
participant WC as WooCommerce (PTT Eklentisi)
participant PTT as PTT Kargo Web Servisi (kabulEkle2)
Admin->>WC: "PTT'ye Gönder" Butonuna Basar
WC->>WC: 13 Haneli Barkod & Check-Digit Üretir
WC->>PTT: SOAP / XML kabulEkle2 Payload İletilir
PTT-->>WC: Başarılı Yanıt (SonucKodu: 1, Barkod_quid)
WC->>WC: Sipariş Durumu & Meta Verileri Güncellenir
WC-->>Admin: Barkod ve Takip Linki Gösterilir
2. Toplu Kargo İşlemleri
- WooCommerce > Siparişler listesine gidin.
- Göndermek istediğiniz siparişleri seçin.
- Toplu İşlemler menüsünden "PTT Kargo'ya Gönder (Toplu Kabul)" seçeneğini seçip Uygula butonuna basın.
- Sistem seçilen tüm siparişleri sırayla PTT sistemine aktarır ve sonuçları özet bildirim olarak sunar.
3. Termal ve A4 Barkod Etiketi Yazdırma
- Kargo kabulü tamamlanan siparişin detay sayfasında veya sipariş listesindeki kargo sütununda "Barkod Etiketi Yazdır" butonuna tıklayın.
- Açılan yazdırma penceresi standart termal kargo etiketleri (100x150 mm) ve A4 kargo teslimat formu ile uyumludur.
4. Kargo İptali ve Hatalı Kayıt Temizleme
- Kargoya henüz fiziksel olarak teslim edilmemiş bir siparişin PTT kaydını iptal etmek için sipariş detayından "PTT Kargo Kaydını İptal Et / Sil" butonunu kullanın.
- Eklenti PTT
referansVeriSilveyabarkodVeriSilmetodunu çağırarak PTT tarafındaki bekleyen kaydı siler.
5. Canlı Kargo Takip ve WP-Cron
- Eklenti arka planda (
ptt_cron_tracking_sync) 2 saatte bir çalışarak kargodaki siparişlerin durumunu PTTGonderiTakipV2üzerinden sorgular. - Tüm kargo safahatları (Kabul Edildi, Torbaya Eklendi, Dağıtıma Çıktı, Teslim Edildi) sipariş geçmişine kaydedilir.
- Kargo teslim edildiğinde sipariş otomatik olarak "Tamamlandı" durumuna alınır.
6. Müşteri Arayüzü ve Takip Kısa Kodu
- Hesabım > Siparişler: Müşteriler kendi hesap panellerinden siparişlerinin anlık PTT kargo durumunu ve safahat geçmişini görüntüleyebilir.
- E-Posta Bildirimleri: Müşteriye giden "Siparişiniz Kargoya Verildi" e-postalarına takip numarası ve canlı PTT takip linki otomatik eklenir.
- Kısa Kod (Shortcode): Sitenizin dilediğiniz sayfasına genel kargo takip formu ekleyebilirsiniz:
[ptt_kargo_takip]
🏛️ Mimari ve Veritabanı Yapısı
ptt-woo/
├── assets/
│ ├── css/
│ │ ├── admin.css # Yönetim paneli stilleri
│ │ └── frontend.css # Müşteri paneli & safahat takip stilleri
│ ├── data/
│ │ └── turkey_cities_districts.json # İl / İlçe yerel veri tabanı
│ └── js/
│ └── admin.js # AJAX bağlantı testi ve admin aksiyonları
├── Docs/ # Resmi PTT WSDL, XML ve Teknik Dokümantasyon
├── includes/
│ ├── admin/ # Yönetim paneli ayarları, sipariş meta kutuları
│ │ ├── class-ptt-admin-order.php
│ │ ├── class-ptt-admin-orders-list.php
│ │ └── class-ptt-admin-settings.php
│ ├── client/ # Web Servis SOAP & cURL İstemcileri
│ │ ├── class-ptt-soap-client.php
│ │ ├── class-ptt-kabul-client.php
│ │ ├── class-ptt-takip-client.php
│ │ └── class-ptt-bilgi-client.php
│ ├── public/ # Frontend müşteri alanı, e-postalar & shortcode
│ │ ├── class-ptt-frontend.php
│ │ └── class-ptt-emails.php
│ ├── services/ # Çekirdek iş mantığı servisleri
│ │ ├── class-ptt-barcode-pool.php
│ │ ├── class-ptt-city-manager.php
│ │ ├── class-ptt-order-sync.php
│ │ └── class-ptt-tracking-cron.php
│ ├── class-ptt-activator.php # DB tabloları & kurulum rutinleri
│ ├── class-ptt-deactivator.php # Cron temizliği & devre dışı bırakma
│ ├── class-ptt-encryption.php # AES-256 kimlik şifreleme
│ ├── class-ptt-helper.php # Check digit, veri temizleme & formatlayıcılar
│ └── class-ptt-logger.php # Hassas veri maskelemeli loglama
├── tests/
│ └── test-check-digit.php # Check-digit algoritması birim testleri
├── ptt-kargo-woocommerce.php # Eklenti ana giriş dosyası
├── readme.txt # WordPress Plugin Directory formatında dokümantasyon
├── tasks.md # Teknik geliştirme ve faz takip dokümanı
└── LICENSE # GPLv2 Lisans Belgesi
Özel Veritabanı Tabloları
Eklenti etkinleştirildiğinde WordPress veritabanında 2 adet optimize edilmiş tablo oluşturulur:
{$wpdb->prefix}ptt_cities_districts: PTT il ve ilçe kodlarının hızlı fuzzy match eşleşmesi için indeksli önbellek tablosu.{$wpdb->prefix}ptt_tracking_history: Sipariş bazlı kargo safahat hareketlerinin saklandığı log tablosu.
🛠️ Geliştirici Rehberi (Hooks & API)
Eklenti, üçüncü taraf temalar ve eklentilerle genişletilebilir kancalar (filters & actions) sunar:
1. Kargo Kabul Payload'ını Özelleştirme
add_filter( 'ptt_woo_kabul_ekle_input', function( $input, $order ) {
// Özel bir açıklama veya referans alanı ekleyin
$input['aciklama'] = 'Sipariş No: ' . $order->get_order_number() . ' - Kırılabilir Eşya';
return $input;
}, 10, 2 );
2. Kargo Teslim Edildiğinde Özel Aksiyon Tetikleme
add_action( 'ptt_woo_order_delivered', function( $order_id, $tracking_number ) {
// Müşteriye özel SMS gönderimi veya faturalama tetikleyicisi
}, 10, 2 );
❓ Hata Kodları ve Sorun Giderme
| Durum / Hata Mesajı | Olası Neden | Çözüm |
|---|---|---|
| SonucKodu: -1 / Yetkisiz Erişim | musteriId, kullanici veya sifre hatalı. |
Ayarlar sayfasındaki kimlik bilgilerini ve ortam modunu (Test/Canlı) kontrol ediniz. |
| İlçe Kodu Bulunamadı | Müşterinin girdiği ilçe adı PTT veri tabanıyla uyuşmuyor. | Ayarlar sayfasından "İl/İlçe Verilerini Senkronize Et" butonuna basarak yerel eşleme tablosunu güncelleyiniz. |
| Barkod Havuzu Tükendi | Sabit barkod aralığınızdaki tüm numaralar kullanıldı. | PTT yetkilinizden yeni barkod aralığı talep edip ayarlar sayfasından başlangıç/bitiş değerlerini güncelleyiniz. |
| Fiziksel Kabulü Yapılmış Kargo Silinemez | Kargo PTT şubesi veya kuryesi tarafından teslim alınmış. | PTT şubesi tarafından kabulü yapılmış kargolar web servis üzerinden iptal edilemez; şube ile irtibata geçilmelidir. |
🤝 Katkıda Bulunma
- Bu depoyu Fork edin (
fork). - Yeni özelliğiniz için bir dal oluşturun (
git checkout -b feature/yeni-ozellik). - Değişikliklerinizi commit edin (
git commit -am 'Yeni özellik eklendi'). - Dalınıza push yapın (
git push origin feature/yeni-ozellik). - Bir Pull Request (PR) açın.
📄 Lisans
Bu proje GNU General Public License v2.0 (GPLv2) ile lisanslanmıştır. Detaylar için LICENSE dosyasına göz atabilirsiniz.