Deshabilite todos los métodos de pago según la IP geográfica del país del usuario en WooCommerce

4 minutos de lectura

avatar de usuario
dom

En mi tienda de Woocommerce configuré el sistema de geolocalización, cuando la geolocalización identifica cualquier país que no sea TI, me gustaría deshabilitar los métodos de pago

Si es TI (geop-ip), mostrar métodos de pago

Si todos los demás países (geo-ip), deshabilite todos los métodos de pago.

avatar de usuario
LoicTheAztec

Woocommerce ya tiene una función de IP de geolocalización a través de WC_Geolocation clasepor lo que no necesita ningún complemento adicional.

Esta es la forma de deshabilitar las pasarelas de pago para todos los países excepto “IT” (Italia) código de país, basado en el país IP geolocalizado del cliente:

// Disabling payment gateways except for the defined country codes based on user IP geolocation country
add_filter( 'woocommerce_available_payment_gateways', 'geo_country_based_available_payment_gateways', 90, 1 );
function geo_country_based_available_payment_gateways( $available_gateways ) {
    // Not in backend (admin)
    if( is_admin() ) 
        return $available_gateways;

    // ==> HERE define your country codes
    $allowed_country_codes = array('IT');

    // Get an instance of the WC_Geolocation object class
    $geolocation_instance = new WC_Geolocation();
    // Get user IP
    $user_ip_address = $geolocation_instance->get_ip_address();
    // Get geolocated user IP country code.
    $user_geolocation = $geolocation_instance->geolocate_ip( $user_ip_address );

    // Disable payment gateways for all countries except the allowed defined coutries
    if ( ! in_array( $user_geolocation['country'], $allowed_country_codes ) )
        $available_gateways = array();

    return $available_gateways;
}

El código va en el archivo functions.php de su tema secundario activo (o tema activo). Probado y funciona.


Relacionada:

  • Deshabilite la pasarela de pago de WooCommerce para invitados y roles de usuario específicos
  • Habilitación del método de pago según la ubicación del cliente
  • Ocultar método de pago específico según el peso total en Woocommerce
  • Ocultar método de pago según el tipo de producto en WooCommerce

  • ¿Cómo deshabilitaría las pasarelas de pago específicas?

    – Julián Wagner

    27/01/2021 a las 17:50

  • @JulianWagner Usando por ejemplo unset($available_gateways['bacs']); en vez de $available_gateways = array();

    – LoicTheAztec

    27 de enero de 2021 a las 20:14

  • Gracias, lo descubrí por mi cuenta y publiqué un fragmento modificado a continuación.

    – Julián Wagner

    27 de enero de 2021 a las 22:18

avatar de usuario
Julián Wagner

Aquí hay una variación de la respuesta de @LoicTheAztec que deshabilita solo un método de pago específico en lugar de todos:

add_filter( 'woocommerce_available_payment_gateways', 'geo_country_based_available_payment_gateways', 90, 1 );
function geo_country_based_available_payment_gateways( $available_gateways ) {
  // Not in backend (admin)
  if( is_admin() )
    return $available_gateways;

  // ==> HERE define your country codes
  $allowed_country_codes = array('DE','AT');

  // Get an instance of the WC_Geolocation object class
  $geolocation_instance = new WC_Geolocation();
  // Get user IP
  $user_ip_address = $geolocation_instance->get_ip_address();
  // Get geolocated user IP country code.
  $user_geolocation = $geolocation_instance->geolocate_ip( $user_ip_address );

  // Disable payment gateways for all countries except the allowed defined coutries
  if ( ! in_array( $user_geolocation['country'], $allowed_country_codes ) ) {
    unset( $available_gateways['stripe_sofort'] );
  }

  return $available_gateways;
}

Sé Istack, así como maxmind, etc. Pensé en algo más simple como esta función, que se basa en blling_country y no en el país geo-ip:

function payment_gateway_disable_country( $available_gateways ) {
global $woocommerce;
if ( is_admin() ) return;
if ( isset( $available_gateways['authorize'] ) && $woocommerce->customer->get_billing_country() <> 'US' ) {
unset( $available_gateways['authorize'] );
} else if ( isset( $available_gateways['paypal'] ) && $woocommerce->customer->get_billing_country() == 'US' ) {
unset( $available_gateways['paypal'] );
}
return $available_gateways;
}

add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );

Para saber el país del usuario puedes usar una herramienta como FreeGeoIp, ahora renombrado como pila de ip. Usted proporciona al servicio una dirección IP y le indicará la dirección del país en la que probablemente se encuentra el usuario (entre otra información).

Hay dos opciones 1. Usar su API alojada (gratis para 10 000 solicitudes y pagada por más que eso) 2. Descargar una versión desde el enlace de GitHub y alojarla usted mismo

Cuando necesite saber el país del usuario, puede enviar una solicitud HTTP con la dirección IP del usuario a la API y luego usar esa información para habilitar o deshabilitar el método de pago.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad