Внести платеж в корзину в Woocommerce
Я пытаюсь программно добавить плату в корзину 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
объект, который содержит все правильные данные.
Кажется, что корзина или итоги не обновляются, если я обновляю страницу, они все еще не отражают ожидаемые значения.
Я просмотрел почти все сообщения о переполнении стека и не могу найти ничего, что решило бы проблему.
Есть ли что-то, что мне здесь не хватает?
1 ответ
Вам нужно использовать пользовательскую функцию, подключенную woocommerce_cart_calculate_fees
Хук действия:
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 вашей активной дочерней темы (или активной темы). Проверено и работает.