¿Cómo procesar pagos de PayPal en una aplicación iónica para Woocommerce?

4 minutos de lectura

Estoy trabajando en una aplicación ionic 2 que es básicamente un carrito de compras con Woocommerce como backend. Las cosas han ido bastante bien con la API REST: puedo buscar productos y crear pedidos para el cliente en la aplicación.

Pero ahora estoy atascado con el procesamiento de pagos. La aplicación solo usará PayPal, y hay un Complemento de PayPal me gustaria usar No lo he probado, pero parece bastante sencillo: pasa los detalles de la compra (precio, moneda, descripción…) y luego muestra la interfaz de usuario de PayPal.

Puedo proporcionar toda esa información a la interfaz de usuario de PayPal, pero plantea la pregunta obvia: ¿cómo la integro con el pedido de Woocommerce asociado? ¿Cómo hago para que si el pago es exitoso, Woocommerce lo registre como tal?

La instalación de Woocommerce ya habilita PayPal. Puedes usar PayPal en el sitio web muy bien.

Ahora, estoy bastante seguro de que tiene algo que ver con la IPN de PayPal. Haciendo una suposición descabellada, tal vez debería pasar de alguna manera la ID del pedido al complemento de PayPal, ¿entonces la IPN pasará esta misma ID de pedido a Woocommerce? Probablemente algo así, pero no puedo encontrar la documentación adecuada sobre esto.

Si busca “ionic 2 woocommerce paypal”, verá que muchas personas venden el código fuente por prácticamente lo mismo. Podría comprar uno y estudiarlo, pero prefiero encontrar documentación sobre esta acción en particular.

  • En lugar de usar un complemento, ¿por qué solo poner un botón HTML común para pagar?

    – Jonathan Brizio

    28 de marzo de 2017 a las 22:51

  • @JonathanBrizio aun así, no sabría qué información pasar a ese botón.

    – Saturno

    29 de marzo de 2017 a las 0:07

  • ¿Puede proporcionar una versión ligera de su implementación en Git Repo? Entonces podemos jugar con eso, ¿no?

    – Sampath

    4 de abril de 2017 a las 5:02

  • @Sampath es solo un botón que invoca exactamente el mismo código que la página de documentos: (ionicframework.com/docs/native/paypal) – funciona perfectamente bien – puede suponer que el pedido de Woo ya está creado (digamos que es el número 50) – Simplemente no sé cómo decirle a PayPal que le diga a Woo que este pago está asociado al pedido 50.

    – Saturno

    4 de abril de 2017 a las 5:30


  • Seguro. Voy a jugar con él y le haré saber el resultado.

    – Sampath

    4 de abril de 2017 a las 5:49

Ya casi has llegado. Si no desea comprar el complemento, puede hacerlo manualmente. Por ejemplo, establezca el notify_url parámetro a su sitio, con iepp_respond (o lo que quieras).

ingrese la descripción de la imagen aquí

En tus functions.phppon este código:

if(isset($_GET['pp_respond'])){
    file_put_contents(__DIR__."/my_notificationssss.txt", $_SERVER['REQUEST_URI']. "\r\n". print_r($_POST,true) . "\r\n ------------- \r\n" , FILE_APPEND);
}

luego haga una compra de prueba, y a lo largo del functions.php archivo habrá un nuevo archivo llamado my-notificationssss.txtbusque en ese archivo y descubra los parámetros que desea usar en el futuro.

Una posible solución sería agregar la información del pedido a la sesión de los usuarios antes de enviar al usuario a Paypal.

Después de que el usuario pague a través de Paypal, rediríjalo a una URL de “éxito” (especificada en la solicitud de PayPal). Cuando el usuario accede a esta URL de éxito, puede actualizar el pedido en WooCommerce utilizando la información de la sesión.

avatar de usuario
Luis Estévez

Después de buscar en el código fuente de WooCommerce, parece que agrega su propio ID de pedido a la sección de número de factura de PayPal.

Entonces, si tiene el complemento de PayPal de WooCommerce en su sitio (debe estar habilitado para IPN), puede usar el complemento de PayPal Cordova en ionic 2 pasando el ID de pedido de WooCommerce a número de factura. Como el siguiente ejemplo:

EDITAR: aunque WooCommerce agrega el número de factura, ahora creo que los parámetros más importantes que se pasan son los custom parámetro

pay() {
    let payment = new PayPalPayment(this.data.price, this.data.currency, this.data.description, 'sale');
    payment.custom = JSON.stringify({ order_id: this.data.WOOCOMMERCE_ORDERID, order_key: this.data.WOOCOMMERCE_ORDERKEY });
    this.payPal.renderSinglePaymentUI(payment).then((response) => {
        console.log(response);
        // Successfully paid

        // Example sandbox response
        //
        // {
        //   "client": {
        //     "environment": "sandbox",
        //     "product_name": "PayPal ANDROID SDK",
        //     "paypal_sdk_version": "2.16.0",
        //     "platform": "iOS"
        //   },
        //   "response_type": "payment",
        //   "response": {
        //     "id": "PAY-1AB23456CD789012EF34GHIJ",
        //     "state": "approved",
        //     "create_time": "2016-10-03T13:33:33Z",
        //     "intent": "sale"
        //   }
        // }
    }, () => {
        // Error or render dialog closed without being successful
    });
}

¿Ha sido útil esta solución?