WordPress ve WooCommerce'e Kripto Ödeme (USDT) Ekleme Rehberi
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ı:
<?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
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
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
- Eklentiyi etkinleştirin, anahtarları girin, ödeme yöntemini açın.
- Düşük fiyatlı bir test ürünü ekleyip satın alın; KriptoGo ödeme sayfasına yönlenmelisiniz.
- Ödeyin; sipariş "işleniyor"a dönmeli ve sipariş notunda TX hash görünmeli.
- Webhook adresini (
/wp-json/kriptogo/v1/webhook) yanlış imzayla çağırın; 401 dönmeli. - Güvenlik eklentiniz veya sunucu kuralları REST API'yi engelliyorsa bu yolu istisna listesine ekleyin.
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.
