WordPress

WordPress ve WooCommerce'e Kripto Ödeme (USDT) Ekleme Rehberi

KriptoGo Ekibi··4 dk okuma

WooCommerce, ödeme yöntemlerini eklentiyle genişletmek için standart bir sınıf sunar. Bu rehber, KriptoGo'yu bir WooCommerce ödeme yöntemi olarak ekleyen küçük bir eklentinin nasıl yazıldığını gösterir; kod yazmak istemeyenler için yapay zekaya nasıl yaptırılacağını da anlatır.

Mimari

Akış klasik WooCommerce ödeme yöntemiyle aynıdır: müşteri ödeme sayfasında "Kripto ile öde (USDT)" seçer, process_payment çalışır, eklenti KriptoGo'dan fatura oluşturur ve müşteriyi hazır ödeme sayfasına yönlendirir. Ödeme onaylanınca KriptoGo, eklentinin WordPress REST API üzerinden açtığı webhook ucuna bildirim gönderir; eklenti imzayı doğrular ve $order->payment_complete() çağırır. Müşteri, returnUrl ile WooCommerce'in teşekkür sayfasına döner.

Eklenti iskeleti

wp-content/plugins/kriptogo-odeme/kriptogo-odeme.php dosyası:

kriptogo-odeme.php
<?php
/**
 * Plugin Name: KriptoGo Ödeme
 * Description: WooCommerce için USDT (TRC-20) kripto ödeme yöntemi.
 * Version: 1.0
 */
if (!defined('ABSPATH')) exit;

add_action('plugins_loaded', function () {
    if (!class_exists('WC_Payment_Gateway')) return;

    class WC_Gateway_KriptoGo extends WC_Payment_Gateway {
        public function __construct() {
            $this->id                 = 'kriptogo';
            $this->method_title       = 'KriptoGo (USDT TRC-20)';
            $this->method_description = 'Kripto ile ödeme. Müşteri USDT veya TRX ile öder.';
            $this->has_fields         = false;
            $this->init_form_fields();
            $this->init_settings();
            $this->title       = $this->get_option('title', 'Kripto ile öde (USDT)');
            $this->description = $this->get_option('description');
            add_action('woocommerce_update_options_payment_gateways_' . $this->id, [$this, 'process_admin_options']);
        }
        public function init_form_fields() {
            $this->form_fields = [
                'enabled'     => ['title' => 'Etkin', 'type' => 'checkbox', 'default' => 'yes'],
                'title'       => ['title' => 'Başlık', 'type' => 'text', 'default' => 'Kripto ile öde (USDT)'],
                'description' => ['title' => 'Açıklama', 'type' => 'textarea', 'default' => 'TRON ağında USDT (TRC-20) veya TRX ile ödeyin.'],
                'api_key'     => ['title' => 'KriptoGo apiKey', 'type' => 'password'],
                'secret_key'  => ['title' => 'KriptoGo secretKey', 'type' => 'password'],
            ];
        }
        public function process_payment($order_id) { /* aşağıda */ }
    }

    add_filter('woocommerce_payment_gateways', function ($g) { $g[] = 'WC_Gateway_KriptoGo'; return $g; });
});

Ayar sayfası ve anahtarlar

Yukarıdaki init_form_fields WooCommerce > Ayarlar > Ödemeler altında bir ayar sayfası oluşturur. Anahtarlar password tipinde saklanır ve get_option ile okunur. Alternatif olarak wp-config.php içinde sabit tanımlayıp (define('KRIPTOGO_API_KEY', ...)) veritabanına hiç yazmayabilirsiniz; bu, veritabanı yedeklerinin sızması durumunda daha güvenlidir.

process_payment: faturayı oluştur

process_payment
public function process_payment($order_id) {
    $order = wc_get_order($order_id);
    $body  = json_encode([
        'apiKey'      => $this->get_option('api_key'),
        'amount'      => (float) $order->get_total(),        // mağaza para birimi USDT/USD olmalı
        'callbackUrl' => rest_url('kriptogo/v1/webhook'),
        'returnUrl'   => $this->get_return_url($order),
    ]);
    $res = wp_remote_post('https://kriptogo.com/api/create-invoice', [
        'headers' => ['Content-Type' => 'application/json'], 'body' => $body, 'timeout' => 15,
    ]);
    if (is_wp_error($res)) { wc_add_notice('Ödeme başlatılamadı, lütfen tekrar deneyin.', 'error'); return; }
    $inv = json_decode(wp_remote_retrieve_body($res), true);
    if (empty($inv['checkout_url'])) { wc_add_notice('Ödeme başlatılamadı: ' . esc_html($inv['error'] ?? ''), 'error'); return; }

    $order->update_meta_data('_kriptogo_invoice_id', $inv['invoice_id']);
    $order->update_status('pending', 'KriptoGo faturası oluşturuldu: ' . $inv['invoice_id']);
    $order->save();
    return ['result' => 'success', 'redirect' => $inv['checkout_url']];
}

