# WooCommerce siparişleri

> Sayproof'un siparişleri WooCommerce'ten kendisinin okuması; REST API anahtarı, kurulum, durum eşlemesi, teslim kuralı ve ürün sayfasında gösterim.

Kaynak: /tr/integrate/woocommerce/

WooCommerce kullanan bir mağazada siparişlerin Sayproof'a ulaşması için kod yazılması gerekmez. Sayproof, sizin oluşturduğunuz bir REST API anahtarıyla WooCommerce REST API'sine bağlanır ve yeni ya da değişen siparişleri belli aralıklarla (varsayılan olarak 15 dakikada bir) kendisi okur. Okunan siparişler, [mağaza sisteminden gönderilen](/tr/integrate/orders.md) siparişlerle aynı biçimde kaydedilir; yorum yazma hakkı ve davetler aynı kurallarla çalışır.

Bu sayfadaki WordPress ve WooCommerce ekran adları İngilizce yönetim panelindeki adlardır; yönetim paneliniz Türkçeyse aynı yerler Türkçe adlarıyla görünür.

## Ne zaman kullanılır

- Mağazanız WordPress üzerinde WooCommerce ile çalışıyorsa bu sayfadaki bağlantıyı kurun.
- Hazır bağlantısı olmayan bir sistem kullanıyorsanız siparişleri mağaza sisteminiz gönderir: [Sipariş ve teslimat aktarımı](/tr/integrate/orders.md).

Panelde iki yol **Entegrasyon › Sipariş aktarımı** sekmesinde alt alta gösterilir: **Platformdan okuma** ve **Mağazadan gönderim**.

## Gerekenler

| Bilgi | Açıklama |
|---|---|
| Mağaza adresi | WordPress sitenizin adresi, örneğin `https://markaniz.com`. Yalnızca alan adı kullanılır; adrese yol yazılmışsa atılır. Bu nedenle WordPress alan adının kökünde kurulu olmalıdır. Site `https` ile açılmalıdır. |
| Consumer key ve Consumer secret | Bu iş için oluşturduğunuz, yalnızca **Read** izni olan REST API anahtarı. |
| Sayproof kanalı | Okunan siparişlerin yazılacağı kanal. Siparişin pazarı bu kanalın pazarıdır. |

- WordPress'te **Settings › Permalinks** ayarı **Plain** dışında bir seçenekte olmalıdır; **Plain** seçiliyken REST API adresleri açılmaz.
- Güvenlik eklentisi, güvenlik duvarı ya da önbellek katmanı `/wp-json/` adreslerini engellememeli ve `Authorization` header'ını silmemelidir.

Bir Sayproof kanalı için her platformda tek bağlantı kurulabilir.

## WooCommerce'te anahtar oluşturma

1. WordPress yönetiminde **WooCommerce › Settings › Advanced › REST API** sayfasını açın ve **Add key** düğmesine basın.
2. **Description** alanına anahtarın amacını yazın (örneğin "Sayproof").
3. **User** alanında siparişleri görebilen bir kullanıcı seçin (**Administrator** ya da **Shop manager**).
4. **Permissions** alanında **Read** seçin ve **Generate API key** düğmesine basın.
5. Gösterilen **Consumer key** (`ck_` ile başlar) ve **Consumer secret** (`cs_` ile başlar) değerlerini kopyalayın. WooCommerce Consumer secret'ı yalnızca bu ekranda bir kez gösterir.

Anahtarı aynı sayfadan istediğiniz an iptal edebilirsiniz; iptal edilen anahtarla okuma durur.

## Panelde kurulum

1. **Entegrasyon › Sipariş aktarımı** sekmesinin **Platformdan okuma** bölümünde **Bağlantı kur** düğmesine basın.
2. **Nereden okunacak** adımında platform olarak **WooCommerce** seçeneğini ve Sayproof kanalını seçin.
3. **Bağlantı bilgileri** adımında **Mağaza adresi**, **Consumer key** ve **Consumer secret** alanlarını doldurun. **İlk okumada kaç gün geriye gidilsin** alanı 1 ile 365 arasında bir değer alır; varsayılan 30 gündür.
4. **Deneyin** adımında **Bağlantıyı dene** düğmesine basın. Sayproof WooCommerce'e bağlanır ve seçilen gün sayısı içindeki siparişlerin ilk sayfasını (en fazla 100 sipariş) okur. Sonuçta okunan sipariş sayısı, okunamayan siparişler ve en fazla beş örnek sipariş gösterilir: **Sipariş no**, **Sipariş tarihi**, **Ödeme**, **Ürün sayısı**, **Kargo durumu**, **E-posta var mı**. Müşteri e-posta adresi gösterilmez. Bu adımda hiçbir şey kaydedilmez.
5. **Kaydet ve okumayı başlat** düğmesi yalnızca başarılı bir denemeden sonra açılır. Deneme sonrasında bir bilgi değiştirilirse bağlantı yeniden denenmelidir.

