Tengo un sitio web con múltiples instalaciones de wp independientes en el subdominio. No es una instalación multisitio. Cada una de las instalaciones de wp tiene su propia tienda woocommerce habilitada.

Eg:

example.com // main site
first.example.com // subdomain 
2nd.example.com //subdomain

El problema, ¿cómo utilizo la única URL de PayPal IPN para todos los sitios web?

0
dev-jim 15 jun. 2017 a las 08:46

3 respuestas

La mejor respuesta

Esta es la solución con la que salí.

Gracias @ ahmed-ginani señaló el script. Todavía hay otros trabajos que hacer porque no puede aplicar el script directamente.

Básicamente esto es lo que hago, definir un punto final de IPN de Paypal personalizado. Este punto final redirigirá al subdominio woocommerce ipn punto final correctamente.

Aquí está el guión:

En cada subdominio en el que tenga habilitado el gateway de paypal de woocommerce.

//first addding the woocommerce paypal ipn in the checkout field, this will be used when paypal sending back to the custom ipn endpoint. 

add_filter('woocommerce_paypal_args', 'add_web_paypal_url');
function add_web_paypal_url($args){

    $url = site_url();
    $ipn = add_query_arg( 'wc-api', 'WC_Gateway_Paypal', $url);
    /*we need to merge it into custom field*/
    $oldcustom = json_decode($args['custom'], true);
    $newcustom = array_merge($oldcustom , array('ipnurl' => $ipn) );
    $args['custom'] = json_encode($newcustom);  

    return $args;
} 

Luego, en el sitio de dominio principal (o el sitio donde desea definir el punto final de ipn personalizado), reenviamos los datos de retorno de paypal al punto final de ipn adecuado.

Entonces, supongamos que el punto final de ipn personalizado es https://www.example.com?action=ipn_forwarder

add_action( 'init', 'paypal_ipn_fowarder' );
function paypal_ipn_fowarder(){
    if (isset($_GET['action']) && $_GET['action']=='ipn_forwarder'&& isset($_POST['custom']) ) {
        if ( ( $custom = json_decode( $_POST['custom'] ) ) && is_object( $custom ) ) {

            $ipnurl  = $custom->ipnurl;
            if(isset($ipnurl)){
                $data = array();
                foreach ($_POST as $key => $value) $data []= urlencode($key).'='.urlencode($value);
                $data = implode('&', $data);

                $ch = curl_init(); /* Initialize */

                curl_setopt($ch, CURLOPT_URL, $ipnurl);
                curl_setopt($ch, CURLOPT_POST, count($data));
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

                curl_exec($ch); /* Execute HTTP request */

                curl_close($ch); /* Close */

                header( 'HTTP/1.1 200 OK', true, 200 );
                exit();
            }else{
                    return;
            }

        }
    }
}

Eso es todo.

0
dev-jim 20 jun. 2017 a las 05:09

Solo puede configurar la cuenta de PayPal para enviar IPN a una única URL, sin embargo, puede reenviar esos datos a URL adicionales si lo desea.

Como está utilizando WordPress, la mejor manera de hacerlo sería instalar PayPal IPN para WordPress, que es gratuito, y luego compre el IPN Forwarder extensión. Lo que debería hacer es configurar PayPal para enviar IPN a la URL proporcionada por el complemento gratuito, y luego el Reenviador le dará la capacidad de tantas URL adicionales como sea necesario para reenviar los datos de IPN para que todos se ejecuten.

Por supuesto, podría simplemente crear su propio script IPN que reenvíe los datos también si no desea utilizar esos complementos.

0
Drew Angell 15 jun. 2017 a las 14:32

Sin embargo, una URL de IPN es específica del sitio, por lo que no puede usar la misma URL para varios dominios. Esto crearía un problema grave que resultaría en

  • Membership Pro no recibe notificación de PayPal sobre el estado de la transacción
  • Errores en el lado de PayPal que podrían llevar a suspender su cuenta de PayPal.

Pero aún puede usar el IPN de PayPal a través de solicitudes de filtros por IP. Consulte el script aquí para eso: http://codeseekah.com/2012/02/11/how-to-setup-multiple-ipn-receivers-in-paypal/

0
Ahmed Ginani 15 jun. 2017 a las 06:30