Dikkat: amount USDT cinsindedir. Mağazanızın para birimi TL ise tutarı güncel kurla USDT'ye çevirmeniz gerekir; bunun için bir kur kaynağı kullanın ve dönüşümü sunucuda yapın. En basit yol mağaza para birimini USD/USDT tutmaktır.

REST webhook ucu

webhook
add_action('rest_api_init', function () {
    register_rest_route('kriptogo/v1', '/webhook', [
        'methods' => 'POST', 'permission_callback' => '__return_true',
        'callback' => function (WP_REST_Request $req) {
            $gw       = WC()->payment_gateways()->payment_gateways()['kriptogo'];
            $raw      = $req->get_body();                          // ham gövde
            $expected = hash_hmac('sha256', $raw, $gw->get_option('secret_key'));
            $received = $req->get_header('x-kriptogo-signature') ?? '';
            if (!hash_equals($expected, $received)) return new WP_REST_Response(['error' => 'bad signature'], 401);

            $d = json_decode($raw, true);
            if (($d['status'] ?? '') !== 'PAID') return ['ok' => true];

            $orders = wc_get_orders(['meta_key' => '_kriptogo_invoice_id', 'meta_value' => $d['invoice_id'], 'limit' => 1]);
            if (!$orders) return ['ok' => true];
            $order = $orders[0];
            if ($order->is_paid()) return ['ok' => true];         // idempotent
            if ((float) $d['paid_amount'] < (float) $order->get_total() * 0.98) {
                $order->update_status('on-hold', 'Eksik ödeme: ' . $d['paid_amount']); return ['ok' => true];
            }
            $order->payment_complete($d['tx_hash']);
            $order->add_order_note('KriptoGo ödemesi alındı. TX: ' . $d['tx_hash']);
            return ['ok' => true];
        },
    ]);
});

Siparişi tamamlama ve stok

payment_complete() siparişi "işleniyor" veya "tamamlandı" durumuna alır, stokları düşer ve müşteri e-postasını tetikler. is_paid() kontrolü, yeniden denenen webhook'larda siparişin ikinci kez işlenmesini engeller. Eksik ödemede siparişi beklemede tutmak, sizin manuel karar vermenizi sağlar.

Yapay zekaya yaptırmak

Kod yazmak istemiyorsanız KriptoGo panelinde Kurulum promptu bölümünden teknoloji olarak WordPress / WooCommerce seçin. Üretilen prompt, yukarıdaki yapıyı (eklenti, ayar sayfası, WC_Payment_Gateway, REST webhook, payment_complete) ve güvenlik kurallarını yapay zekaya açıkça söyler. Ayrıntılar: yapay zeka ile entegrasyon.

Test

  1. Eklentiyi etkinleştirin, anahtarları girin, ödeme yöntemini açın.
  2. Düşük fiyatlı bir test ürünü ekleyip satın alın; KriptoGo ödeme sayfasına yönlenmelisiniz.
  3. Ödeyin; sipariş "işleniyor"a dönmeli ve sipariş notunda TX hash görünmeli.
  4. Webhook adresini (/wp-json/kriptogo/v1/webhook) yanlış imzayla çağırın; 401 dönmeli.
  5. Güvenlik eklentiniz veya sunucu kuralları REST API'yi engelliyorsa bu yolu istisna listesine ekleyin.
Mevzuat notuKripto varlıkların ödemelerde kullanımı ülkeden ülkeye farklı düzenlenir; Türkiye'de de bu konuda kısıtlayıcı düzenlemeler vardır. Bu yazı teknik bir rehberdir, hukuki veya vergisel danışmanlık değildir. Faaliyetinizin bulunduğunuz ülke mevzuatına uygunluğunu bir uzmana danışarak doğrulayın.

Sık sorulan sorular

Mağazam TL ile çalışıyor, tutarı nasıl göndereceğim?

KriptoGo faturaları USDT cinsindendir. TL tutarı güncel kur ile USDT'ye çevirip amount alanında gönderin; dönüşümü sunucuda yapın. En sade çözüm mağaza para birimini USD tutmaktır.

Hazır bir eklenti var mı?

Bu yazıdaki iskelet küçük ve tamdır; panelin kurulum promptu ile yapay zekaya da yaptırabilirsiniz. Resmî bir mağaza eklentisi yayınlanırsa dökümanda duyurulur.

Webhook WordPress'te 403 veriyor?

Güvenlik eklentileri veya sunucu kuralları REST API'yi kısıtlayabilir. /wp-json/kriptogo/v1/webhook yolunu istisna yapın ve permission_callback'in __return_true olduğundan emin olun; koruma imza doğrulamasıdır.

KriptoGo ile 30 dakikada kripto ödeme al

Kurulum ücreti yok, aylık ücret yok. Yalnızca başarılı tahsilattan %1.

Ücretsiz hesap oluştur