wc-edostavka icon indicating copy to clipboard operation
wc-edostavka copied to clipboard

Проблема при вводе не существующего города

Open dimsonbgg opened this issue 7 years ago • 0 comments

Вечер добрый! Заметил странную особенность, если ввожу город "Владивосток " ( именно с пробелом после названия), то ввод города все равно осуществляется и стоимость доставки не меняется. В итоге клиент платит за доставку 100 рублей ( рассчитывает как по городу отправки), вместо положенных нескольких тысяч. Установил плагин версии 1.3.7 - в принципе работает, ввожу пробел после города и плагин сдэк сразу же отключается. У кого нибудь наблюдается данная проблема?! На cdek.woodev.ru тестировал, там все работает отлично (это означает, что пора переходить на платную версию плагина?)

В логах следующая информация: При вводе города "Владивосток " с пробелом - [sender_city] => 169 [receiver_city] => 169 При вводе города "Владивосток" и кликнув на него из списка - [sender_city] => 169 [receiver_city] => 288 Также, если написать город Лос анжелес или любой другой, которого нет в списке, выводит следующее - [sender_city] => 169 [receiver_city] => 169

Спустя немного времени выяснил следующее: В файле class-wc-shipping-edostavka.php имеется функция

private function get_receiver_city( $package ) {
		$city_origin = wc_edostavka_get_option( 'city_origin' );
		if( ! empty( $package['destination']['state_id'] ) && is_numeric( $package['destination']['state_id'] ) ) {
			return absint( $package['destination']['state_id'] );
		} elseif ( ! empty( WC()->customer->state_id ) ) {
			return absint( WC()->customer->state_id );
		} elseif( ! empty( $city_origin ) ) {
			return absint( $city_origin );
		}	
	}

Если удалить восклицательный знак во втором elseif, то плагин будет также функционировать, как и в версии 1.3.7. -при вводе неизвестного города или добавлении пробела после города плагин СДЭК будет отключаться:

private function get_receiver_city( $package ) {
		$city_origin = wc_edostavka_get_option( 'city_origin' );
		if( ! empty( $package['destination']['state_id'] ) && is_numeric( $package['destination']['state_id'] ) ) {
			return absint( $package['destination']['state_id'] );
		} elseif ( empty( WC()->customer->state_id ) ) {
			return absint( WC()->customer->state_id );
		} elseif( ! empty( $city_origin ) ) {
			return absint( $city_origin );
		}	
	}

Пока остается загадкой, как сделать проверку на ввод города, есть ли он в списке или нет. Хмм, при данном способе опять нужно 2 раза вводить город, чтобы обновился метод...

Проверил на абсолютно чистом wordpress версии 4.8.3. и woocommerce 2.6.7 - имеется та же проблема!

dimsonbgg avatar Nov 05 '17 16:11 dimsonbgg