Внести платеж в корзину в Woocommerce - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь программно добавить плату в корзину woocommerce из скрипта, который выполняется при отправке формы.Насколько мне известно, я не думаю, что могу использовать ловушку, так как мне нужно применить пользовательский сбор при отправке формы на странице (интеграция с пользовательским API).

У меня естьпопытался сделать следующее в скрипте:

add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );
function woo_add_cart_fee( $cart ){
    $valid = false;

    if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) {
        return;
    }

    if (isset($_POST['coupon_code'])) {
        $code = $_POST['coupon_code'];
        $coupon = new WC_Coupon($code);
        if($coupon->get_amount() != null){
            $valid == true;
        }

        //if not then lets check to see if its a giftcard.
        if($valid == false){
            $api_login="xxxxxx";
            $api_password="xxxxxx";
            $url = "https://xxxxxx.com/xxxxx/xxxxx.svc";
            $client = new SoapClient( $url . "?singleWsdl",
                array(
                "location" => $url,
                "login" => $api_login,
                "password" => $api_password,
                "trace" => 1
                )
            );  

            $request = new StdClass();
            $request->bonId = $code;
            $request->bonType = 'GiftCard';

            // call the correct database
            $request->context = new StdClass();
            $request->context->DatabaseId = 'xxxxx';    

            try {
                $resu = $client->GetBonAvailableAmount($request);
                if (isset($resu->GetBonAvailableAmountResult->Amount)) {
                    $amount = $resu->GetBonAvailableAmountResult->Amount;
                    $cart->add_fee('xxxxxx Gift Card ', floatval('-'.$amount * 0.83333), false, '' );                     
                } else {
                    $response['status'] = 'error';
                    $response['message'] = 'Gift card not recognized.';
                }
            } catch (Exception $e) {

            }
        }
    }
} 

, и я вижу, что когда я echo объект корзины, появляется объект fee, который содержит все правильные данные.

Кажется, что корзина или итоги не обновляются, если я обновляю страницу, они по-прежнему не отражают ожидаемые значения.

Я перебрал почти все сообщения Stack Overflow иКажется, не могу найти ничего, что решает проблему.

Есть ли что-то, что я здесь упускаю?

1 Ответ

0 голосов
/ 10 декабря 2018

Вам необходимо использовать пользовательскую функцию, подключенную к woocommerce_cart_calculate_fees action hook:

add_action( 'woocommerce_cart_calculate_fees', 'add_a_custom_fee', 10, 1 );
function add_a_custom_fee( $cart ) {
        $amount = 20;
        $cart->add_fee( __('Custom fee'), $amount );
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы).Проверено и работает.

...