// ================================================================ // أجزاء السيرفر فقط — الويدجت يُضاف يدوياً من إليمنتور // الرقم المتحقق منه ينتقل: صفحة المنتج → السلة → الطلب → Webhook // ================================================================ // ============================================================ // الجزء 2: منع إضافة المنتج للسلة بدون تحقق (فحص سيرفر) // ============================================================ add_filter('woocommerce_add_to_cart_validation','invatna_validate_add_to_cart',10,3); function invatna_validate_add_to_cart($passed,$product_id,$quantity){ if(empty($_POST['invatna_verified_token'])||empty($_POST['invatna_verified_phone'])){ wc_add_notice('يجب التحقق من رقم الواتساب أولاً قبل إضافة المنتج للسلة','error'); return false; } return $passed; } // ============================================================ // الجزء 3: حفظ الرقم والرمز مع عنصر السلة // ============================================================ add_filter('woocommerce_add_cart_item_data','invatna_add_cart_item_data',10,2); function invatna_add_cart_item_data($cart_item_data,$product_id){ if(!empty($_POST['invatna_verified_phone'])){ $cart_item_data['invatna_phone']=sanitize_text_field($_POST['invatna_verified_phone']); $cart_item_data['invatna_token']=sanitize_text_field($_POST['invatna_verified_token']); $cart_item_data['invatna_unique']=uniqid(); } return $cart_item_data; } // ============================================================ // الجزء 4: عرض الرقم المتحقق في صفحة الكارت // ============================================================ add_filter('woocommerce_get_item_data','invatna_display_phone_in_cart',10,2); function invatna_display_phone_in_cart($item_data,$cart_item){ if(!empty($cart_item['invatna_phone'])){ $item_data[]=['key'=>'رقم الواتساب (متحقق)','value'=>esc_html($cart_item['invatna_phone'])]; } return $item_data; } // ============================================================ // الجزء 5: نقل البيانات من السلة إلى بنود الطلب // ============================================================ add_action('woocommerce_checkout_create_order_line_item','invatna_save_line_item_meta',10,4); function invatna_save_line_item_meta($item,$cart_item_key,$values,$order){ if(!empty($values['invatna_phone'])){ $item->add_meta_data('_invatna_phone',$values['invatna_phone']); $item->add_meta_data('_invatna_token',$values['invatna_token']); } } // ============================================================ // الجزء 6: إرسال بيانات الطلب لإنفايتنا بعد اكتمال الدفع // ============================================================ add_action('woocommerce_payment_complete','send_to_invatna_product'); function send_to_invatna_product($order_id){ $order=wc_get_order($order_id); $verified_phone='';$verified_token='';$product_id=0; $quantity=200;$qr_option='';$event_date='';$event_time=''; $hallname='';$delivery_method=''; foreach($order->get_items() as $item){ $phone=$item->get_meta('_invatna_phone'); if(empty($phone))continue; $verified_phone=$phone; $verified_token=$item->get_meta('_invatna_token'); $product_id=$item->get_product_id(); foreach($item->get_meta_data() as $meta){ $k=$meta->key;$v=$meta->value; if(stripos($k,'عدد')!==false||stripos($k,'quantity')!==false){if(preg_match('/\d+/',$v,$m))$quantity=intval($m[0]);} if(stripos($k,'qr')!==false)$qr_option=$v; if(stripos($k,'date')!==false||$k==='التاريخ')$event_date=$v; if(stripos($k,'time')!==false||$k==='الوقت')$event_time=$v; if(stripos($k,'hall')!==false||stripos($k,'قاعة')!==false||stripos($k,'مكان')!==false)$hallname=$v; if(stripos($k,'delivery')!==false)$delivery_method=$v; } break; } if(empty($verified_phone))return; $customer_phone=$verified_phone; $name=trim($order->get_billing_first_name().' '.$order->get_billing_last_name()); $response=wp_remote_post('https://invite-bot.replit.app/api/webhook/woocommerce',[ 'headers'=>['Content-Type'=>'application/json'], 'body'=>json_encode([ 'customer_phone' =>preg_replace('/[^0-9]/','',trim($customer_phone)), 'customer_name' =>$name, 'quantity' =>$quantity, 'order_id' =>$order_id, 'product_id' =>$product_id, 'date' =>$event_date, 'time' =>$event_time, 'hallname' =>$hallname, 'delivery_method' =>$delivery_method, 'qr_option' =>$qr_option, 'woo_verified_token' =>$verified_token?:'', ]), 'timeout'=>30, ]); if(is_wp_error($response)){ error_log('Invatna webhook error: '.$response->get_error_message()); } }