Merhabalar,
Woocommerce Subscription kullanıyorum ve abone olan kullanıcılar için Wordpress dışında farklı bir sistemi daha aktif etmek istiyorum. Yeni abonelik başladığında ve yenilendiğinde tetiklenecek bir webhook ihtiyacım var.
Karşı servis header olarak benim API bilgimi de istiyor. Bununla birlikte tetiklenmesi lazım. Webhook içerisinde de sadece belirli bilgileri talep ediyor. Sadece abonelik aksiyonlarında nasıl tetiklerim? Header nasıl ekleyebilirim? Sadece belirli değerlerin gönderilmesini nasıl sağlarım? Eğer destek olabilirseniz çok sevinirim. Ekibe şimdiden teşekkür ederim.
Örnek isteği aşağıda paylaşıyorum:
curl --location ‘https://xxx-prod.up.railway.app/v1/webhook/woo’
–header ‘Content-Type: application/json’
–header ‘VERIEGITIMI_API_KEY: XXXXXXX1234567’
–data-raw ‘{
“first_name”: “Nafiz”,
“last_name”: “Altay”,
“email”: “info@veriegitimi.com”
}’
Merhaba, ileteceğim kodları mu-plugins dosyasında çalıştırıp sorununuzu çözebilirsiniz.
<?php
/**
* Plugin Name: Gurmehub Webhook
* Plugin URI:
* Description:
* Author:
* Author URI:
* License: GNU General Public License 2.0 (GPL) http://www.gnu.org/licenses/gpl-2.0.html
* Version: 1.0.0
*
* @package Gurmehub
*/
/**
* .com için webhook özelleştirmeleri.
*/
class GurmeHub_Webhook {
/**
* Kurucu method.
*/
public function __construct() {
add_filter( 'gposform_webhook_is_active', array( $this, 'is_active' ), 10, 2 );
add_filter( 'gposform_transaction_webhook_headers', array( $this, 'headers' ) );
add_filter( 'gposform_transaction_webhook_transaction_request', array( $this, 'transaction_request' ) );
}
/**
* Webhook'in etkinlik durumunu ayar dışında şarta bağlamaya yarar.
*
* @param bool $is_active Etkinlik durumu.
* @param int $transaction_id İşlem ID.
*/
public function is_active( $is_active, $transaction_id ) {
$is_active = false;
$transaction = gpos_transaction( $transaction_id );
$plugins = [ GPOS_Transaction_Utils::WOOCOMMERCE, GPOS_Transaction_Utils::WOOCOMMERCE_SUBS, GPOS_Transaction_Utils::WOOCOMMERCE_BLOCKS ];
if ( in_array( $transaction->get_plugin(), $plugins, true ) && $transaction->get_type() === GPOS_Transaction_Utils::PAYMENT ) {
foreach ( $transaction->get_lines( array( 'product' ) ) as $line ) {
$product_id = wc_get_order_item_meta( $line->get_plugin_line_id(), '_product_id', true );
$product = wc_get_product( $product_id );
$product_type = $product->get_type();
if ( in_array( $product_type, array( 'subscription', 'variable-subscription' ), true ) ) {
$is_active = true;
}
}
}
return $is_active;
}
/**
* Webhook ile gönderilecek isteğin üst başlığı.
*
* @param array $headers Gönderilecek veriler.
*/
public function headers( $headers ) {
$headers['Content-Type'] = 'application/json';
$headers['VERIEGITIMI_API_KEY'] = 'xxxx'; // API anahtarınızı buraya giriniz.
return $headers;
}
/**
* Webhook ile gönderilecek verileri manipule eder.
*
* @param array $request Gönderilecek veriler.
*/
public function transaction_request( $request ) {
return wp_json_encode(
[
'first_name' => $request['customer_first_name'],
'last_name' => $request['customer_last_name'],
'email' => $request['customer_email'],
]
);
}
}
new GurmeHub_Webhook();
Bir çok farklı sistemin sahip olmadığı bir özellikti ve hızlı şekilde sorunuma çözüm oldunuz. Bu şekilde desteğinizi görmek çok anlamlı. Ekip harika, çok teşekkürler