// --- AJAX: add item to cart --- add_action( 'wp_ajax_nsdc_add', 'nsdc_add_to_cart' ); add_action( 'wp_ajax_nopriv_nsdc_add', 'nsdc_add_to_cart' ); function nsdc_add_to_cart() { global $wpdb; $wpdb->insert( $wpdb->prefix . 'nsdc_cart', array( 'domain' => sanitize_text_field( $_POST['domain'] ), 'price' => floatval( $_POST['price'] ), ) ); wp_send_json_success(); } // --- AJAX: get cart contents --- add_action( 'wp_ajax_nsdc_cart', 'nsdc_get_cart' ); add_action( 'wp_ajax_nopriv_nsdc_cart', 'nsdc_get_cart' ); function nsdc_get_cart() { global $wpdb; $items = $wpdb->get_results( 'SELECT * FROM ' . $wpdb->prefix . 'nsdc_cart' ); wp_send_json_success( $items ); } // --- AJAX: Stripe Checkout session --- add_action( 'wp_ajax_nsdc_create_checkout', 'nsdc_create_checkout' ); add_action( 'wp_ajax_nopriv_nsdc_create_checkout', 'nsdc_create_checkout' ); function nsdc_create_checkout() { \Stripe\Stripe::setApiKey( NSDC_STRIPE_SECRET ); global $wpdb; $items = $wpdb->get_results( 'SELECT * FROM ' . $wpdb->prefix . 'nsdc_cart' ); $line_items = array(); foreach ( $items as $item ) { $line_items[] = array( 'price_data' => array( 'currency' => 'usd', 'product_data' => array( 'name' => $item->domain ), 'unit_amount' => intval( $item->price * 100 ), ), 'quantity' => 1, ); } $session = \Stripe\Checkout\Session::create( array( 'payment_method_types' => array( 'card' ), 'line_items' => $line_items, 'mode' => 'payment', 'success_url' => add_query_arg( 'session_id', '{CHECKOUT_SESSION_ID}', home_url() ), 'cancel_url' => home_url( '?canceled=true' ), ) ); wp_send_json_success( array( 'id' => $session->id ) ); } // --- AJAX: register domains --- add_action( 'wp_ajax_nsdc_register', 'nsdc_register_domains' ); add_action( 'wp_ajax_nopriv_nsdc_register', 'nsdc_register_domains' ); function nsdc_register_domains() { global $wpdb; $items = $wpdb->get_results( 'SELECT * FROM ' . $wpdb->prefix . 'nsdc_cart' ); $results = array(); foreach ( $items as $item ) { $resp = wp_remote_get( add_query_arg( array( 'version' => '1', 'type' => 'xml', 'key' => NSDC_NAMESILO_KEY, 'domain' => $item->domain, 'years' => '1', 'private' => 'false', 'auto_renew'=> 'false', ), 'https://www.namesilo.com/api/registerDomain' ) ); $body = is_wp_error( $resp ) ? '' : wp_remote_retrieve_body( $resp ); $success = strpos( $body, '300' ) !== false; $results[ $item->domain ] = $success ? 'registered' : 'failed'; } // clear cart $wpdb->query( 'TRUNCATE TABLE ' . $wpdb->prefix . 'nsdc_cart' ); wp_send_json_success( $results ); }