'POST', 'callback' => array( $this, 'handle_wc_callback' ), 'permission_callback' => '__return_true', ) ); } public function get_auth_url() { if ( ! class_exists( 'WooCommerce' ) ) { return new WP_Error( 'wc_missing', 'WooCommerce is not active.' ); } $app_name = 'RecomAI Chatbot'; $user_id = get_current_user_id(); $return_url = admin_url( 'admin.php?page=aimbrill-chatbot-for-recomai&wc-auth=success' ); $callback_url = get_rest_url( null, 'aimbrill-recomai/v1/wc-callback' ); $scope = 'read_write'; $store_url = untrailingslashit( site_url() ); $state = wp_generate_password( 32, false ); set_transient( 'recomai_wc_auth_state_' . $user_id, $state, HOUR_IN_SECONDS ); $auth_url = sprintf( '%s/wc-auth/v1/authorize?app_name=%s&scope=%s&user_id=%d&return_url=%s&callback_url=%s', $store_url, rawurlencode( $app_name ), $scope, $user_id, rawurlencode( $return_url ), rawurlencode( add_query_arg( array( 'auth_state' => $state, 'user_id' => $user_id ), $callback_url ) ) ); return $auth_url; } public function handle_wc_callback( $request ) { $params = $request->get_params(); $user_id = isset( $params['user_id'] ) ? absint( $params['user_id'] ) : 0; $auth_state = isset( $params['auth_state'] ) ? sanitize_text_field( $params['auth_state'] ) : ''; $saved_state = get_transient( 'recomai_wc_auth_state_' . $user_id ); if ( empty( $auth_state ) || $auth_state !== $saved_state ) { return new WP_REST_Response( array( 'status' => 'error', 'message' => 'Invalid auth state' ), 403 ); } delete_transient( 'recomai_wc_auth_state_' . $user_id ); if ( empty( $params['consumer_key'] ) || empty( $params['consumer_secret'] ) ) { return new WP_REST_Response( array( 'status' => 'error', 'message' => 'Missing keys' ), 400 ); } $settings = get_option( 'recomai_settings' ); $settings['wc_consumer_key'] = sanitize_text_field( $params['consumer_key'] ); $settings['wc_consumer_secret'] = sanitize_text_field( $params['consumer_secret'] ); $settings['wc_store_url'] = untrailingslashit( site_url() ); update_option( 'recomai_settings', $settings ); // Sync with RecomAI Backend $api = new RecomAI_API(); $api->connect_woocommerce( $settings['wc_consumer_key'], $settings['wc_consumer_secret'], $settings['wc_store_url'] ); return new WP_REST_Response( array( 'status' => 'success' ), 200 ); } public function trigger_sync_after_update( $product_id, $product ) { $settings = get_option( 'recomai_settings' ); if ( ! empty( $settings['api_token'] ) && ! empty( $settings['wc_consumer_key'] ) ) { // Future: Implement webhook or direct API call to RecomAI for single product sync } } }