Brian
Tengo problemas para averiguar qué función se llama cuando se completa un pago con Woocommerce y PayPal envía el IPN.
El IPN se recibe porque el archivo de registro de PayPal se actualiza tan pronto como hago clic Pay
pero no puedo averiguar qué función está escribiendo en ese archivo.
Necesito averiguar si ya existe una funcionalidad integrada para enviar correos electrónicos al administrador. cuando se crea una orden, y dónde esto pasa.
Si existe, necesito modificarlo para enviar correos electrónicos a otras personas también, y si no, entonces necesito crearlo yo mismo, pero necesito saber dónde colocar el código.
brasofilo
Comprobando el archivo /wp-content/plugins/woocommerce/classes/gateways/paypal/class-wc-paypal.php
vemos que hay un gancho de acción dentro de la función check_ipn_response
:
if ($this->check_ipn_request_is_valid()) :
header('HTTP/1.1 200 OK');
do_action("valid-paypal-standard-ipn-request", $_POST);
Puedes conectarlo así:
add_action( 'valid-paypal-standard-ipn-request', 'so_12967331_ipn_response', 10, 1 );
function so_12967331_ipn_response( $formdata )
{
// do your stuff
}
-
Me di cuenta de eso hace un tiempo, y si no recuerdo mal, es similar a lo que hice. ¡Gracias por la respuesta!
– Brian
03/04/2013 a las 16:46
Jibran
Sobre la base de la respuesta de @brasofilo, tuve que hacer trabajo adicional para cada producto del pedido actual.
Nota: soy nuevo en (des) serializar datos, por lo que no sé por qué tuve que eliminar las comillas dobles para obtener unserialize()
trabajar. Lanzó un error, de lo contrario. Tal vez haya una mejor manera de manejar esto.
function so_12967331_ipn_response( $formdata ) {
if ( !empty( $formdata['invoice'] ) && !empty( $formdata['custom'] ) ) {
if( $formdata['payment_status'] == 'Completed' ) {
if( is_serialized( $posted['custom'] ) ) {
// backwards compatible
// unserialize data
$order_data = unserialize( str_replace('\"', '"', $posted['custom'] ) );
$order_id = $order_data[0];
} else {
// custom data was changed to JSON at some point
$order_data = (array)json_decode( $posted['custom'] );
$order_id = $order_data['order_id'];
}
// get order
$order = new WC_Order( $order_id );
// got something to work with?
if ( $order ) {
// get user id
$user_id = get_post_meta( $order_id, '_customer_user', true );
// get user data
$user = get_userdata( $user_id );
// get order items
$items = $order->get_items();
// loop thru each item
foreach( $items as $order_item_id => $item ) {
$product = new WC_Product( $item['product_id'] );
// do extra work...
}
}
}
}
}