Kayıttan sonra bağlantı **Platform bağlantıları** kartında görünür. Kartta **Okuma sıklığı**, **Son okuma**, **Son okumada** (okunan ve yeni gelen sipariş sayısı), **Okunamayan** ve **Son hata** bilgileri yer alır. Düğmeler:

| Düğme | İşlevi |
|---|---|
| **Şimdi oku** | Sıradaki okumayı beklemeden okumayı başlatır. Duraklatılmış bağlantıda ve kanal kapalıyken kullanılamaz. |
| **Bağlantıyı dene** | Kayıtlı bilgilerle denemeyi tekrarlar; hiçbir şey kaydetmez. |
| **Duraklat** / **Sürdür** | Okumayı durdurur ya da yeniden başlatır. |
| **Bağlantıyı düzenle** | **Mağaza adresi** ve **Okuma sıklığı** (5 ile 1440 dakika arası) değiştirilir. Okuma kaldığı yerden sürer; daha önce aktarılan siparişler yeniden okunmaz. Adres başka bir sunucuyu gösteriyorsa **Consumer key** ve **Consumer secret** da aynı formda yeniden girilir; kayıtlı anahtar yeni adrese gönderilmez (`400 invalid / address_needs_credentials`). Sayproof kanalı bu formda değişmez. |
| **Giriş bilgilerini değiştir** | Yeni **Consumer secret** değerini kaydeder; **Consumer key** boş bırakılırsa mevcut değer korunur. |
| **Bağlantıyı kaldır** | Okumayı sonlandırır. Daha önce okunan siparişler ve gönderilen davetler silinmez. |

## Okuma

- Okuma varsayılan olarak 15 dakikada bir yapılır; sıklık **Bağlantıyı düzenle** ile 5 ile 1440 dakika arasında değiştirilebilir. İlk okuma, değişiklik zamanı seçilen gün sayısı içinde kalan siparişleri alır.
- Sonraki okumalar, bir önceki okumanın başladığı andan 10 dakika öncesine kadar değişen siparişleri alır. Aynı siparişin tekrar okunması güvenlidir: sipariş güncellenir, kopyası oluşmaz.
- Bir bağlantı için aynı anda tek okuma çalışır.
- Bir okuma en fazla 50 sayfa (sayfa başına 100 sipariş) alır; 100'den az sipariş içeren sayfa son sayfa sayılır. Siparişler bitmeden sınıra ulaşılırsa kartta "Son okuma sayfa sınırına takıldı" notu görünür ve sonraki okuma son okunan siparişin değişiklik zamanından (10 dakika payla) devam eder.
- Okuma başarısız olursa kaldığı yer ilerlemez; sonraki okuma, okuma sıklığı kadar sonra aynı aralığı yeniden dener ve nedeni **Son hata** satırında görünür.

Sayproof sipariş listesini değişiklik zamanına göre sıralı okur. Anahtar HTTP Basic kimlik doğrulamasıyla, Consumer key kullanıcı adı ve Consumer secret parola olarak gönderilir:

```http
GET https://markaniz.com/wp-json/wc/v3/orders?modified_after=2026-09-02T12:00:00&dates_are_gmt=true&orderby=modified&order=asc&per_page=100&_fields=id,number,status,date_created_gmt,date_modified_gmt,date_completed_gmt,customer_id,billing.email,billing.phone,line_items,meta_data&page=1
Authorization: Basic <base64(consumer key:consumer secret)>
Accept: application/json
```

- `_fields` ile yalnızca aşağıdaki tabloda kullanılan alanlar istenir.
- Tüm tarihler GMT alanlarından okunur.
- Her isteğin zaman aşımı 30 saniye, yanıt sınırı 20 MB'tır.

## Okunan alanlar

Her satırda sırayla bakılan alanlar listelenir; dolu olan ilk alan kullanılır.

| Sayproof'taki bilgi | WooCommerce'te okunan alan |
|---|---|
| Sipariş numarası | `number`, `id` |
| Sipariş durumu | `status` |
| Sipariş tarihi | `date_created_gmt` |
| Değişiklik zamanı | `date_modified_gmt` |
| Teslim tarihi | `date_completed_gmt`, `date_modified_gmt` |
| Müşteri e-postası | `billing.email` |
| Müşteri telefonu | `billing.phone` |
| Müşteri kimliği | `customer_id` (misafir siparişte boş) |
| Dil | `meta_data` içindeki `wpml_language` (WPML); yoksa kanalın dili |
| Ürün satırları | `line_items` |
| Satır kimliği | Satırdaki `id` |
| Ürün kodu | `sku`, `variation_id`, `product_id` |
| Grup kodu | `product_id` |
| Ürün adı | `name` |
| Adet | `quantity` |

