Woocommerce: custom price based on user input

I found a solution which is not elegant but works for my purposes.

I was trying to use cookies before but I didn't set the cookie path so it was only available to the page it was set on.

I am now setting a cookie with the donation price:

setcookie("donation", $_GET['donation'], 0, "/");

Then I am setting the price like so:

add_action( 'woocommerce_before_calculate_totals', 'woo_add_donation');

function woo_add_donation() {
    global $woocommerce;

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        if($cart_item['data']->id == 358 && ! empty($_COOKIE['donation'])){
            $cart_item['data']->set_price($_COOKIE['donation']);
        }
    }
}

I have been looking for exactly the same thing. I found this WooCommerce plugin (not free) for this

name your price plugin

Initially I wasn't sure what search terms to use to find plugins like this but it looks like "WooCommerce name your price" brings up links to other sources of similar plugins.