PayPal WooCommerce - payment_complete 用于捕获电子邮件的挂钩

PayPal WooCommerce - payment_complete hook to capture email used

我遇到了一个问题,这个问题让我对支付完成挂钩感到非常疯狂,因为它与 PayPal 沙盒完美配合,但在我上线时却没有。

我要求所有新客户验证他们在首次购买时使用的 PayPal 电子邮件。我相信我遇到的问题是挂钩和函数在 WordPress 将贝宝电子邮件写入 post meta.

之前被触发

我无法 post 整个函数,但这是相关的:

add_action('woocommerce_payment_complete', 'preapproved_api_order', 10, 1);

function preapproved_api_order($order_id){  
if ( ! empty( $gateway->id ) && 'paypal' == $gateway->id ) {

$order = new WC_Order( $order_id );
    $user_id = $order->get_user_id();
    $gateway = wc_get_payment_gateway_by_order( $order );

      $paypal_email   = get_post_meta(  $order_id, 'Payer PayPal address', true );
      $error = 'paypal email used for payment '.$paypal_email;
    send_test_mail($error);
    }

我添加了一些快速错误检查,确实发送了没有包含电子邮件地址的电子邮件,这就是为什么我认为 WP 没有将电子邮件地址写入 post 元。

如果有人能想出另一种方法来获取贝宝电子邮件地址,以便它与此挂钩一起使用,我们将不胜感激。很奇怪,它在沙盒中运行而不是实时运行,我不确定是什么导致了延迟。提前致谢。

我无法弄清楚是什么导致延迟发布到 post_meta,但我确实找到了 IPN 挂钩,它捕获了从 PayPal 发回的所有订单和付款详细信息。只是 WooCommerce 中 PayPal 支付完整挂钩的另一种方式。希望它能帮助其他遇到同样问题的人:

add_action('valid-paypal-standard-ipn-request', 'preapproved_api_order', 10, 1);
function preapproved_api_order($details){
    global $woocommerce, $wpdb;

    $order_id = $details['item_number1'];
    $order = new WC_Order( $order_id );
}