- Müşteri e-postası, mağaza sisteminden gönderilen sipariş verisindeki `customer_email` alanıyla aynı işi görür: davet bu adrese gönderilir ve sipariş doğrulamasında bu adres kullanılır.
- Müşteri telefonu, sipariş verisindeki `customer_phone` alanıyla aynı işi görür: numara [WhatsApp ile davet](/tr/features/invitations.md#whatsapp-ile-davet) için kullanılacak. WhatsApp ile davet v2 sürümüyle gelene kadar telefon numarası saklanmaz.
- Ürün kodu, ürün kaynağınızdaki ürün anahtarıyla ve ürün sayfasındaki container'a verilen kodla aynı olmalıdır.
- Siparişin adres, fiyat ve ödeme bilgileri Sayproof'a kaydedilmez.

## Durum eşlemesi

WooCommerce'te satır bazında durum yoktur; siparişin `status` değeri hem ödemeye hem siparişin tüm satırlarına uygulanır. Tablo panelde bağlantı kartındaki **Durumların karşılığı** bölümünde de görünür.

| WooCommerce kodu | WooCommerce'teki anlamı | Ödeme | Kargo durumu |
|---|---|---|---|
| `pending` | Ödeme bekleniyor | Ödeme bekliyor | Sipariş verildi |
| `on-hold` | Beklemede (örneğin havale bekleniyor) | Ödeme bekliyor | Sipariş verildi |
| `processing` | Ödeme alındı, sipariş hazırlanıyor | Ödendi | Hazırlanıyor |
| `completed` | Tamamlandı | Ödendi | Teslim edildi |
| `cancelled` | İptal edildi | İptal edildi | İptal edildi |
| `failed` | Ödeme başarısız | İptal edildi | İptal edildi |
| `refunded` | İade edildi | İade edildi | İade edildi |

- Eklentilerin eklediği özel durumlar (örneğin `shipped`) tabloda yoktur; bu durumdaki siparişler okunmaz ve **Okunamayan** satırında "durumu tanınmıyor" olarak sayılır.
- Ödeme sayfasında oluşan taslak siparişler (`checkout-draft`), otomatik taslaklar (`auto-draft`) ve çöpe atılmış siparişler (`trash`) okunmaz ve sayılmaz.

## Teslim kuralı

- WooCommerce'te teslimat durumu yoktur. Sayproof `completed` (Tamamlandı) durumundaki siparişin tüm satırlarını **Teslim edildi** sayar; bu bir platform sinyalidir.
- Teslim tarihi `date_completed_gmt`, boşsa `date_modified_gmt` değeridir.
- Siparişleri kargoya verirken **Completed** durumuna alıyorsanız davetin teslimattan önce gitmemesi için **Davet gönderimi** ekranındaki bekleme süresini kargo süresini kapsayacak şekilde ayarlayın.
- Davet ve yorum yazma hakkı için satırın **Teslim edildi**, siparişin **Ödendi** olması gerekir. Davet, **Davet gönderimi** ekranındaki bekleme süresi dolduğunda gönderilir.

## Okunamayan siparişler

| Panelde | Nedeni |
|---|---|
| numarası ya da tarihi eksik | Siparişte numara, `date_created_gmt` ya da `line_items` listesi yok |
| durumu tanınmıyor | Siparişin durumu tabloda yok; sipariş atlanır |
| ürün satırında ürün kodu eksik | Satırda `id` yok ya da `sku`, `variation_id` ve `product_id` boş; satır atlanır |
| okunabilen ürün satırı yok | Siparişin okunabilen hiçbir satırı kalmadı |
| Sayproof'a kaydedilemedi | Sipariş okundu ama Sayproof'ta kaydedilemedi (örneğin kanalın pazarı için tanımlı kural yok) |

Okunamayan ya da kaydedilemeyen siparişler okumayı durdurmaz; diğer siparişler kaydedilir. Okunan siparişlerin hiçbiri kaydedilemezse okuma başarısız sayılır ve kaldığı yer ilerlemez; neden **Son hata** satırında görünür.

## Hata durumları

| Panelde | Anlamı |
|---|---|
| bağlantı için gereken anahtar bilgileri eksik | **Consumer key** ya da **Consumer secret** boş |
| platform anahtar bilgilerini kabul etmedi | WooCommerce `401` döndü: anahtar yanlış, iptal edilmiş ya da **Read** izni yok; sunucu `Authorization` header'ını iletmiyor da olabilir |
| alan adına ulaşılamadı | Mağaza adresi çözümlenemedi |
| bu adrese internetten ulaşılamıyor | Adres özel bir ağ adresine çıkıyor; bu tür adreslere bağlanılmaz |
| sunucuya bağlanılamadı, güvenli bağlantı kurulamadı | Bağlantı ya da TLS el sıkışması başarısız |
| kaynak zamanında yanıt vermedi | İstek 30 saniyede yanıt almadı |
| adres başka bir yere yönlendiriyor; doğrudan adresi yazın | Site yönlendirme döndürdü (örneğin `www` olan ve olmayan adres arasında); yönlendirmeler izlenmez |
| karşı sistem hata verdi, durum kodu | WooCommerce `200` dışında bir yanıt verdi (örneğin REST API kapalıysa ya da **Plain** kalıcı bağlantı seçiliyse `http_status: 404`, bir güvenlik katmanı engelliyorsa `http_status: 403`) |
| platformun yanıtı okunamadı, platformun yanıtı çok büyük | Yanıt bir sipariş listesi değil (örneğin HTML sayfası) ya da 20 MB'tan büyük |
| kayıtlı giriş bilgileri okunamadı; yeniden girin | Kayıtlı anahtar çözülemedi; **Giriş bilgilerini değiştir** ile yeniden girin |
| okuma beklenmeyen bir hatayla durdu | Beklenmeyen bir hata oluştu; okuma, okuma sıklığı kadar sonra yeniden denenir |

## Ürün sayfasında gösterim

Yorumlar ürün sayfasında [script](/tr/integrate/script.md) ile gösterilir. WooCommerce'te script ve container, alt temanın (child theme) `functions.php` dosyasına ya da bir kod parçacığı eklentisine eklenen kısa bir kodla ürün sayfasına yerleştirilir:

```php
add_action( 'woocommerce_after_single_product_summary', function () {
	global $product;
	printf(
		'<div data-review-mount data-review-product="%s" data-review-product-name="%s"></div>',
		esc_attr( $product->get_sku() ?: $product->get_id() ),
		esc_attr( $product->get_name() )
	);
}, 15 );

add_action( 'wp_footer', function () {
	if ( ! is_product() ) {
		return;
	}
	echo '<script type="module" src="https://cdn.sayproof.example/sayproof.js" data-review-site-key="SITE-ANAHTARINIZ" data-review-base="https://api.sayproof.example" data-review-locale="tr"></script>';
} );
```

- `src` ve `data-review-site-key` değerleri panelde **Entegrasyon › Sitede gösterim** sekmesindeki **Yorumları ürün sayfasında gösterin** kartında, **Script (tarayıcıda)** yolu seçildiğinde **Kurulumda kullanılacak değerler** listesinde yer alır.
- Container ürün özetinin altına, ilgili ürünlerin üstüne eklenir. Başka bir yere koymak için temanızın kullandığı başka bir WooCommerce kancasını seçin.
- `data-review-product`, ürünün SKU'sudur; SKU boşsa ürün numarası kullanılır. Basit ürünlerde bu, Sayproof'un siparişten okuduğu ürün koduyla aynıdır.
- Varyasyonlu ürünlerde siparişe varyasyonun SKU'su yazılır, ürün sayfasındaki `$product->get_sku()` ise ana ürünün SKU'sunu verir. Böyle ürünlerde tüm varyasyonların yorumlarını birlikte göstermek için `data-review-scope="group"` ekleyin ve `data-review-product` değerini `$product->get_id()` yapın; grup kodu WooCommerce'teki ürün numarasıdır.

## Alan adı doğrulama

Yorumlar yalnızca doğrulanmış alan adlarındaki sayfalarda görünür. Alan adını panelde ekleyip doğrulayın: [Alan adı doğrulama](/tr/integrate/channels-and-keys.md#alan-adi-dogrulama). WordPress'te doğrulama dosyası sunucunun dosya yöneticisiyle ya da FTP ile sitenin köküne konur; dosya koyamıyorsanız **Doğrulama yolu** olarak **DNS kaydı**'nı seçip alan adınızın DNS yönetiminde `TXT` kaydı ekleyin.

## Güvenlik

- Consumer secret şifreli saklanır ve panelde ya da API yanıtlarında bir daha gösterilmez.
- Yalnızca `https` adreslerine bağlanılır; özel ağ adresleri ve yönlendirmeler reddedilir.
- Anahtarın yalnızca **Read** izni olmalıdır; Sayproof WooCommerce'te hiçbir şeyi değiştirmez. Bağlantıyı tamamen kesmek için anahtarı WooCommerce'te iptal edin.
- Bağlantılar yalnızca panelde oturum açmış ve "Ayarları değiştirebilir" iznine sahip bir kullanıcı tarafından görülür ve yönetilir; API anahtarıyla bu işlemler yapılamaz.
- Kurma, değiştirme, deneme, elle okuma ve kaldırma işlemleri **İşlem geçmişi** ekranına kaydedilir.
